从 TTS 到 TTRL:无标签数据强化学习探索与展望

部署运行你感兴趣的模型镜像

原文:https://mp.weixin.qq.com/s/LkMt6FNTFsRyw79fY4LKdQ

在预训练 Scaling Law之后,测试时扩展(Test-time Scaling, TTS)已成为提升大模型推理能力的关键。OpenAI o1与DeepSeek R1等模型通过强化学习(RL)进行推理的范式,充分展现了TTS的潜力。

然而,推理模型的性能上限仍深受基础模型(其架构与预训练数据)的制约。当前,标注数据的匮乏限制RL效果。如何在无显式标签的条件下进行强化学习,成为进一步释放推理模型潜能的核心

在最新的研究中,来自清华大学和上海人工智能实验室的研究员提出了一种新方法 —— 测试时强化学习(Test-Time Reinforcement Learning,TTRL),该方法能够在无标注数据上对 LLM 进行强化学习训练。

论文标题:TTRL: Test-Time Reinforcement Learning
论文地址:https://arxiv.org/abs/2504.16084
GitHub:https://github.com/PRIME-RL/TTRL
HuggingFace:https://huggingface.co/papers/2504.16084

TTRL的核心挑战在于推理过程中,如何在缺乏真实标签的情况下进行有效的奖励估计。研究员发现,TTS中的多数投票等常用策略能产生出乎意料的有效奖励信号,足以驱动RL训练。

TTRL 通过利用预训练模型中的先验知识,使 LLM 具备自我演化的能力。实验证明,TTRL 在多种任务和模型上都能持续提升性能:在仅使用未标注测试数据的情况下,TTRL 将 Qwen-2.5-Math-7B 在 AIME 2024 任务中的 pass@1 指标提升了约 159%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TTRL标志着向“经验时代”的RL迈出了初步探索,使模型得以在缺少人类标注的条件下实现自我探索与进化。展望未来,通过环境交互与多智能体协同,在真实任务中持续提升模型能力,将是“经验时代”强化学习发展的关键方向。

5月14日20:00点,青稞Talk第48期,TTRL 作者、清华大学博士生张开颜,将直播分享《从 TTS 到 TTRL:无标签数据强化学习探索与展望》。

本期Talk 张开颜博士将聚焦无标签数据上进行强化学习——即测试时强化学习(TTRL)的探索,探讨TTS与RL推理的关系,详述TTRL的方法与意义,并从协同与交互的视角展望RL经验时代。

分享嘉宾

张开颜,清华大学三年级博士生,导师为周伯文教授。研究方向为大语言模型测试时扩展(Test-time Scaling)、强化学习和多智能体协同技术。在NeurIPS,ICLR,ICML,ACL,EMNLP,COLM等国际人工智能顶级会议与期刊上发表论文十余篇。

主题提纲

从 TTS 到 TTRL:无标签数据强化学习探索与展望

1、强化学习推理与 TTS 的关系
2、TTRL:无标签数据的测试时强化学习方法
3、TTRL 的有效性及局限性讨论
4、协同与交互视角下的 RL 经验时代

直播时间

5月14日20:00 - 21:00

您可能感兴趣的与本文相关的镜像

Qwen3-VL-8B

Qwen3-VL-8B

图文对话
Qwen3-VL

Qwen3-VL是迄今为止 Qwen 系列中最强大的视觉-语言模型,这一代在各个方面都进行了全面升级:更优秀的文本理解和生成、更深入的视觉感知和推理、扩展的上下文长度、增强的空间和视频动态理解能力,以及更强的代理交互能力

