https://hrl.boyuai.com/chapter/intro
https://karpathy.github.io/2016/05/31/rl/
用一个表格(Q表)记录在不同状态下采取各个动作所能得到的潜在回报。
这一算法的关键是学习的目标设置:将『采取该行动后得到的奖励 + 采取动作后的新状态下的最大Q值(无论将来再采用哪种动作)』作为原状态下对应行动的Q值的目标值,即,\(r_{s\_new} + \gamma Q_{s\_new}\)。
notation | 含义 |
---|---|
s | 当前状态 |
a | 动作 |
Q表 | 在各个状态s下采取各个动作a得到的Q值组成的表 |
Q(s0, a0) | 在状态s0下采取动作a0得到的Q值 |
Q(s0) | 在状态s0下采取某个动作a所能得到的最大Q值 |
r | 奖励,通过设置不同状态对应不同奖励从而求得任务所需的Q表 |
Q表更新(学习)规则: \[ Q_{s_0, a_0} = Q_{s_0, a_0} + \alpha [(r_{s_1} + \gamma Q_{s_1}) - Q_{s_0, a_0}] \] 其中 \(\gamma\) 为未来奖励的衰减率,\(\alpha\) 为学习率,对其做递归展开得(设 \(\alpha = 1\) ): \[ \begin{align*} Q_{s_0, a_0} &= Q_{s_0} \\ &= r_{s_1} + \gamma Q_{s_1} \\ &= r_{s_1} + \gamma (r_{s_2} + \gamma Q_{s_2}) \\ &= r_{s_1} + \gamma r_{s_2} + \gamma^2 r_{s_3} + \dotso \end{align*} \]
故 \(\gamma\) 越大,对未来考虑越多。
用神经网络来实现Q表的功能,解决状态取值为连续值的问题。
将采取动作后的回报值作为DNN预估值,相当于多个目标的回归任务,目标个数即为全部的动作个数。
训练细节:
详见demo(DQN/run) 。
DQN 状态可以达到无限,但输出的是已设定的各个动作的Q值(潜在回报值),故动作数量依然是有限的(有几个输出神经元便是所能采取的动作数量);通过直接输出动作的值而不是某个动作后的回报值的方法,可使得输出动作达到无限,这种方法称为 Policy Gradient。
通过奖励的设置,来去改变回传的梯度的大小(也可以理解为label的置信度),这也是叫PG的原因。
与DQN的本质区别:DQN学的是各个动作后的回报值,PG学的是下一个动作(动作取值 如移动的偏移值,或 动作id的概率)。即PG是在解分类问题,DQN是在解回归问题。(类比 PG在做时长满意分类,DQN在做观看时长回归?)
因为label是直接用的模型输出的action,所以为了避免每条样本的CE都是0,实际操作时选用label的action会引入随机。
与DQN更新的策略不同,DQN可以单步更新参数,而PG只能回合更新。因为虽然label引入了随机,但CE的期望值依然是0,只能用奖励修正loss的期望,故PG只能回合更新(若没完成回合,则所有的动作奖励都是0;除此之外,若即使有奖励值来去修正,但不是同一个回合的样本的话,也会因为随机抽取样本,样本分布发生变化(比如奖励低的资源异常地多),导致效果变差)。
PG方差太大,lr正常设置容易无法收敛,lr往小里设置收敛太慢(PG为啥方差会很大?)
对PG中用于修正loss期望的奖励,用DQN来预估,这样就能解决PG只能回合更新的问题了。PG称为Actor,DQN称为Critic。
Critic的引入为什么能够减少PG的方差?
TRPO:xxxx
PPO 利用 New Policy 和 Old Policy 的比例,限制了 New Policy 的更新幅度,让 Policy Gradient 对稍微大点的学习率不那么敏感。
PPO的关键就两点:
以『倒立摆』为例。
训练流程:
样本收集:
\[ loss = \text{MSE} (\text{CRITIC}(state), td\_target) \]
\[ 其中,td\_target = reward + 0.9 * \text{CRITIC}(next\_state) * (1 - done) \]
\[ loss = -\min{[A * ratio, A * ratio|^{1.2}_{0.8}]} \]
\[ 其中,ratio = \frac{p_{actionx}}{p_{actionx}^{old}} \\ A = td\_delta + 0.9 * 0.9 * A_{next} \\ td\_delta = td\_target - \text{CRITIC}(state) \]
判断离线模型有变好的指标:
### RLHF中的PPO
https://huggingface.co/blog/zh/the_n_implementation_details_of_rlhf_with_ppo
https://zhuanlan.zhihu.com/p/645225982