首先,我们需要建立一个全零的Q表,然后让模型以ξ-greedy的概率选择exploitation(最优)或者是exploration(随机探索)。更新Q表的方法如上图的公式,新的Q值等于当前Q值加上α*Q的差值。
Q差值的计算方法见第二行的公式,其中R是探索到该步实际获得的奖励值,γ代表未来预期对当前的影响。Q’选取未来可以获得的最大奖励值,最后的Q也是当前值。ξ-greedy的取值应当随着探索轮次的增多而线性变化,具体含义为:开始时尽可能多的去向外探索,若干轮次之后尽可能按照最优解来进行运动(有助于模型的收敛)。
在多轮次的训练后,我们就可以得到最终的Q表,Q表类似于神经网络中的系数矩阵W和b,模型在运行时只需要按照Q表的最优解进行任务处理(类似于神经网络中实际运行时,只需要完成正向传播的过程)。
RL的伪代码如下图所示
Sarsa的公式如上图所示,基本与Q-learning完全一致。
唯一不同之处在于,γ直接乘以下一步动作所对应的价值,而非下一步可能的最大价值。具体而言,对于Q-learning算法,可以在每一次Q值更新完后,按照ξ-greedy的概率选取下一步的动作。而对于Sarsa,先依据ξ-greedy选择出下一步的动作,然后按照公式更新Q值,其伪代码如下图所示。
DQN是Q-learning方法的深度学习实现,核心思想是将Q表由神经网络表示(可以处理更为复杂的模型)。上方的公式是DQN损失函数的定义,可以看出这就是Q-learning中的ΔQ。在Q-learning中,我们是用α*ΔQ不断去修正当前的Q表,而在DQN中则是让损失函数ΔQ最小化,其实目标是相同的。 下面我们介绍DQN中的两种处理方法,使得模型更容易趋向于收敛。
经验回放其实包含两个部分:存储及回放。 DQN是一个off-policy模型 ,一方面使得模型不断运行获得数据集存储在经验池中。另一方面,模型在不断运行的过程中,从经验池中随机抽取数据样本进行训练,这就是经验回放的概念。主要的目的是为了减少数据之间的相关性。
在计算ΔQ也就是网络中的损失函数时,我们的目标网络不会随着模型随时更新,而是在N此迭代之后,将本地模型(现实模型)的参数传到目标网络上,对目标网络进行修正。主要的目的是为了防止神经网络长期的去学习一个不断变化的事物。
下面附上DQN算法的伪代码
上方公式是代表的是Policy Gradients 的损失值,我们的目标是损失值越小越好。具体而言,Q(s,a)表示选取某个动作所对应的价值,π(a∣s)为该动作的概率值。 当动作对应的价值较大时,我们期望他出现的概率也越大(趋向1),此时最终的损失值最小。
下面附上Policy Gradients的伪代码
本文参考及引用的文章
一.强化学习(二):Q learning 算法
二.强化学习之Sarsa
一图看懂Policy Gradients深度强化学习算法