2018/7/12 23:00:12当前位置媒体热门新闻热点浏览文章

承上,首先是Policy Based经典算法,基础的Policy Gradient以及它的进化版PPO等,下面内容主要参考李宏毅老湿的讲义与口述:

Policy Gradient

算法动机

在深度强化学习中,Policy \pi能看做是一个参数为\Theta的神经网络,以打游戏的例子来说,输入当前的状态(图像),输出可可以的action的概率分布,选择概率最大的一个action作为要执行的操作:

policy.png

还是以打蜜蜂的游戏为例(如同是打外星飞船),Actor(神经网络)看到一副游戏画面,输出相应的aciton,根据游戏规则或者者其余规定会得到相应的reward:

play game

从游戏开始到结束(消灭了所有的外星人或者者挂掉),叫做一个episode,简单了解为回合。episode结束,游戏过程中所有的reward相加得到该回合的总reward(挂与未挂可可以是一个负reward或者一个大的正reward)。

totle reword

这里强化学习的目标就是学习一个Policy,即一个网络,使其每看到一个画面,做出一个action, 并做到最终取得最大总reward。

算法细节

游戏的进程相应的能表示成state,action交替的序列:

image.png

游戏引擎(Environment)产生一个画面(state),接着神经网络玩家(Actor)产生一个action,接着影响Environment,并产生下一个state,如此反复到游戏结束,一个完整的序列(1-T)为一个Trajectory,能了解为t时刻分别为s_ta_t的一轮游戏,或者者叫一轮采样。同样能有该序列发生的概率,即在策略\pi的参数为\theta情况下Trajectory \tau发生的概率:

p

这样在此Trajectory下会得到一个总的回报R(\tau),能想到,玩游戏有很大的随机性,不同的action即可可以会有不同的state,反之亦然。因而R(\tau)实际是一个变量(根据游戏场景过程的变化而变化),因而为了衡量一个策略\pi的好坏,需要考虑一个期望的回报R_E(\tau)。游戏的过程当然也不可可以穷举,因而就需要采样来计算期望回报(“平均”回报),能了解为Policy固定情况下反复的试玩N回合游戏,每回合的reward以回合发生概率为权重相加取平均,即为当前策略的期望reward。目标也就是不断升级Policy的参数\theta,使期望reward得到最大。

image.png

Policy Gradient

有了目标,下面就是使用合适的方法,使期望reward最大,一种方法便是策略梯度提升的方法(与最小化loss的梯度下降相对)。由上面可知期望reward是参数\theta的函数,所以参数升级的方式为:

image.png

下面的问题就是期望reward对\theta的导数的求法,走一波公式推导:

image.png

公式推导并不复杂,主要是蓝框里的一个常使用小技巧变换(同时乘和除f(x))。而后第二行等式到第三行将累加转换为期望表示;接着约等于N次采样的期望值。第三行到第四行将上面的p_{\theta}(\tau)带入,去掉与\theta无关的环境相关概率p(s_{t+1}|s_t, a_t)p(s_1),得到最终结果:

image.png

下面就是不断采样,升级参数的过程(根据当前策略玩游戏,得回报,修正策略):

image.png

图示左边表示根据当前policy参数采样得到N个Trajectory,计算一次期望reward,而后梯度上升的方法升级policy参数,使用升级后的policy再进行下一轮采样,如此往复直到收敛,得到期望reward最大的policy。最终该policy(神经网络表示)就学会了根据游戏画面做合适的action,最终博得游戏。

实现

道理是这个道理,具体实现过程中还是有几点可说,得到一波采样序列如何去train当前的神经网络。能将其看作一个分类问题,网络输入图像,输出可可以的action的概率分布,求目标函数,做反向传播。目标函数也能了解为,使用采样的到的action做神经网络的target,求交叉熵做目标函数,不同的是目标函数要加入reward。

image.png

另外现在的目标函数仍存在肯定问题,在具体实现过程中有下面几个tips:

Tip1

考虑有少量游戏或者者其余的情况,reward总是正,这种情况下做梯度提升,参数总是在添加,或者者说当前策略的采取每个action的概率都在提升。尽管想想也不是不能,尽管概率都是添加,但总还是有大有小,还是能区别好的action和不好的。但是,注意目标函数是通过采样计算得到的,假如考虑到不幸的情况,有的action,尽管比其余的好,但是就是没被采样到,这种情况下其余的bad action由于被采样到提升了出现的概率,对没被采样到的action就缺少公平性了。

处理这个问题的一个可行方法便是给引入一个基准,给采样取得的reward做一个偏差,使reward有正有负,这个基准一般选择采样reward的平均值。

image.png
Tip2

之前计算的R(\tau^n)是在第n回合结束的总reward,也就是说,该回合的采取的action都对应着同一个奖励回报,这样有些时候的确也是不正当的:由于,最后的结果坏不肯定是每个action都不好,最后得到高回报也不肯定是每个action都好。

从这个角度出发,思考怎样修正目标函数,改R(\tau^n)为:

image.png

即在当前时刻采取一个action,仅考虑当前t时刻之后的reward之和。换种说法就是当前时刻采样的action只对当前时刻之后的回报有影响。

更进一步,当前时间点t采取的action只对近期的reward影响比较大,而随着时间的推移,对后面的reward影响会越来越小(游戏开始采取的action,对最后的reward影响一般比较小)。因而,给后面时刻取得的reward进行相应的折扣也就变得正当。

最终,目标函数进化成这个模样:

image.png

到此,初版Policy Gradient打完收工!

转载求注明出处

参考资料:

李宏毅深度强化学习
Deep Reinforcement Learning:Proximal Policy Optimization (PPO)

更多关注公众号:

wechat
网友评论