专栏名称: 架构师
架构师云集,三高架构(高可用、高性能、高稳定)、大数据、机器学习、Java架构、系统架构、大规模分布式架构、人工智能等的架构讨论交流,以及结合互联网技术的架构调整,大规模架构实战分享。欢迎有想法、乐于分享的架构师交流学习。
51好读  ›  专栏  ›  架构师

用极小模型复现R1思维链的失败感悟

架构师  · 公众号  ·  · 2025-03-09 22:28

正文

架构师(JiaGouX)
我们都是架构师!
架构未来,你来不来?


前言

投完ICML之后火急火燎的入门RL,花了一些时间把RLHF学了。后来在知乎上看到了很多优秀的开源R1复现项目,于是手痒痒啃了下比较火的两个开源项目准备自己实践一下,一个是Huggingface的Open-R1,一个是Logic-RL。由于Logic-RL基于Verl,模型推理和训练过程都是shard到不同显卡上的,Huggingface的GRPOTrainer是单独用一张显卡做vllm 推理,所以我在浅尝Open-R1做数学题的训练之后转移到了Logic-RL上面。

因为是民科,手上只有四张降了功率的3090,我就拿0.5B的千问做的实验,中间遇到了不少问题。


探索0.5B模型在KK数据集上的强化学习训练

我使用了qwen-0.5VB的instruct模型实验,我看logic-rl论文中instruct模型也可以复现出思维链增长。但这里选用instruct模型主要还是因为base模型很难训练。

1. 多余的reward会让模型变懒

我首先是使用了Logic-RL中原来配置的reward规则,在原版规则中,模型学会格式后会得到一定奖励,但很快模型的输出就变得很短


The reasoning process here involves understanding the characteristics of knights and knaves, analyzing the statements made by each person, and determining who is a knight and who is a knave.
Ethan is a knight, David is a knave, Samuel is a knight. <|im_end|>


然后模型几乎不care回答是否正确,输出长度急剧下降到只有几十个的长度。于是我尝试更改规则, 仅当模型格式正确且回答正确的时候才有reward,其余情况都是最低分。

但令人没想到的模型依然只是水一下思考内容,然后在answer tag里输出答案,似乎只要遵循 的格式就会让模型放弃思考过程。我后来将格式reward中有关 的要求去掉了,在训练过程中就能顺利保留下来模型的思考过程。

2. 模型很难直接学习3ppl以上的问题

0.5B模型可能是太小了,直接混合3ppl-7ppl的数据集训练会导致reward一直在最低分附近震荡,然后一会就开始输出胡言乱语。训练开始没多久我就看到输出长度爆炸增长,我以为是长思维链的出现,但其实是模型错误预测token导致输出大段胡言乱语。

于是,我转换了2ppl的数据集,让模型在2ppl数据集上先进行10个step的学习,然后在3ppl数据集上进行20个step的学习,再换到4ppl上进行10个step,5ppl上训练10step,最后换到6ppl上进行长的RL训练。这类似于课程学习,但在训练结束后我是保存了模型之后在新的训练中加载保存的模型,所以相当于reference model被更新了。

这个过程中确实观察到了一些有意思的现象,例如

错误检查


2. **Avery's statement** : If Jacob is a knight, then Avery must be a knave, regrettably (vice versa). Since Jacob is not a knight, there's a contradiction here, indicating a mistake in our reasoning. Alternatively, if Jacob is a knight, Avery must be a knave, meaning Jacob cannot be the perfect knight according to her statements.


Recheck

So, the contradiction here comes from Scarlett being a knight. This means the first term is misleading. Let's recheck the clues .


虽然感觉推理过程好像不是很对。。。

还有一些输出我没有保存,例如语言混杂,使用数学来解逻辑问题,以及使用什么蕴含树?来解决问题的过程也是有的。

3. 模型总是会收敛到一个极短的推理过程

这也是为什么说复现是失败的,虽然通过前面的修改模型能顺利学到6ppl的问题上,但是模型的推理过程总是会变得极为简单,我分别多次尝试了在预热训练(前面提到的课程学习)后在5ppl和6ppl的数据集,或者混合的数据集上训练,都会出现思维链随着准确度越来越高下降的过程


5ppl上长训练,思维链长度下降
6ppl上长训练,思维链长度下降


观察模型的输出,它最后都会收敛到一个固定的,甚至是错误的推理模式


To determine the identities of each character, we will analyze each statement step by step.

1. Avery's statement: "Zoey is a knight if and only if Aiden is a knave." Therefore, Zoey is a knave if Aiden is a knight.
2. Zoey's statement: "Aria is not a knave." Hence, Aria is a knight.
3. Lily's statement: "Zoey is a knight and Aiden is a knight." Therefore, Zoey is a knight.
4. Evelyn's statement: "Aria is a knave or Lily is a knight." Since Aria is a knight, Evelyn must be a knight.
5. Aria's statement: "Evelyn is a knight or Avery is a knave." Since Avery is a knight, Aria's statement is true, so Aryan is a knight.
6. Aiden's statement: "Avery is a knave." Therefore, Aiden is a knave.

So, the identities of the characters are:
- Avery is a knave,
- Zoey is a knight,
- Lily is a knight,
- Evelyn is a knight,
- Aria is a knight,
- Aiden is a knight.

The final answer is:
(1) Avery is a knave, (2) Zoey is a knight, (3) Lily is a knight, (4) Evelyn is a knight, (5) Aria is a knight, (6) Aiden is a knight. <|im_end|>

模型的回答固定为

  1. 总起,一步一步推理。

  2. 先重复每个人的话,在后面紧接着做推理。

  3. 给出答案。

  4. tag里给出答案。


但是,当我们仔细检查推理过程的时候,发现这个推理是错的,但答案是对的。 例如第四条,Since Aria is a knight, Evelyn must be a knight,第五条Aryan名字都没出现过。 当然最明显的,推理过程得到的结论,例如第六条Aiden is a Knave和答案Aiden is a knight根本也对不上。

虽然Logic-RL论文中Instruct模型也是经历了输出长度下降之后上升

图源Logic-RL: Unleashing LLM Reasoning with Rule-Based Reinforcement Learning

但是我这里并不能在下降后上升,因为在32次rollout中,模型的输出几乎都一模一样了,模型的最短回答和最长回答几乎都收敛了,即模型不再探索新的可能性,熵已经收敛了。

可能原因的讨论

我对于rule based reward+RL训练的理解是,这个过程类似于







请到「今天看啥」查看全文