AI Pulse
📡 X 信号

用一句话讲清楚大语言模型是怎么预训练的

这里做个粗浅的科普,或许对非相关背景的朋友理解 mimo 的 rl 训练有所帮助

llm 在预训练阶段,通过在人类世界已有的大量语料上做自监督学习,获得了最初的通识。

通过海量的人类文本,哪怕没有人专门告诉它“什么是法国” “什么是 Python” “什么是爱情”,它也被迫从数据里学习和压缩出语言、知识、代码和大量世界规律 整个事情大概就是给定前面的 token,预测下一个 token这样子,从机器学习角度看,可以大致理解成一个不断重复的、自回归的多分类问题

SFT监督微调,则更进一步。虽然底层还是预测下一个 token,但是训练数据从“互联网里自然出现的文本”,变成了 用户问题 到 一个我们希望模型给出的回答的形式, 这样 llm 就逐渐从一个单纯预测下一个 token 的模型,学会了问答

而到了 rl 这里,事情开始变得不太一样 我们不再告诉模型正确答案的每一个 token 是什么,而是让模型自己生成一整段回答、推理过程,甚至执行一系列toolcall,然后由外部环境评价结果并给出打分

比如代码测试用例全部通过,reward 高, 数学答案被 verifier 判断正确,reward 高, 人类更喜欢这个回答,reward 高 然后通过这些 reward,引导模型以后有更大的概率做出那些结果更好的行为。

这里为了方便理解,我们把最终用于更新的 reward signal 记作 R,并假设它是 -1 到 1 之间的实数,R > 0 可以粗略理解成比平均表现好,R < 0 则相反

学过一点 rl 的同学应该知道这个公式 P(a) = pi_theta(a|s) 代表在状态 s 下,模型做出动作 a 的概率 比如我们假设现在模型在解决一个代码问题,其中一个动作是“先运行测试用例” 如果实践发现,这个动作相比模型原本的平均行为,让任务成功的可能性更高,那我们就希望模型以后遇到类似情况的时候,P(运行测试 | s) 变得更大

所以接下来就到了我们比较熟悉的梯度下降环节 最粗浅地写,可以把 loss 理解成 L = -R * log(P(a)) 如果 R > 0,说明这个行为比平均水平好,那梯度更新以后,模型做出这个行为的概率会变高,如果 R < 0,说明这个行为比平均水平差,那模型以后做出这个行为的概率就会降低

(其实最早的时候我还疑惑R又不可导怎么进行梯度下降的来着哈哈) 真正参与反向传播的,是模型做出这个动作时的 log probability 也就是说,最后依然是我们熟悉的 forward -> 构造 loss -> backward -> optimizer.step()

以上内容比较粗浅,只是大致介绍了一些概念性的东西,也省略了 PPO、GRPO、credit assignment、KL 等大量细节, 但是我觉得理解到这里,基本上已经把怎么把“这个结果比较好”,转化成一个梯度,去改变模型下一次做出某种行为的概率这件事大致讲明白了

如有错漏,全当博君一笑

查看 X 原帖

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新