5.1 RLCD 训练循环


5.1 RLCD 训练循环

本节摘要:RLCD(基于对比偏好信号的决策学习)的动机与机制在《Jev 决策编程》已有完整交代,本节不重复概念,只讲 laya 侧的微调实现。三块内容:其一,偏好数据的最小格式——一条样本是「context 加 question 加一个偏好对」,偏好对声明「哪个答案比哪个答案更好」,不要求你给出标准答案本身;其二,训练循环代码骨架——前向取两答案的对数概率、按偏好方向算对比损失、反向更新决策头,骨架二十来行(写法示意,接口以官方仓库 README 为准);其三,小样本特性——几百到几千条偏好样本就能显著移动一个 BERT 级检查点(量级为经验示意),以及随之而来的过拟合风险与「训练后三查」。本节结束时,你应该能看懂任何一份 laya 微调脚本在做什么。

学习目标

  • 写出 laya 偏好样本的最小数据格式,并说出它与「带标准答案的标注」的区别。
  • 读懂训练循环代码骨架:对数概率、对比损失、更新决策头三步。
  • 解释小样本特性为什么成立:底座小、任务封闭、信号强。
  • 按「训练后三查」验收一次微调,别让过拟合骗走你的好感。

一、三十秒回顾:RLCD 要什么

概念完整版在《Jev 决策编程》(其核心心智模型与核心机制两章),此处只留 laya 视角的最简版。RLCD 不问「正确答案是什么」,只问「A 与 B 哪个更好」:

监督学习(要标准答案) RLCD(只要偏好对) ┌────────────────────┐ ┌────────────────────────────┐ │ context + question │ │ context + question │ │ label = 正确答案 │ │ preferred = 更好的答案 │ │ 拟合「答对」 │ │ rejected = 更差的答案 │ │ │ │ 拉开两者的概率差 │ └────────────────────┘ └────────────────────────────┘ 标注贵、争议多 标注便宜:二选一比打分容易 ​

对 laya 这种答案空间封闭(第 1.2 节的选项表、分档表)的引擎,偏好信号的粒度刚好:你不需要告诉它「物流投诉」的概率应该是 0.62,只需要告诉它「物流投诉」比「产品咨询」更该选——分布的形状由训练自己长出来。

二、数据格式:一条偏好样本长什么样

以工单分类为例,最小格式(字段名写法示意,以官方微调文档为准):

# preference_sample.json —— 偏好样本的最小格式(示意) { "context": "工单:订单三天未发货,客服电话打不通。", "question": { "id": "intent", "type": "choice", "question": "这条工单属于哪个类别?", "options": ["账务", "软件缺陷", "售前咨询", "物流"] }, "preferred": "物流", "rejected": "售前咨询" } ​

三个设计要点。第一,preferred 与 rejected 都必须取自 options 之内——偏好是在封闭答案空间上的排序信号,写出空间外的答案等于废样本。第二,rejected 别总挑同一个弱选项:如果每条样本的 rejected 都是「其他」,模型只会学会「别选其他」,其余选项之间的分辨力原地踏步——被拒方要覆盖真实会混淆的选项。第三,question 措辞与选项表要和上线时用的一字不差(第 3.1 节的可复现性三件套在这里兑现):微调教的是「这道题怎么答」,题面换了,教学就作废了一半。

偏好从哪来,三条常见来源按成本从低到高:

来源 做法 质量 适用
业务日志隐式偏好 用户后续行为反推哪个答案更好 中,有噪声 有真实流量的存量业务
人工二元标注 标注员二选一 高 精细业务、争议样本
强模型弱标注 用更大的模型批量生成偏好对 中,需抽检 冷启动、量大的粗任务

混合使用是常态:冷启动用强模型铺底,人工只标争议区,日志偏好在上线后持续回流——这构成第 10.3 节要讲的「定期重校准与再微调」闭环的原料侧。

三、训练循环代码骨架

骨架只保留 RLCD 的主干:取两个答案的对数概率,按偏好方向算损失,更新参数(写法示意,类名与接口以官方仓库 README 为准):

