本文主要是结合PPO在大模型中RLHF微调中的应用来理解PPO算法。
一、强化学习介绍
1.1、基本要素
环境的状态S:t时刻环境的状态StSt是环境状态集中某一个状态,以RLHF中为例,序列w1,w2,w3w1,w2,w3是当前的状态。
个体的动作A:t时刻个体采取的动作AtAt,给定序列w1,w2,w3w1,w2,w3,此时得到w4w4,得到w4w4就是执行的一次动作。然后就得到下一状态St+1=w1,w2,w3,w4St+1=w1,w2,w3,w4。
环境的奖励R:t时刻个体在StSt采取动作AtAt得到的奖励RtRt,奖励是对当前动作,不会考虑到未来的影响。
个体的策略ππ:根据输入的状态获取动作,可以表示为π(a|s)π(a|s)。
状态价值函数:价值一般是一个期望函数,即当前状态下所有动作产生的奖励和未来的奖励的期望值,这也是它不同于奖励R的地方,可以表示为vπ(s)=Eπ(Gt|St=s)=Eπ(Rt+γRt+1+γ2Rt+2+…|St=s)vπ(s)=Eπ(Gt|St=s)=Eπ(Rt+γRt+1+γ2Rt+2+…|St=s)。所以价值才是真正衡量当前状态下能产生的价值。
动作价值函数:动作价值函数类似于状态价值函数,只不过是在当前的状态和动作下获得的价值。可以表示为qπ(s,a)=Eπ(Gt|St=s,At=a)=Eπ(Rt+γRt+1+γ2Rt+2+…|St=s,At=a)qπ(s,a)=Eπ(Gt|St=s,At=a)=Eπ(Rt+γRt+1+γ2Rt+2+…|St=s,At=a)。
状态转移概率模型:根据当前的动作和状态转移到下一状态的概率。
1.2、有模型和无模型的区别
有模型和无模型实际上指是否要对环境建模,换句话说核心在于是否有状态转移概率模型,有模型是指有状态转移概率模型,知道状态是怎么转移的,是一个白盒模型,但实际中大多数强化学习的算法都是无模型的,不去构建状态转移概率模型,而是直接得到下一个状态。如上面的例子中,在状态w1,w2,w3w1,w2,w3直接进入到下一状态w1,w2,w3,w4w1,w2,w3,w4,这一过程是由生成模型(策略函数)直接给出的。
1.3、蒙特卡洛(MC)和时序差分(TD)的区别
蒙特卡洛和时序差分的主要差别在于计算价值函数,在蒙特卡洛中计算价值需要获取完整的状态序列,而时序差分则不需要,但实际训练过程中想要获取完整的状态序列成本是非常高的,所以时序差分也是现在的训练强化学习的主流方法。
假定给定一条完整的状态序列S1,A1,R2,S2,A2,…St,At,Rt+1,…RT,STS1,A1,R2,S2,A2,…St,At,Rt+1,…RT,ST。
价值函数的计算可以表示为:
vπ(s)=Eπ(Gt|St=s)=Eπ(Rt+γRt+1+γ2Rt+2+…|St=s)vπ(s)=Eπ(Gt|St=s)=Eπ(Rt+γRt+1+γ2Rt+2+…|St=s)。
在这里GtGt表示某一条状态序列的收获,注意这又引入了一个新的概念。而价值函数是通过采样多个序列得到多个GtGt的平均值。可以表示为:
vπ(s)≈average(Gt),s.t.St=svπ(s)≈average(Gt),s.t.St=s
价值函数的求解到这里就结束了,但还有一些可以优化的地方,一是同一个状态可能在一个完整的序列中重复出现,这里会涉及到first visit和every visit,感兴趣的自己可以去了解;二是在求解平均值时需要先把所有的GtGt存储下来,这样太浪费存储空间,最好的是增量计算平均值,这里的推导公式也很简单,最后可以得到这样的价值函数求解方式:
V(St)=V(St)+1N(St)(Gt−V(St))V(St)=V(St)+1N(St)(Gt−V(St))
在这里N(St)N(St)表示状态StSt出现的次数。但是当海量数据分布式迭代时,无法精确地计算出N(St)N(St),所以这里通常用一个系数αα来替代,这样就可以表示为:
V(St)=V(St)+α(Gt−V(St))V(St)=V(St)+α(Gt−V(St))
以上就是蒙特卡洛的求解价值的方式,现在回到时序差分中,我们说到要得到一个完整的序列是比较难得,这时就想到马尔科夫性,只考虑下一状态的价值,将收获GtGt表示为:
G(t)=Rt+γV(St+1)G(t)=Rt+γV(St+1)
一般把Rt+γV(St+1)Rt+γV(St+1) 称为TD目标值。这样我就不需要得到完整的序列,只需要下一状态就可以求解价值函数。
大模型RLHF中PPO算法的理解与应用

最低0.47元/天 解锁文章
326

被折叠的 条评论
为什么被折叠?



