在增强学习的世界,我们相信如果输入是确定的,那么输出也一定是确定的。试想一下,有一个机械臂在练习掷筛子,以掷出6点作为目标。但是如果无论机械臂如何调整其关节的角度及扭矩,掷出的点数永远是随机的,那么无论如何也不可能通过算法使机械臂达成目标。因此,增强学习算法要有用,就是相信在增强学习中每一次参数的调整都会对世界造成确定性的影响。

未完待续…哎开学了静下心学习的机会不多了呀~

神经网络方法求解RL
为什么引入神经网络
前面学习了Q表格求解RL,但是Q表格毕竟是动作种类和状态种类数量较少的情况,像如果用强化学习来训练小人走路那么关节动作的角度是无穷个状态的情况,这个时候就不能用Q表格来解决问题,需要使用值函数来做逼近处理。

解决序列决策的样本关联问题:

对于正常的监督学习的训练网络,样本之间是没有互相联系的关系的。但是强化学习是一个序列决策的问题,状态之间是相互连续的,因此需要打破数据间的关系。DQN利用off-policy的特点先存储了一批数据,然后打乱顺序从中选取一个小的batch的数据来更新网络这种方式既可以打乱数据间的相关性又可以使神经网络更有效率。

解决算法非平稳问题:

对于监督学习,输入x目的是让输出的y去逼近真实的y,这个真实值是固定的稳定的。但是强化学习的真实y是不定的,DQN让Q_target固定住然后定期拷贝神经网络的同步参数。—没咋听懂,核心应该是固定住Q目标

经验回放源码:
在这里插入图片描述

DQN代码实现model.py:

在这里插入图片描述

algorithm.py

在这里插入图片描述

def sync_target(self):
	self.model.sync_weights_to(self.target_model)

def predict(self,obs):
	return self.model.value(obs)

在这里插入图片描述

首先拿到model.py里面传过来的模型
将该模型复制一份给target_model
使用sync_target函数将model的参数同步到target_model网络
使用predict函数返回网络输出值
。。。。。。有点看不明白了,先看实践

单摆游戏
运行:PARL\examples\tutorials\lesson3\dqn\train.py文件即可
在这里插入图片描述

代码分析文件目录:

在这里插入图片描述