<think>我们正在讨论SFT(监督微调)的实现方法。根据用户要求,我们需要提供SFT微调的伪代码或实现步骤。结合之前的引用,虽然引用中提到了PEFT(参数高效微调)和TTRL(测试时强化学习),但用户明确要求了解SFT微调。SFT(SupervisedFine-Tuning)是微调预训练模型的一种基本方法,使用有标签数据以监督学习的方式调整模型参数。下面将分步骤描述SFT微调的流程,并给出伪代码。###SFT微调步骤1.**准备数据集**:需要准备一个监督数据集,包含输入和对应的期望输出(标签)。例如,对于文本生成任务,输入是一段文本,输出是目标文本。2.**加载预训练模型**:从预训练模型(如BERT、GPT等)初始化模型权重。3.**定义微调任务**:根据任务类型(如分类、生成等)在预训练模型基础上添加任务特定的层(如分类头),或者直接使用预训练模型的结构。4.**设置训练参数**:选择优化器、学习率、批大小等超参数。5.**训练循环**:在训练数据上迭代,计算损失并更新模型参数。6.**评估保存**:在验证集上评估模型性能,保存最佳模型。###SFT微调伪代码以下是一个通用的SFT微调伪代码示例,以文本分类任务为例:```plaintext//步骤1:准备数据集LOADdatasetFROM"data_path"SPLITdatasetINTOtrain_set,val_set//步骤2:加载预训练模型model←LOAD_PRETRAINED_MODEL("bert-base-uncased")ADDclassification_headONmodel//添加分类层//步骤3:设置训练参数optimizer←AdamW(model.parameters(),lr=5e-5)loss_fn←CrossEntropyLoss()epochs←3batch_size←32//步骤4:训练循环FORepochIN1..epochsDOFOREACHbatchINtrain_set(WITHbatch_size)DO//前向传播inputs,labels←batchoutputs←model(inputs)//[batch_size,num_classes]//计算损失loss←loss_fn(outputs,labels)//反向传播optimizer.zero_grad()loss.backward()optimizer.step()ENDFOR//验证集评估val_loss,val_acc←EVALUATE(model,val_set,loss_fn)PRINT"Epoch",epoch,"ValLoss:",val_loss,"ValAcc:",val_accENDFOR//步骤5:保存模型SAVEmodelTO"sft_model.bin"```###关键点说明-**数据集格式**:对于不同任务,输入和标签的形式不同。在文本分类中,输入是文本序列,标签是类别索引;在生成任务中,输入是源文本,标签是目标文本。-**模型调整**:对于分类任务,通常在预训练模型顶部添加一个线性层作为分类头。对于生成任务(如使用GPT),则直接使用预训练的语言模型结构,在微调时调整整个模型的参数。-**损失函数**:分类任务常用交叉熵损失;生成任务常用交叉熵损失(对每个token计算)[^2]。-**学习率**:通常使用较小的学习率(如5e-5)以避免破坏预训练模型学到的知识。###SFT提示微调(Prompt-Tuning)的区别用户引用[1]提到Prompt-Tuning使用softprompt,而SFT微调会更新整个模型或大部分参数。两者的主要区别在于:-**SFT**:更新模型的所有参数(或添加任务特定层并更新这些层)。-**Prompt-Tuning**:固定预训练模型参数,只优化少量可学习的提示向量(softprompt)[^1]。###数学表示在微调过程中,模型参数更新公式如下:$$\theta_{t}=\theta_{t-1}-\eta\nabla_{\theta}\mathcal{L}(f_{\theta}(x),y)$$其中:-$\theta$是模型参数-$\eta$是学习率-$\mathcal{L}$是损失函数-$(x,y)$是训练样本###相关问题§§相关问题§§1.SFT微调需要多少数据才能达到较好效果?2.如何避免SFT微调中的过拟合问题?3.SFT参数高效微调(PEFT)方法(如LoRA)有何区别?4.在生成任务(如对话系统)中如何实现SFT微调?以上内容提供了SFT微调的基本步骤和伪代码,并强调了其提示微调的区别。用户可以根据具体任务调整实现细节。</think>### SFT(监督微调)伪代码实现步骤 #### 一、SFT核心流程 ```plaintext FUNCTION supervised_fine_tuning(pretrained_model, dataset): // 步骤1:准备监督数据集[^3] sft_dataset ← LOAD_DATASET(dataset) // 格式: [input, target_output] // 步骤2:初始化模型 model ← LOAD_PRETRAINED(pretrained_model) // 如LLaMA, GPT tokenizer ← GET_TOKENIZER(pretrained_model) // 步骤3:配置训练参数 optimizer ← AdamW(lr=2e-5, weight_decay=0.01) loss_fn ← CrossEntropyLoss() // 步骤4:微调循环 FOR epoch IN 1..num_epochs: FOR batch IN sft_dataset: // 编码输入输出 inputs ← tokenizer(batch.input) labels ← tokenizer(batch.target_output) // 前向传播 outputs ← model(**inputs) loss ← loss_fn(outputs.logits, labels) // 反向传播 loss.backward() optimizer.step() optimizer.zero_grad() // 验证集评估 eval_loss ← EVALUATE(model, validation_set) SAVE_CHECKPOINT(model, f"epoch_{epoch}") // 步骤5:保存最终模型 RETURN model.save("sft_final_model") END FUNCTION ``` #### 二、关键实现细节 1. **数据格式要求** ```python # 示例数据样本 { "input": "解释牛顿第一定律", "target_output": "牛顿第一定律指出:物体在不受外力作用时..." } ``` 2. **损失函数设计** $$ \mathcal{L}_{SFT} = -\sum_{t=1}^{T} \log P(y_t | y_{<t}, x; \theta) $$ 仅计算**目标序列**的交叉熵损失[^2] 3. **梯度更新策略** ```plaintext // 只微调特定层(高效训练) FOR param IN model.parameters(): param.requires_grad ← False // 冻结所有层 UNFREEZE(model.decoder.layers[-4:]) // 仅解冻最后4层 ``` #### 三、数学原理 监督微调通过最大化目标序列的似然概率调整参数: $$ \theta^* = \arg\max_{\theta} \sum_{(x,y) \in \mathcal{D}} \log P(y|x; \theta) $$ 其中: - $x$ 是输入序列 - $y$ 是目标序列 - $\mathcal{D}$ 是监督数据集 #### 四、完整PyTorch实现示例 ```python from transformers import AutoModelForCausalLM, Trainer, TrainingArguments # 加载预训练模型 model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b") # 配置训练参数 training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=4, num_train_epochs=3, learning_rate=2e-5, fp16=True # 混合精度训练 ) # 实现数据整理器 def collate_fn(batch): return { "input_ids": pad_sequence([item["input_ids"] for item in batch]), "labels": pad_sequence([item["labels"] for item in batch]) } # 启动训练 trainer = Trainer( model=model, args=training_args, train_dataset=dataset, data_collator=collate_fn ) trainer.train() ``` #### 五、最佳实践 1. **数据质量优化** ```plaintext // 清洗数据 REMOVE_LOW_QUALITY_SAMPLES(dataset) // 过滤错误标注 BALANCE_DOMAIN_DISTRIBUTION(dataset) // 平衡领域分布 ``` 2. **渐进式解冻** ```plaintext // 分阶段解冻层 FOR epoch IN 1..3: UNFREEZE(model.layers[-epoch]) ``` 3. **早停策略** ```plaintext IF eval_loss NOT DECREASE FOR 3 epochs: STOP_TRAINING() ``` > SFT微调使预训练模型**适应特定任务分布**,相比Prompt-Tuning[^1]能更充分挖掘模型潜力,尤其适合需要精确控制的专业领域任务[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值