# finetune_rlcd.py —— RLCD 微调骨架(写法示意,接口以官方仓库 README 为准) import torch import torch.nn.functional as F from laya import load model = load("laya-multilingual") # 选定要微调的检查点(第 2.1 节) model.train() optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5) # 学习率为示意起点 def rlcd_step(batch): # 1. 前向:同一批 context + question,取决策头在选项上的对数概率 logprobs = model.option_logprobs( contexts=batch["contexts"], question=batch["question"], # 与上线时一字不差的题面 ) # 形状:[批大小, 选项数](示意) # 2. 取偏好方与被拒方的对数概率 idx_pref = model.option_index(batch["question"], batch["preferred"]) idx_rej = model.option_index(batch["question"], batch["rejected"]) lp_pref = logprobs[torch.arange(len(logprobs)), idx_pref] lp_rej = logprobs[torch.arange(len(logprobs)), idx_rej] # 3. 对比损失:偏好方应高于被拒方,差距越足损失越低 loss = -F.logsigmoid(lp_pref - lp_rej).mean() return loss # for batch in train_loader: # 数据加载与并行细节见 5.2 节 # loss = rlcd_step(batch) # loss.backward() # optimizer.step() # optimizer.zero_grad() ​

骨架里有三个值得停留的点。损失形状:logsigmoid 的含义是「只要偏好方压住被拒方,损失就趋近零;压反了,损失随差距对数式上升」——它不逼概率逼近某个目标值,只逼排序正确,这正是 RLCD「只教排序不教数值」的体现,数值形状交给校准(第 7.1 节)。学习率:2e-5 是 BERT 级底座微调的常见起点(示意值),大一个量级容易把底座预训练知识冲垮,小一个量级则几轮学不动。题面冻结:训练里的 question 与 options 来自上线配置本身,别为了「数据好整理」改写题面。

与偏好信号并行的另一半数据是留出集:从第一天起就划出 10%~20% 的样本不参与训练(比例示意),它们在 5.2 节的 notebook 里承担验收、在第 7.1 节承担温度拟合——同一份数据两次复用,但绝不能混进训练集。

四、小样本特性:为什么几百条就够

官方两个案例(5.3 节展开)与 BERT 级微调的普遍经验指向同一结论:偏好样本在几百到几千条的量级就能显著移动 laya 的决策行为(量级为经验示意,任务难度不同会有出入)。三个原因叠加:底座小——322M/421M 的参数量(官方 README 口径)意味着需要填充的「任务知识」少;任务封闭——答案空间在题面里写死,不存在开放生成的海量可能;信号强——每条偏好对都在直接约束输出空间的排序,没有间接推断的损耗。

小样本是双刃剑,代价是过拟合来得也快。三条纪律:轮数保守(先跑两三轮看留出集,别上来二十轮,示意建议);早停以留出集为准(留出集指标回撤就停);样本去重(高度重复的偏好样本等于变相加大某些样本的权重,先把近重复样本清一遍再训练)。

五、训练后三查

一次微调结束,先别急着庆祝,按固定动作验收:

检查 怎么做 看什么
一查留出集 第 3.2 节的 predict_batch 跑留出集 准确率与训练集的差距(差距大即过拟合)
二查边界样本 手挑十条最刁钻的真实样本 别为整体指标牺牲长尾(微调最常见副作用)
三查分布形状 看留出集的 probabilities 分布是否健康,为第 7.1 节温度拟合备料

三查之后的动作在第 7 章:温度拟合重做、置信阈值重定。微调与校准是两道独立工序,跳过第二道的微调模型,概率数字没有工程含义——这条铁律第 10.3 节还会以运维清单的形式再出现一次。

本节要点回顾

  • 偏好样本最小格式:context 加 question 加 preferred 与 rejected;被拒方要覆盖真实混淆项,题面与上线一字不差。
  • 训练循环三步:前向取选项对数概率、logsigmoid 对比损失、AdamW 小学习率更新;只教排序,数值交给校准。
  • 小样本成立的三原因:底座小、任务封闭、信号强;代价是过拟合快,轮数保守加早停加去重。
  • 训练后三查:留出集差距、边界样本、分布形状;微调之后必须重新校准。

训练循环懂了,下一个现实问题是算力:BERT 级检查点的微调用 GPU 最舒服,但没有卡怎么办——官方在 Kaggle 上放了免费 2×T4 的微调 notebook(官方口径)。下一节走复现步骤。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U