强化学习实际上是找一个从观测到动作的最优映射函数,输入是外界观测,目标是奖励最大化。
强化学习的主要特点:
强化学习算法分类:
与马尔可夫过程不同,其状态转移概率包含动作,即
当γ取0的时候,我们期待的是一个短期的回报,当γ取1的时候,我们期待的是一个比较长期的回报。
状态值回报是在给定状态的情况下,计算累积回报的数学期望。
状态-动作值函数是在给定状态和动作的情况下,计算累积回报的数学期望。
有了贝尔曼方程,就可以借鉴动态规划的思想,可以将状态值函数和状态-动作值函数通过累积的方法迭代进行计算。
左上角和右下角是我们希望能达到的目标状态。在每一个动作(上下左右移动一次)执行后都可以得到一个立即回报R=-1
目标是想尽快地到达目标状态。
【策略迭代】
策略迭代分为两个过程:策略评估和策略更新。
策略评估:在当前的策略中更新各状态的值函数,即我们现在有一个给定的当前策略,我们通过当前的策略来选择动作,来更新相应的值函数。如果达到迭代次数或者值函数收敛就不再迭代。
策略更新:基于当前值函数得到最优策略。
基于策略评估,有四个策略进行了更新,是因为使用这四个动作后,都可以从当前的状态带到另外一个值函数比较高的状态之上。
第一行的 -1.7 =0.25(-1+0) + 0.25(-1±1) + 0.25(-1±1) + 0.25(-1±1)
策略迭代的缺点:如果策略空间很大,策略评估就会很耗时
【值迭代】
每次值迭代都找到让当前值函数最大的更新方式,并且用这种方式更新值函数,直到值函数不再变化。
二者比较:
【探索与利用】
利用:做你当前知道的能产生最大回报的事情。
探索:做你以前从来没有做过的事情,以期望获得更高的回报。
具体描述为:首先要给一个比较小的值 ε,然后我们可以通过一个分布来取得一个概率,通常情况下可以使用均匀分布区选择一个概率。如果概率小于 ε,就为强化学习执行一个随机动作;如果取出来的概率大于 ε,则选择刚才已经选好的最优的策略。由于在这个过程中,我们采取了随机的操作,就起到了一个探索的作用。
好处:
坏处:
除了 ε-greedy策略意外,还有其他策略,比如玻尔兹曼机策略和高斯策略,这两种策略和 ε-greedy的本质其实都是一致的,都是需要在一个确定性的策略上加一个随机的扰动。
以上方法都是model-based方法,接下来是model-free方法:
【蒙特卡洛方法】
为什么要采用monte carlo方法?
马尔可夫决策过程是典型的model-base方法,也就是说我们知道关于这个环境状态之间转换的关系以及他们的转换概率以及回报函数,但是对于大多数情况,我们是不知道环境的相关信息的,不清楚真实的状态转移概率或者即时奖励。
思想:在不知道环境相关信息的情况下,我们通常要对某一个状态的价值进行评估。通常情况下某个状态的价值等于在多个episode(每条episode就是一条从起始状态到结束状态的经历)中以该状态算得的所有奖励的平均。
蒙特卡洛的两种方法:
-first-visit:在计算状态s处的值函数时,只利用每个episode中第一次访问到状态s时返回的值。
-every-visit:在计算状态s处的值函数时,利用所有访问到状态s时的奖励返回值。
【时序差分学习TD-learning】
蒙特卡洛需要等到整个episode结束才能更新,且一定要有很多episode,蒙特卡洛方法才能够执行,需要大量的episode才能得到较为准确的结果。
时序差分可以认为是:假设agent向前走一步,用未来一步的回报去更新当前的值函数。步长可以取1、2、…、∞,如果当步长等于∞的时候,时序差分就等价于蒙特卡洛。
从偏差和方差的角度来说,由于蒙特卡洛算法是考虑了所有的episode并且很多步以后的回报都会被考虑到当前步的回报当中,所以它的计算偏差是0,但是由于采样的episode不尽相同,或者采样的episode的数目不够大,就导致了蒙特卡洛算法的方差很大。相比之下,时序差分算法由于考虑到状态之间的转换,也采用了一些概率上更新的方法,所以它的方法相对于较低,但是有偏差。
接下来是TD-learning的两个延伸算法,分别是Q-learning和Sarsa算法。
【Q-learning】
Q-learning是一种典型的off-policy(离线)学习算法。
我们要在Q-learning算法中维护一个Q值表。Q表的初值为:
我们要注意的是,对于这样一个model-free的问题,agent可能事先知道或者不知道state的个数。当agent知道state的个数时,我们可以把Q值表的行和列完全复制成reward fuction的行和列;当agent不知道state的个数时,那么在每一次和系统的交互过程中,如果agent认为它到达了一个新的状态,就为Q值表再新增加一行。算法的流程为:
在状态S’时,只是计算了在S‘时要采取哪一个a能得到更大的Q值,但是实际上并没有真正的执行actionA。这也说明我们在选择动作执行和计算Q-tabel的时候,采取的策略是不一样的,这也是off-policy的一个典型特征。
学习率看作是保留多少旧值、生成新值的度量。如果学习率越大,新估计值代替旧估计值的比例越大。当学习率为1时,新估值完全代替旧值,旧Q值被完全抛弃。此时(学习率为1),Q-learning更新规则如下:
就上面逃离密室的例子:
第一个episode结束,假设第二个episode开始的时候,处于状态3,在状态3的时候,可以执行动作1,2,4,假设在状态3的时候执行状态1,则有:
循环往复以上操作,最终Q值表收敛为:
我们就可以用此Q值表来得到最佳策略。下图描述了在每一个状态下执行什么样的动作才会获得最好的回报。红线标示出的序列就是对此问题的最好的决策。
【Sarsa算法】
Sarsa算法的算法流程为:
我们可以看到,在初始化和选择动作的过程中,跟Q-learning算法都是非常类似的,跟Q-learning算法不同的是Q值表的更新,在更新Q值表的时候利用的是A‘,A’是用当前的Q值表,利用Q值表能推演出来的policy(也就是它的策略)选择的。
对于Sarsa算法而言,动作的执行和更新Q值表的策略都是ε-greedy策略;但是对于Q-learning而言,执行动作我们用的是ε-greedy,但是更新Q值表我们实际上用的是贪婪策略,就是我们选择能够使Q(S’, a)最大的那个a来进行Q值表的更新。
所以一般情况下,如果是在一个仿真系统来进行强化学习的训练的时候,我们通常采用Q-learning算法;但是对于一些实际的生产问题,我们通常采用Sarsa算法,因为Sarsa算法使用了两次ε-greedy,相当于它有一些更好的探索能力。
【深度强化学习(DQN)】
Q-learning的缺陷:对于对于实际的问题,其状态和动作十分庞大,计算机的内存无法处理。
对于深度强化学习的神经网络而言,其损失函数可以设计成老的Q值和更新的Q值之间的均方差。
Target Network
DQN在进行loss function的计算中,可以不用现在的参数,而使用之前更新的参数来进行计算,计算过程为:
在一定的迭代次数后,将左边的网络完完整整的copy一份,复制成另外一份网络,叫做target-Q network,左边的网络叫做当前网络,当前网络不断地用样本来保持更新,target-Q network里的参数不进行任何的调整,。
但是在左边的当前网络进行迭代更新计算的过程中,其target的值是可以利用target-Q network里保存的有关左边网络的参数进行计算的,我们用target-Q network的参数来计算target值,然后把target值回传给左边的当前网络,让它继续进行迭代更新。
再更新一段过程之后,或者是再更新一些迭代次数之后,再把target-Q network替换成当前的Q网络,也就是再复制一次左边的当前网络,复制到target-Q network。
这样做的原因是因为比如说target游戏的图像在很多连续帧上有很强的相似性,当我们在改变当前网络参数的时候,可能把很相似的S‘的state的Q值也做了相应的更新,这样会导致训练的不稳定;另外一个原因是神经网络本身的问题,比如说神经网络进行了更新和调整,有一些Q值就一定做到了相应的改变,但实际上有一些Q值是我们不想更新的,但是因为神经网络的性质,导致那些不想更新的Q值不可避免地进行了更新,这就导致了神经网络训练的不稳定性。
在实践中,经常用Huber loss代替均方误差损失函数。Huber loss是对损失比较平滑的一种计算方式,由于均方差很容易被比较大的reward或比较小的reward带偏。使用Huber loss就可以使训练过程很逐步的进行调整,也会得到比较稳定的训练效果。
参考资料:机器学习-北京理工大学-中国大学mooc