关于强化学习当中那个DQN算法实现步骤真是有好多要说道说道的!其实,这强化学习,在寻找最优解从而获得最大奖励时,有好些个方法!而咱们要说的这个DQN算法它把神经网络和Q – 算法给结合起来!要知道,它那个效果还是挺可以的嘿。好,咱一起来看看它到底都有啥步骤
概念以及算法准备
1. 基础原理:这DQN算法主要就是想利用神经网络强大的表征能力。它把高维的作为强化学习中状态的数据,当成神经网络模型也就是咱们说的这个智能体或Agent的输入,然后这个神经网络模型就输出每个动作对应的价值也就是Q值,根据这个就得出要执行的动作
2. 和一般算法的对比:在状态空间和动作空间低维离散的时候可以用基于表格的方法去求解,可是,DQN它可以处理更多复杂情况,在高维、连续的空间里它特别有用,一般表格法可就干不了
搭建神经网络
1. 网络选择:选择合适的神经网络架构很重要的!像常见的多层感知机,也就是咱们说的全连接网络,简单点的时候选它就可以。要是输入复杂度高的时候用卷积神经网络也行
2. 定义结构:要确定输入层、隐藏层还有输出层的大小。输入层那里就是状态空间的维度,输出层就是动作空间的维度,隐藏层往往是根据数据集和经验去不断修改设定的。举个例子有时候呢藏5、6层隐藏层,不断修改神经元节点个数之后也许效果就特别棒
3. 参数初始化:得好好地初始化网络参数,一般呢用随机初始化这样的手段,比方说采用正态分布或者均匀分布去初始化参数如果能加入适当的偏差设定,这个网络可能初期学习起来就正常顺利好多
存储经验
1.经验池的创建:建立一个经验池那特别重要的可记住这个经验池的大小要依据问题的复杂度呀数据的充裕状况等因素去设定。因为假如经验池太大了话,搜索数据效率就不咋样,太小了能存的信息又少
2. 数据存储内容:每次智能体在环境里面采取一个行动,都会有状态转变、奖赏嘛等一堆信息输出,一定要保证准确无误地把一个四元组也就是初始状态、动作、奖赏和终止状态都正确地加到这个经验池里面去
### 求解价值网络
1. 定义损失函数:一般用均方误差这样的准则来定义作为价值网络的损失函数用神经网络输出的Q值和目标Q值来算差值,通过调整这些差来修改网络的参数。
2. 使用优化器 :可以选Adam或者SGD作为优化器。要恰当地设定学习率,太小了网络学习缓慢,太大了可能参数变得不稳定,比如可以一开始学习率设成0.001左右,不够好还得调整下
3. 逐步更新 :隔一定步骤再或者隔了固定经验数量就更新一次Q网络相关参数,要记住目标网络参数更新要频率慢。因为要是同步更新得太快的话不稳定不说,往往结果表现也不怎么样
4. 样本的采样处理:从创建好的这个经验池里边随机地采样那些数据样本,因为如此不仅确保了这些数据是随机独立的还实现了高效率输入。
5. 批数据训练 :每次采样得到大小均匀地批量数据。当然也可以尝试调整训练批次的大小,像设定为32呀64呀反正试试看哪个最优就行。把这输入网络然后进行误差反向传播,更新这个网络的参数。
互动环境并学习
1. 状态获取:在每一步初始化时获取当下环境的状态,给输入网络准备足够数据,要注意状态代表要稳定统一的,尽量能反应对行动预判关键的内容。
2. 行动选择:用一种比如说$$-贪心算法这样去恰当地选择行为,一般一开始设置的,例如初期要放很大的$ $
值从而使更多不同随机行动去探索整个可能的行为,这个值慢慢迭代变小,也就是越到后来以越大概率去根据现有的最佳Q值来实施行动。
3. 环境反馈 :选择行动就让智能体在设定的环境作用里面开始运行之后接收因为这行动引发出新的状态和环境给的反馈奖赏等结果。判断反馈、分析结果和当下的行动决策和目标间偏差,来思考要不要调整下算法参数才好。
4. 存储入经验池 经验数据一出来,立刻就有条不紊地将各种数据存储在咱们前边讲的经验池里。不过这个动作、奖赏等判定也可以不断依据问题的特征改进,从而数据样本质量越高才对。
5. 环境边界情况处理方法讨论 倘若碰到动作无效这种一些违反逻辑合理性的情况该咋办如果面对的整个环境有突然的转变如何处理,这些边界异常情况都根据真实问题特点设置具体好地方法合理地处置,才能让学习效果更稳定成功性能越来越高,所以问题场景特征调研,然后有针对性边界设定可避免掉好多麻烦哩!
常见问答汇总
问:每次到底啥时候才能训练一次
答:你可以设定,例如有了一定量数据样本,每经历10个或者更多一些步才去训练它个几次,然后训练完一批批次也得停下来看看下算法表现再决定需不需要调整参数进一步改良
问:经验池里的数据多久去除或者换一波?
答: 这个看具体情形如果环境和状态相对比较稳定而且数据不太会一直变的话可以隔好长一段时间更新,不然的情况可以相对来说快点来操作更新数据和清洗经验池
我觉得,按照上面这些步骤还有做法有条不紊执行下来,多调整、多修正,这DQN算法应该能训练成表现不错样子,当然根据具体场景来深入讨论和尝试那也特别重要。