之前在文章大模型面试八股中提到一个问题,大模型训练中rm分数越来越高,那训出来llm的效果一定好吗?
这么肯定的判断肯定是有坑的,值得怀疑。
如果你动手跑几次ppo的过程就发现了,大模型的强化学习非常难以训练,难以训练不仅仅指的是费卡,还是指的非常容易训崩。
第一,费卡。假设你训llama 7b,sft 和 rm 都用7b的模型,那么显存耗费 = 2*7b(trian mode) + *7b(eval mode), 分别对应 policy model / critic model,还有ref model/reward model
本来你能用几张40gb a100的卡+deepspeed 做7b的全参数微调,强化学习就得升级到80gb的a100了,勉勉强强能跑到7b。想跑更大的就得充钱了。
第二,容易崩。llm训着训着就不听你话了,要么变成停不下来的复读机,输出到后面没有逻辑直到maxlen,要么变成哑巴,直接一个eosid躺平。
rlhf中的问题其实在rl游戏训练里面很常见了,如果环境和参数设置不好的话,agent很容走极端,在 一头撞死or循环鬼畜之间反复横跳。
原始的ppo就是很难训,对sft基模型和rm的训练数据以及采样prompt的数据要求很高,参数设置要求也很高。
自从openai带了一波rlhf的节奏后,大家都觉得强化学习在对齐方面的无敌功力,但自己跑似乎又不是那么回事,这玩意也太有讲究了吧。
更多的魔鬼在细节了,openai像拿了一个比赛的冠军,告诉你了成功的solution,结果没告诉你各个步骤的重要性和关键设置,更没有告诉你失败和无效的经验。
在讲trick之前,首先复旦-moss也对llm的训练过程加了更多监测,其实这些都是实验中非常重要的监控过程指标,能很清楚的发现你模型是否出现异常。
然后这个图很好,非常清楚地讲述了trick是如何作用在rlhf中的各个阶段的,另外配套的开源代码实现也非常清晰易懂,典型的面条代码没有什么封装,一码到底,易读性和魔改都很方便。
下面我们看看这7个trick,对应图中右侧画星号的部分。
1, token级别的kl散度惩罚
kl_penalty = (-self.kl_penalty_weight * (logprobs - ref_logprobs)).cpu()
这一步主要解决的问题是训练稳定性,防止步子太大扯着蛋,如果你输出的和参考模型差别过大的话就减分。
2,reward normalization and clipping
3,value function loss clipping
clipping类似梯度裁剪,也是止步子太大扯着蛋,对一些异常的loss和reward做了限制,normalization为了对reward做标准化。
这部分的代码可以对应开源中的这些设置仔细查看,原理大同小异
self.use_reward_clip: bool = opt.use_reward_clipself.use_reward_norm: bool = opt.use_reward_normself.use_advantage_norm: bool = opt.use_advantage_normself.use_advantage_clip: bool = opt.use_advantage_clipself.use_critic_loss_clip: bool = opt.use_critic_loss_clipself.use_policy_loss_clip: bool = opt.use_policy_loss_clip
4.critic model initialization
用rm model初始化critic可能不是一个必要的选择,作者做了一些实验证明这个问题,推荐使用critic model pre-training。代码里这部分还没有,还是使用rm初始化的,后续跟进一下这个问题。
5. generalized advantage estimation
附录里c.3有gae的调参实验。
6.clipped surrogate objective
这个也是一种正则化方法,防止步子太大扯着蛋,确保训练过程的中的稳定性,这个方法比一般policy gradient处理的更为高效。
7.global gradient clipping
原理还是同上,所有的clipping无非都是砍掉太大的步子。
另外作者还用了一个instruct gpt里面用到的方案,增加了训练过程使用 llm_pretrain_loss,参考代码
if self.use_entropy_loss: loss1 = pg_loss + self.vf_loss_weight * vf_loss + self.entropy_loss_weight * entro_losselse: loss1 = pg_loss + self.vf_loss_weight * vf_lossloss2 = self.ppo_pretrain_loss_weight * pretrain_lossloss = loss1 + loss2
总结下,整体ppo-max的改进主要集中在训练过程的稳定性上,用的东西还是模型的老三样,训练过程裁剪,初始化,loss改进,主要集中在如何能让rlhf更好调,推荐参考作者的源码进行一些实验。
另外,作者在论文里留了一个彩蛋,技术报告的第二部分预告主要是讲reward model的成功和踩坑经验,目前还没有发布,静待作者更新。之前大家一直的争论点用什么scale的rm,说要用远远大于sft model的rm model,这到底是不是一个关键的问题,是不是deberta 和 65b都行,期待作者第二个技术报告里给一个实验~
人工智能影响哪些行业
功率电感器基础讲座——第3章:什么是DC-DC转换器的重要特性
苹果ios15怎么降级到13
物联网可以为临床提供动力吗
麒麟960华为P10身败名裂,麒麟970华为Mate10前来救场,狙击苹果A11iPhone8
大模型训练中RM分数越来越高,那训出来LLM的效果一定好吗?
物联网是什么_物联网概念股有哪些_物联网概念龙头股一览
蓝牙技术联盟公布年度蓝牙应用创新奖入围产品
被誉为轻量云服务器“鼻祖”的腾讯云,遇到最硬核对手
数模转换器的解码原理分析
阿里巴巴移动充电桩布局全国有效缓解固定充电设施建设不足的压力
点成分享| 如何探究剪切力在细胞层面的影响?微流控芯片来帮你
智原科技与联华电子共同发表55纳米低功耗工艺(55ULP)的PowerSlash基础IP方案
德国政府已就5G网络数据安全的规定达成一致将不排斥华为
互调干扰怎么处理?处理方法解析
五菱宏光MINI满载4人 实测续航惊人
联发科天玑9000旗舰芯片正式发布,OVMH谁才是首发?
Realme真我Q2:一款性价比高的5G手机
Mini LED背光显示或将成车载应用未来主战场
开辟手机边框交互新天地,纽迪瑞科技边缘触控压力传感器荣获年度最佳传感器