深度强化学习笔记

本笔记来自于台大李宏毅机器学习课程–Reinforcement Learning

前面写过CNN入门与集成学习,这些均属于监督学习的范畴,而强化学习与监督学习是有很大区别的

其中监督学习是有特征(feature)和标签(label)的,即便是没有标签的,机器也是可以通过特征和标签之间的关系,判断出标签。举例子理解:高考试题是在考试前就有标准答案的,在学习和做题的过程中,可以对照答案,分析问题找出方法。在高考题没有给出答案的时候,也是可以根据平时学习到的知识给出正确的解决,这就是监督学习。一句话概括:给定数据,预测标签。

强化学习是使用未标记的数据,但是可以通过一些方法知道你是离正确答案越来越近还是越来越远(奖惩函数)。可以把奖惩函数看作正确答案的一个延迟、稀疏的形式。可以得到一个延迟的反馈,并且只有提示你是离答案越来越近还是越来越远。

一、通俗理解强化学习

如下所示,地球是环境(environment),机器(agent)用感测器去接收外接讯息。

外边感知到了一杯水,它(agent)感知到讯息接着采取行动,假如它把水打翻了(action)。因他的改变而外界有所改变,一摊水洒在地上(environment)。

接着外界(地球)给她了一个回馈(reward):你刚刚的动作是不好的(Don’t do that),所以机器人得到一个负面回馈。
在这里插入图片描述
接着,机器人感测到地上有一滩水后,便采取行动——把地上水擦净,改变了外界的状态。

接着地球给了个回馈:干得好兄弟!这是一个正面的奖励,接着这个反馈机器人也接收起来了:我这个动作是好的。
在这里插入图片描述
这里比喻机器的学习过程就是找到一个函数,函数的输入是外界(observation),而机器学习得目标就是要把这个函数(reward)最大化。

另外举特别火的阿尔法狗(AlphaGo)的例子,首先观测棋局(左),AlphaGo下了一手。外部环境接收到了讯息,反馈给AlphaGo。
在这里插入图片描述
人类下了第一手,阿法狗观测棋盘,然后不断循环刚刚的步骤。整个下棋过程奖励是0,直到棋局结束,才会产生1(赢)或0(输)的奖励
在这里插入图片描述
虽然这个过程中一直没有reward告诉AlphaGo每一步是不是正确的(可以对最终获胜有帮助),但它通过不断与人或机器进行对局下棋,不断调整它看到的observation和采取的action之间的关系,让它得到的reawrd被最大化,即尽量取胜。

二、强化学习的几种算法

1.基于actor的Policy Gradient
这种算法将agent要采取的actor当做一个神经网络(NN),即将agent的观测observation以向量或矩阵的形式输入神经网络,神经网络的输出是每一个要采取的动作(action)的值或者可能性(probability)。
在这里插入图片描述
给定动作 π \pi (s)来进行学习,假设刚开始观测到的为 s 1 s_{1} s 2 s_{2} s T s_{T} ,采取的action分别为 a 1 a_{1} a 2 a_{2} a T a_{T} ,获得的reward分别为 r 1 r_{1} r 2 r_{2} r T r_{T} , 总的reward为R,则我们可以将此强化学习过程表示为下面所示的数学过程:
在这里插入图片描述
上述经过梯度计算可以得到下面所示结果(中间有利用N次结果的平均来代替训练所有过程,因为每一个状态都sample到是很难的),最终可以很自然的得到结论:当R即reward是积极的时候,那我们就增加采取此结果对应的action的可能值(p),相反地当reward是负面时,我们就减小对应的action的p值。
在这里插入图片描述
这里的reward考虑的不是采取某个action后立即得到的reward,而是整场游戏的reward,比如AlphaGo中给的是这局棋下完之后的reward,而不是每一步落子都会给一个reward。

2.基于Critic的State Value Function

这种算法核心就是给一个actor ( π \pi ),它去衡量这个actor的好坏,而我们介绍的就是以state value function V π ( s ) V^{\pi}(s) 来衡量,当给定一个actor,目前处在的这个状态到最后游戏结束得到的reward会有多大。

比如下面的这个游戏,假如目前看到的游戏画面(state)为s,当我们把左边的游戏画面输入 V π ( s ) V^{\pi}(s) ,由于要杀的敌人还很多,因此我们从此状态到游戏结束可以获得的reward就很大。但右侧状态的游戏画面敌人明显很少了,因此从这个状态到游戏结束我们可以获得的reward就相对较小。但是必须注意,state与actor是紧密相关的,也就是必须给出明确的actor才可以获得state value function,因为给定同一个state(如下图的游戏画面),它采取的actor不同,最终的reward肯定是不同的。
在这里插入图片描述
如何找到合适的评价函数 V π ( s ) V^{\pi}(s) 呢?

一般有两种方法:
一种是Monte-Carlo(MC)方法,当看到某个state后,计算此state到游戏结束时的所有reward之和。这种计算方法特点是方差大,但偏差低
在这里插入图片描述
另一种是Temporal-difference (TD)方法,只观察相近的state。
其中 s t s_{t} = s a s_{a} , s t + 1 s_{t+1} = s b s_{b} ,PPT中有书写错误。这种适用于无法得知总的reward,只能间接计算reward。这种计算方法的方差小,但很可能是有偏的。因为假设当 V π ( s t + 1 ) V^{\pi}(s_{t+1}) 估计不准时,即使采样多次r也会出现无法 V π ( s t ) V^{\pi}(s_{t}) 会存在bias。
在这里插入图片描述

3.Actor-Critic

给定动作 π \pi (s)与环境进行交互,我们通过上述的TD或MC方法来学习得到 V π ( s ) V^{\pi}(s) ,然后通过 V π ( s ) V^{\pi}(s) 得到的actor来得到新的actor。
在这里插入图片描述
如下所示,Actor-Critic就相当于将上面讲的基于actor的Policy Gradient中的R( τ n \tau_{n} )(从头到尾采取的action对应的reward之和)改为基于critic的评价,如下面所示中的Advantage Function,可以看出后一项就是基于MC或TD方法计算的值。
在这里插入图片描述
一些技巧:actor和critic的参数是可以share的,如下所示:
在这里插入图片描述
Asynchronous Advantage Actor-Critic(A3C)
将上面的集合起来,就是非常常用的一个算法A3C,每个worker包含了actor和critic,
每一个worker都将global的参数复制过来,与环境(environment)进行互动(interaction),可以计算出actor和critic的参数要如何更新,将此资讯送回给global network,从而更新参数。这种做的好处是可以加快训练,可以同时训练n个worker,将n个经验累积在一起。
在这里插入图片描述

A3C开源代码Github链接:A3C开源代码链接


2019年6月4日
沙坡村职业技术学院

猜你喜欢

转载自blog.csdn.net/YDC123458/article/details/90812266