机器学习 | 策略梯度 (PG)
策略梯度算法 (Policy Gradient):强化学习中的一种策略优化方法,它直接根据奖励值对策略参数进行梯度上升,从而最大化奖励的期望。
1 问题定义
首先精简表述一下强化学习的流程。
Actor(演员) 对 Environment(环境) 进行 Observation(观察),根据得到的 Observation 确定下一步的 Action,Action 作用于 Environment 后反馈给 Actor 以 Reward(奖励)。
强化学习的目标就是通过优化从 Observation 到 Action 的策略(实际就是 Actor),从而最大化一整轮动作中得到的 Reward 值。
1.1 Actor
Actor 通过 Observation 得到 Action,因此可以理解为一个函数,记为:
这个函数的具体实现可以是多样的,可以是简单的神经网络,或者是更复杂的结构。
例如用参数为
得到 Logits 后,有多种方法确定最终的 Action 取值。最简单的就是直接取最大 Logit 值作为 Action,这种便是固定的选择方式。更好的一种方式是将 Logits 通过 Softmax 后得到概率分布,根据概率来随机选取每个 Action,这种随机的选择方式是更好的。
1.2 Episode
让上述例子的 Actor
例如对于有生命值的游戏来说,当角色死亡便是 Episode 的停止,对于竞技比赛来说,比赛结束便是 Episode 的结束。
- 初始状态
- 机器采取动作
- 机器获得奖励
- 进入状态
- 机器采取动作
- 机器获得奖励
- 进入状态
- 机器采取动作
- 机器获得奖励
这一个 Episode 就可以记为
1.3 Reward
经过一个 Episode,该 Actor 得到的奖励便是:
容易理解的是,
1.4 Problem
经过上面的铺垫,强化学习的问题定义便是:
即找到一个
2 策略梯度
策略梯度算法和神经网络中的反向传播算法非常相似,它们的思路都是直接用 Loss/Reward 对每个参数做微分,得到梯度值来进行更新。
接下来便是推导公式了,首先确定
由于
上面第二行到第三行的推导方式(常数省略):
接着继续推导:
其中的
上面近似变换的原理是蒙特卡洛的直接采样:
每一次游戏都能当作一次采样,
大的 更容易被采样到。因此对 的 次采样取平均,就可以近似原式。
把
综上,我们最后的结果便是:
3 优化
3.1 添加偏置
由于我们只进行了
3.2 动态贡献
根据上面的梯度公式,每一个 Action 都乘的是整个 Episode 的 Reward,这会导致一定的不公平性:
例如对于一个 Episode
显然
根据这个问题,可以使用动态贡献,每个 Action 只认领自己后面得到的 Reward. 例如对于上面的例子,
再进一步,我们可以设定每一个 Action 认领的 Reward 随自己距离 Reward 的步数来减少。这点很好理解,毕竟在游戏里你做出的一步不可能对未来整个游戏都产生巨大影响,影响力肯定是越来越少的。
3.3 优势函数
上面两小节实际上做的事情都是对奖励值进行优化,因此可以将奖励值直接抽象为一个函数来表示,相当于变成一个黑盒了。公式记作:
使用优势函数只是更换了一种表示方式,具体得看优势函数的内部实现是什么。
4 Off-Policy 策略梯度
4.1 On/Off-Policy 的对比
我们回看策略梯度算法的目标函数:
需要注意到的是,我们的
- On-Policy: 在学习和决策过程中始终使用相同的策略,即在进行策略更新时只考虑当前策略下的经验。例如,一个人在自己下棋来学习策略。
- Off-Policy: 可以利用从其他策略中得到的经验进行学习,即在进行策略更新时可以考虑非当前策略下的经验。例如,一个人看别人下棋来学习策略。
On-Policy 只能利用当前策略下的数据,因此数据利用效率相对较低,而 Off-Policy 能够利用所有数据来学习。下面将 Off-Policy 的思想带入策略梯度算法中。
4.2 重要性采样
在上文讲的 On-Policy 版本策略梯度中,使用的是蒙特卡洛直接采样。
重要性采样是蒙特卡洛采样的另一种采样策略,能在无法采样原始分布时近似对原始分布的采样。
4.3 结合起来
我们用重要性采样来做策略梯度:
这里直接忽略的原因一是从经验来说这两个概率差别不会太大,二是计算这一项过于复杂,不好计算。
本文采用 CC BY-SA 4.0 许可,本文 Markdown 源码:Haotian-BiJi