提示:转载清楚出处,若本文无意侵犯到您的合法权益,请及时与作者联系。
进阶阶段(一)——Q-Learning算法
一、Q-Learning的更新Q值的公式
在基础阶段我们已经学习了基于模型的动态规划算法,了解了值迭代的概念。Q-Learning的思想就是根据值迭代得到的。但要前面的值迭代每次都对所有状态和动作的Q值更新一遍,这在现实中可行性并不高。Q-Learning只使用有限的样本进行操作。
那么,怎么处理?Q Learning提出了一种更新Q值(在某个时刻在状态s下采取动作a的长期回报。)的办法:

上面的公式含义就是:
现在的Q值=原来的Q值+学习率*(立即回报+Lambda*后继状态的最大Q值-原来的Q值)
我们分析以上公式可知,为了得到最优策略Policy,我们需要估算每一个状态下每一种选择的Q值,而每一个时刻的Q值和当前得到的立即回报Reward以及下一个时刻的Q值有关。那么这种“自举现象”怎么实现呢?
二、Q-Learning的存储Q值的Q-Table
对于Q-Learning,首先就是要确定如何存储Q值,最简单的想法就是用矩阵(Q-Table),我们使用一个很大的表格,横列代表s,纵列代表a,里面的数字代表Q值,如下表示:
Q-Learning的目的是学习方法就是建立一个以State为行、Action为列的Q-Table,通过每个动作带来的奖赏不断更新Q-Table中的Q值,从而获得特定State下、特定Action的Q值。
Q-Learning是off-policy的,因为它的行动策略和评估策略不是一个策略。
Q-Learning中每次采取Action的行动策略是ε-greedy策略,即要保持探索和利用的微妙平衡;
而在学习更新Q表的时候使用的评估策略是贪婪策略,即永远将最好的动作记录在Q-Table中。
三、Q-Learning的更新Q值的算法流程
Q-Learning的更新Q值得算法流程为:
在上述算法中我们可以看出选择动作的时候使用的是ε-greedy策略,在更新Q值的公式中我们使用的是maxQ值,所以它是off-policy的,在上述过程中我们引入了如下两个概念:
Q现实:采取该动作获得的立即回报以及和下一个状态动作的Q值的加权和(Agent的经历中实际采取该动作后得到的Q值)
Q估计:从Q-Table中获得的当前状态和动作下的Q值(Agent学得的Q-Table中记录的Q值)
我们分析算法流程具体如下:
四、Q-Learning的工程化的执行流程
1、初始化阶段:
该阶段是每个程序都必备的阶段,在该阶段Q-Learning会建立并且初始化一个Q-Table,其中的Q值全部初始化为0:
2、训练学习阶段:
训练学习阶段是程序进入一个双重循环中,开启多个回合的训练中,在每个回合的训练中,有会进行很多步的学习。
以下列举一个步骤:
假设此时处于s1,先根据当前的Q-Table以及ε-greedy策略选取一个动作,此时每一个Q值都是0,随机选择即可。
假设选择a2,得到reward为1,后继状态s3。
利用Q值更新公式更新Q值,计算出新的Q值为1,则表格变为了:
此时状态变为了s3。
如此重复上述step,直到Q值不断收敛到一个稳定值即可。
详细的工程化细节,可以参考我的博客:莫烦Python代码实践(一)——Q-Learning算法工程化解析