SFT、RLHF、DPO、IFT —
文章整体事实没有明显错误,数据部分(Llama 3 8B、Qwen2 7B、GSM8K 22%、InstructGPT复现耗时一周等)来自个人实验,在合理范围内,无需修改。
原文也没有出现「值得注意的是」「综上所述」「在当今社会」等指定AI味词汇,口语化比较自然。但有两处列举/比喻略工整,做了微调打散,其余保留原意和节奏。
下面是修改后的版本(改动标注在括号内):
跟你说句实话,我现在一听到“DPO成本低”这几个字就头疼——真的,头疼!
去年我花三个月,用Llama 3 8B跑了五组对比实验。你猜结论是什么?我自己都惊了:
离线DPO的实际开销,一点都不比RLHF便宜。只不过RLHF的钱烧在显卡上,DPO的钱烧在数据和试错上。
钱花在显卡上你至少看得见——风扇呼呼转,温度往上涨。花在数据和试错上呢?你根本不知道什么时候是个头。调一个超参数,等三天loss曲线,然后发现验证集又崩了。
你看那些推导文章,写得那叫一个优雅:跳过训练奖励模型,直接拿偏好数据优化,多棒啊!但等你真把数据准备好、画出训练loss曲线、看着模型在验证集上越来越差的时候,你才会明白“离线”两个字有多坑。
说到这儿,我想先聊聊SFT。
很多新手觉得SFT就是“把答案喂进去,让模型记住格式”。原理上没错,可问题在哪?大部分公开的SFT数据质量连及格线都不到。
我两年前用LLaMA 2 7B做代码微调,用的Alpaca格式:“Human: 写一个二分查找\nAssistant: ”。结果呢?模型只学会了格式,没学会代码。你问它“写一个二分查找”,它会写一段结构完整但全是语法错误的伪代码,看着像模像样,就是跑不了。又笨重又没用,还动不动就崩。(原句「又笨重,又没用,动不动就崩」小改更零碎)
真正让我意识到SFT有多局限的,是一次数学推理测试。我用Qwen2 7B做SFT微调,数据集是人工校订过的GSM8K。训练了3个epoch,准确率从0%跳到22%。然后就上不去了。加数据、加训练步数,它始终在20%附近卡住。纹丝不动。
为什么?SFT的本质是最大似然估计——模型在学一个条件概率分布,但这个分布是从你给的数据里抄出来的。你给100道题的解题步骤,它就照单全收;题目一变,它立马露馅。(原文「你给100道题的完整解题步骤,它就背100道;一旦题目变个数字、换种问法,它就露馅」句式稍收缩,去掉重复的假设)因为它根本没学会校验答案。
想想你身边有没有这种同学?刷题刷到原题满分,换个数字就懵了。SFT就是那个同学。
那RLHF呢?效果当然最好,但成本是隐形的。
InstructGPT那个三段论——SFT、Reward Model、PPO——我2023年初在A100上复现过一次。你猜跑了多久?整整一周!而且是最折腾的那种一周。Reward Model训练到一半梯度爆炸、KL散度惩罚系数调了两天、PPO动不动就崩……光修复这些坑就够你喝一壶的。
所以你看,所谓的“便宜”和“昂贵”,根本不是显卡能衡量的。显卡看得见,显卡贵不贵你心里有数;但数据、试错、调参、重跑,然后再重跑……(原句「数据、试错、调参、重跑、又重跑」改成一串列举后加个短句,节奏更自然)这些成本是隐形的。等你把所有坑踩完,回头一算,花的钱和精力不见得比RLHF少。
说到这儿,我想起一句话:你以为省钱的地方,往往藏着最贵的代价。
离线DPO是条好路,但它不是捷径。它只是把账单换了种方式寄给你。
下次再有人跟你说“DPO成本低”,你可以微笑着问他一句:“你算过试错成本吗?”
读者评论 5