在这一讲中
我们将会继续讲解强化学习的两个重要算法
olicy gradient和actor critic算法
这两个算法是用来解决某一类特定的强化学习任务
例如交计算机下棋这一类任务
和前面讲到的强化学习任务有什么区别呢
最主要的区别是奖励函数
eward function是行为进行了很久之后才能获得
对于一些任务
甚至是直到任务的最后才能获得奖励函数
例如只有在下棋下到最后才有输和赢
而前面的每一步虽然有些奖励函数的线索
例如象棋中某个字被吃掉了等等
但是与真实的输赢的相关性
直到最后才能完全体现
为了解决奖励函数延迟表现的问题
这里我们给出了policy gradient的算法
olicy gradient的算法是用来解决奖励函数延迟获得这一问题的
它的主要思想是在每一个状态下
根据现有的p s t条件下
t采样a t如此往复获得一组状态行为
对s1 a1 s2 a2
一直到s大t在s大t也就是行为结束过后
此时获得最终的奖励函数r大题
这里我们假设r大题可取正值和负值
而负值表示获得惩罚
最终我们根据r大t去修改每一步的p s t条件下
t如下的修改方式
s t条件下a t等于p s条件下a t加上阿尔法乘以r大t
如果p s条件下at是由一个网络来估计
它等于qs t a t c a
那么c塔的更新公式将会是c塔等于c塔加上阿尔法r大t
西塔的梯度
s t a t c a
这样做可以根据最终的奖励函数r大t来增加或减少每一步
s t条件下a t的值
这就是policy gradient的基本思想
它是非常简单的
当然policy gradient会导致算法收敛速度很慢
需要很多数据才能有效
这是因为结果不好
不见得每一个具体的过程都不好
同样的结果很好
也不见得每一个具体的过程都很好
例如在下棋当中
某一局你虽然输了
但说不定前面你的很多走法都有可取之处
甚至有一些相当精彩的走法
如果我们基于这一局的结果而乘法你所有的走法
那么将会导致很多不准确的乘法
这些不准确的因素叠加到一起
就需要大量的数据才能平衡所有的这些不准确的因素
因此算法收敛速度将会非常的慢
为了加快policy gradient的收敛速度
我们必须引入一个重要的概念
估值函数
alue function vs
它代表在状态s下
我们对最终收益的估计
这就像有一个老师在旁边对你的每一个行为进行指导
他告诉你
以他的经验
你每一步走得好不好
尽管这个老师的判断不能代表最终的收益
其实最终的收益也不能由老师完全主导
例如在下棋中
最终收益不光取决于你怎么走
还取决于别人怎么走
但是老师能给出一个方向
让你在中间的状态中就知道你的行为是否合适
这样就能避免像policy gradient那样盲目试探
导致难以收敛
加入了估值函数以后
算法的流程将会变成这样
s条件下a t的更新等于p s t条件下
t加上阿尔法乘以括号r大t减掉vs
而c塔的更新将等于原来的c塔
加上阿尔法括号r大t减掉vs t q s t a t c a
对于theta的梯度与policy gradio相比
可以看到这两个公式只是把reward函数r大t替换为r大t减掉vs
为什么做这样的替换呢
举个简单的例子
例如一支很强的足球队
巴西队和一支相对弱的足球队
中国队进行比赛
实际的结果是巴西队一比零获胜
对巴西队来说
大t等于正一
而对中国队来说
大t等于-1
如果按照policy gradient的算法
巴西队应该加强自己的每一步行为
而中国队应该减弱自己的每一步行为
但实际情况是这样吗
问题在于巴西队过于强大
他的状态不好
才提出一比零的比分
如果状态好的话
可能能踢到三比零甚至更多
而中国队可能这个时候状态非常好
才守住了零比一的结果
因此事实可能会正好反过来
巴西队应该减弱自己每一步的行为
而中国队应该加强自己每一步的行为
这个时候如果我们有一个估值函数vs
假设巴西队的vs等于三
而中国队的vs等于-3
可以把估值函数想象为赔率
巴西队让中国队三球
那么对于巴西队来说
大t减掉v s t等于-2
因此它应该减弱自己的行为
而对中国队来说
大t减掉v s t等于正二
他应该加强自己的行为
这里存在一个问题
即如何产生估值函数vs在计算机下棋这个例子中
估值函数可以通过经验产生
例如一些墙纸车马炮vs的值就大一些
而一些弱智如冰
四项相应的值就小一些
例如对于攻入对方半场的车马炮赋予一定的加分
总之建立一套固定的规则
用来衡量某个局面及某个状态的优劣
在深度学习之前的计算机下棋程序中
大多数采用这种固定规则的方式产生估值函数
可以想象
对于某些企内这些规则是非常复杂的
但是这样的规则对围棋来说却很难建立
因为在围棋中各个子的地位都是一样的
015年打败人类的围棋程序阿尔法go所建立的估值函数
是利用两个棋力较弱的围棋程序不断模拟下棋到中局
然后计算胜率获得的
另一种常用的获得估值函数vs的算法是著名的actor critic算法
这个算法的思想是同时优化收益函数q sa和估值函数vs
步骤如下
首先第一步初始化q sa和vs
然后请看第三步
在现有策略下采样m个轨迹
估计出实际的累计奖励与现有的估值函数vs的差异
第九步和第11步
用这个差异来调整估值函数vs
再看第八步和第十步和前面讲到的一样
利用现有的估值函数vs来调整q sa
从而调整系统的决策函数p s t条件下a t在这里
sa是演员actor
他决定了系统的下一步行为
而vs是评论家critic用来评价系统每一步行为的好坏
ctor critic是一个演员和评论家相互促进共同进步的算法
作为本讲的结束
留一道讨论题给大家
同学们处理一些生活中的事情的时候
是否也用到了估值函数呢
如果用到了
请考虑一下这个估值函数是如何获得和设置的
你能否根据生活的经验总结一下设置估值函数的方法呢
本讲就到这里
谢谢同学们