李宏毅genai 笔记:预训练-对齐
0 alignment说明
在这里pretrain后面的两个阶段都是alignment
0.1 pretrain无法直接使用
如果直接用pretrain完的base model,可能没法进行会话等功能,几乎类似于重复之间的问题
经过alignment之后,就拥有了这些能力
alignment类似于画龙点睛,给强大的预训练模型能力;但是点的位置需要是准确的
0.2 alignment需要的资料也不多
在这篇论文种,精心挑选了一些资料进行align,可以用更少的资料达到align的效果
1 knowledge distillation
- 可以让已经对齐好的模型作为老师
- 生成一些问题,这些已经对齐好的模型的回答作为ground truth,进行微调
让LLM自己对这些用于对其的训练资料进行打分,只保留好的那些训练资料用于对齐
- 还有一种办法是只保留最长的资料用于alignment
- 同样再alpaca 数据集上进行操作,即便是选择最长的这些资料,用于对齐的资料的平均长度也是小于LIMA的
那下一个问题是,这些输入的问题,从哪里来呢?
随便从互联网上的资料中找一句话,用前半句作为“问题”,已经对齐模型生成的后半句作为ground truth
2 对其前后模型实际行为区别不大
- 这篇论文对于align之后的词汇的概率分布进行了分类:
- 如果align之后,原来第一的词还是第一,那么就是“unshifted”
- 如果align之后,原来第一的词位于前三,那么就是“marginal”
- 如果align之后,原来第一的词位于前三之后,那么就是“shifted”
结论是,基本上有大改变的是一些语气词,连接词和结束词;其他的大体上没有什么变化
从答案层面看,有没有对齐结果差很多是因为,很有可能会“一步错步步错”h
3 response tuning
- 这篇论文认为,既然align前后只是某几个词输出概率的差异,那我会不会finetune的时候不需要给模型问题,只给答案,就会有好结果呢?
从结果看,诚然如此
4 Rule-base adapter
这篇论文提出 "Rule-base adapter":只修改某些 token 的几率就可以做到alignment,甚至连finetune都不用做
- 强制加了一些规则
- 增加结束符号的概率
- 因为没有alignment的模型通常会讲太长
- 改一些符号的概率
- 对于重复说的话,加强他的惩罚,让他不要重复说某句话
- 增加结束符号的概率
5 self alignment
- 让模型生成多组答案,并自己对答案打分
- 再将打分结果对没有align的模型用RL的方式训练
6 如何达成有效的pretrain
Physics of Language Models: Part 3.1, Knowledge Storage and Extraction iclr 2025
我pretrain时看过完整的资料;align的时候看过一半被转换成一问一答的资料
那看起来,我将另一半没有在align阶段被看到的资料,转成一问一答的形式进行测试,模型应该有很高的准确率,毕竟pretrain阶段看到过了
但实际上并没有,接近几乎是0的准确率
为什么不行呢?
- 论文发现,当在pretrain的时候,某个资料只看过一次的时候,模型会以为,只有A+B+C才是D
- 需要看过多种与训练资料的改写组合,才有可能知道A是D
在预训练阶段看过多种改写的资料后,alignment后结果就可以大幅提升了
当然预训练资料里面的一部分被改写了就行
7 有限算力下,pretrain的时候应该看更多不同的资料
Scaling Data-Constrained Language Models
- 实线是我用12B的资料预训练(下标1,4,10,40表示这份与训练资料重复看1,4,10,40次)
- 虚线是我用12B,48B,120B的资料预训练。。。
- 可以看到相同算力下,看不同的资料效果会好很多
8 对齐的极限
Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations?
- highly known
- 给问题,他一定能答对
- greedy表示只选择概率最高的哪个答案
- 前面放范例问题和范例答案是因为base model通常不具备直接回答问题的能力(in context learning)
- maybe known
- 用某一组范例问题和范例答案可能回答不对,用别的范例问题和范例答案就会答对了
- weakly known
- sample的意思是根据输出概率采样一个结果,可能会对
- unknown就是怎么样都不会
- align(训练)的时候
- 模型本来就会的前三类准确率不断上升
- unknown的准确率慢慢上升
- 但是惊奇地发现,当unknown的部分准确率上升的时候,在测试集dev上的准确率却在下降了
- 也就是就只是的准确率下降
与此同时,论文发现,align的时候,使用mayknown的知识训练是最有效的,使用unkown的知识训练是最没用的
9 RL是alignment的好办法
- RL是激发模型原来的潜力(本来就回答的出的),而不是硬逼他做不会的事情