LLM基础知识入门 / LLM后训练¶
(手写的草稿)
期望达成目标¶
后训练是目前我想到的harness之外的内容,那么我认为我目前需要知道以下内容:
- 后训练是什么,比如说适用范围在哪里
- 后训练和我想的一样不一样,是否是一种更好的提供信息的方式(而不是用harness)
- 后训练的成本如何,是否可以在特定场景满足特定的需求?(放在另外一个raw里单独学习)
etc...
本节作为知识性探索,没有特别明确的路径。
笔记和总结¶
https://pytorch.org/blog/a-primer-on-llm-post-training/
SFT 和pretrain的区别主要在于是否计算question的loss,所以说他们可以共用infra,但SFT的问题更多的是精心设计的,所以输入量比pretrain小三个数量级。
在sft阶段,llm从续写机器开始可以对问题进行回答,这一步开始出现了结构化的标签,比如说 <|start_header_id|>user<|end_header_id|>...<|eot_id|>|start_header_id|>assistant<|end_header_id|>... 这种标签和文字内容混合在一起的地方。
关于模型生成N答案选1个reward最高的,来做自提升,这里有一系列复杂的理论可以进一步学习: Rejection Sampling/RFT/RAFT/ReST 是做法,Reward-tilted distribution/RWR/Control as Inference 是数学原理,DPO 是它的下一代演化,Reward hacking 是要小心的坑。ref: 用符号说清楚:设模型当前的输出分布是 π(y|x),外部裁判打分是 R(y|x)。从 π 里采样一堆候选,挑出 R 打分最高的那个去训练,本质上等价于把模型的分布往"reward 加权"之后的新分布拉: π_new(y|x) ∝ π(y|x) · (依 R 加权)
只要 R 确实是有信息量的、比模型自己瞎猜要准的判断标准,这个"reward 加权后的分布"在数学上可以证明期望 reward 一定比原分布高(这是重要性加权的基本不等式,EM 算法、policy iteration 这些经典方法背后都是同一套逻辑,Rejection Sampling Fine-Tuning、STaR、ReST 这些论文用的就是这个论证
sparse reward, credit assignment problem: 对于生成的问题,因为是多步推理,reward只产生在最后,而SFT由于有标准答案,所以可以产生更密集的梯度向量。
reward hacking ↔ reverse incentive
rl reward pipeline不一定必须要人参与,比如写代码可以直接跑代码等;rl的reward pipeline和deepeval的metrics评分机制是同一种技术的不同应用场景,RL对reward pipeline有成本和速度的要求,因为reward是训练的关键路径,调用次数是海量级别的,慢就意味着gpu闲置导致成本高
harness提高是进入后训练的一个闸门,当决定要不要进行RL的时候,必须考虑harness是否存在提高空间,这是一个要回答而且可能难回答的问题。 这就引入了如何定性定量分析这个问题,harness-fixable / runtime-fixable / entangled
有很多知识性的,在脑子里,这里写个简述确保我的理解是基本符合的。
后训练是相对于前训练而言,前训练通过输入互联网以及各种来源海量的数据得出的模型,在这个阶段,他的主要任务就是生成,也就是说意味着给定输入它可以根据概率无限输出,永远不会终止。而面向最终用户显然不是这样的,例如它可以理解对话等需要后训练,也就是可以用RLHF来描述。RLHF是一个多步状态,通常来讲是SFT,offline policy和online policy构成的。SFT通过已有的数据和答案来做学习,所以通常来讲可以提高能力,但有明确的天花板,因为他没有exploration的能力。exploration具体来讲,说的是在问题不变的时候,针对同一个问题,靠采样的随机性,尝试出不同的候选答案,如果某次意外尝试效果更好,就把这个新发现强化下。SFT 无法对此进行“探索”并得出答案,这是由于训练模式导致的。
SFT后,进入通常意义上的RL,RL阶段总体来讲在模型内嵌入了更多的结构化知识,让模型可以使用标签等内容按照结构化央视回答,除此之外,还会刻意训练模型的能力。于是,这里可以分成两块,也就是offline和online policy,所谓policy,主要介绍的就是针对输入输出下一个token的状态概率分布,这个地方和sampling(选一个),generation(持续生成概率分布sampling然后构造输入重新生成)都不同,policy是模型计算得出的。
offline(比如DPO方法)就是只生成概率分布,基于reward机制,对照概率分布和预期答案进行计算loss(衡量答案有多坏,越小越好)的一个值,然后backward去调整参数。因为不涉及sampling和generation,对offline training是比较便宜的,但很明显他对数据集的要求性很高,而且很多场景下依赖人所以scalable很困难。
online RL (比如PPO/GRPO方法)问题在测试集已经构造好了,直接输入给模型然后模型负责解答,这个时候reward方法(可能是单独训练的reward model,也可能是rule,比如编译器)很重要,它可以来判断结果是否正确,并且给出有价值的reward分数,在online模型自己生成结果并获取到reward后,它就可以backward对他的参数做调整了。这里和offline policy最大的不同在于online policy真的要生成内容,以及online policy通常包含多步生成,于是在最终reward得到后,需要有方案对过去多步骤进行衡量,这里就要引入Markovdecision process, bellman optimization equation这些,落到很具体的问题是在一个稀疏的最终reward答案,如何为每一步评分并反馈到各个token的信号。实际上这一部是粗糙的,稀疏信号经过那套"log_prob × reward,backprop"的机制之后,会被粗糙地广播到轨迹里的每一个 token上。
offline和online并不一定谁比谁好,都可以帮助模型用,然后作者介绍了deepseek RL这里的内容和一些经验,notable里是强制
对于计算loss的细节,核心是概率的对数x reward,以及引入baseline来让数据的信号强度相比于预期更明显,还会有一些统计学的处理让数字更稳定。
对于问题3,要继续深入调研,因为这里难免涉及到如何评判harness和RL的能力界限和成本消耗。