本系列生成式人工智能导论博文基于国立台湾大学李宏毅老师发布的课程视频整理而来, 仅用作复习参考.
可以算是人工智能领域的入门课程.
需要明确的是, 李宏毅老师上传的课程已经是2024年的课程, 距今有两年的时间, 知识难免有过时的可能, 如果出现了这种情况, 博主会尽可能补足当前的状态.
生成式人工智能导论 Chap.3 语言模型的训练过程
在正式了解模型的训练过程前, 我们得回顾一下几个知识点:
- 语言模型一直在做文字接龙的工作
- 语言模型本质上是个包含数十亿参数的函数, 通过训练资料将函数的参数确定下来的过程, 就是模型训练(Training / Learning)
- 参数确定下来后, 进行文字接龙的测试工作, 叫做测试 / 推论(Testing / Inference)
3.1 寻找参数的挑战
3.1.1 最佳化与超参数
我们说机器学习一直在尝试找到确定的参数, 但是很显然, 参数的取值可能性太多了. 如何取到一组参数值, 使得这个模型运行起来效果最佳, 是一个很难解决的问题.
这个玩意在机器学习中有一个专有名词: 最佳化(Optimization) .
由于生成式人工智能导论这门课只是人工智能的第一堂课, 因此在这里, 不会对最佳化进行详细的讲解.
我们可以简单将其理解为, 通过设定机器学习过程中的某些变量(这些变量也有专有名词: 超参数, Hyperparameter / 初始参数, Initial Parameters), 从而确定不同的参数.
超参数 : 训练开始前由人为设定的外部配置(例如学习率、神经网络的层数)。它们用来控制训练过程的运作方式,不会在训练过程中被算法自动更新。
初始参数 : 模型内部参数在训练开始前的起始数值。模型会从这些值开始,通过训练数据不断被修改和优化。
3.1.2 确定参数过程中的意外情况
我们需要明确的几点是:
- 训练是可能失败(模型输出的结果不符合训练资料)的
- 训练失败, 只能换一组超参数, 再试一次
- 但是在诸多研究中, 超参数的变更方式, 有迹可循
历经千辛万苦, 训练成功了, 恭喜你, 还有第二关要过, 也就是测试.
而关于测试, 我们也会碰到非常遗憾的事情:
- 训练成功(模型针对训练资料的输出结果符合预期), 但测试失败(模型针对测试资料的输出结果不符合预期), 这种情况也有专有名词: Overfitting
3.1.3 怎么让机器寻找到更加合适的参数
出现训练失败, 或者overfitting的情况时, 该怎么办?
- 增加更多的训练限制, 换一种说法, 就是多样化我们的训练资料.
- 合理设定超参数与初始参数.
这个初始参数该怎么找是个问题.
最常规的做法是随机选择, 也叫 Train from scratch .
但很明显, 随机的效率, 不够高, 远远不够高. 我们更希望能够找到某一个尽可能合理的值, 将其作为初始参数进行模型训练. 换句话说, 给模型训练一个比较正确的 先验知识 .
3.2 第一阶段: 自督导式学习(Self-supervised Learning)
3.2.1 学会文字接龙的文本量
目前来说, 模型需要学的内容包含两个大方面:
- 语言知识: 更类似于文法, 语法类的规则类内容
- 世界知识: 更类似于需要了解的知识性内容
从文献来看, 语言知识真的比较好学:
从典型值来看, 也许基于模型一亿个词汇, 就能够让它学会比较通用的语言知识. (深蓝色的线条)
与之相对的, 就算我们给予模型超越30亿的文本量, 也许我们也无法让模型学会足够的世界知识.(浅蓝色线条)
3.2.2 自督导式学习
尽管30亿的文本量看起来着实很多, 但好处在于, 这种需要作为学习资料的文本在当今的网络上简直是要多少有多少. 任何一段正常的文本, 都可以直接拿来当作训练资料.
这一过程中, 人工几乎并不介入训练本身, 而是让模型自行从大量的, 质量参差不齐的资料中自我学习. 这一阶段因此得到了一个专业名词: 自督导式学习(Self-supervised Learning) .
当然, 在如今的互联网上, 资料太少往往不是个问题, 因此目前几乎全部模型的训练过程, 都会进行一定程度上的 资料清理 , 这往往包括:
- 去除有害内容(黄色内容 / 暴力内容等等)
- 去除HTML Tag
- 去除”低品质”资料(通过预先训练好的资料分类器等等, 这往往也是一个模型)
- 去除重复资料
通过如上的资料清理, 能够在模型训练的第一步就打下一个良好的基础.
3.2.3 更大? 更好? 更强?
到此, 我们大概会进入一个常见的误区. 是不是模型参数越多, 训练资料数据量越大, 训练出的模型就越强?
前人与我们陷入了同样的误区, 并投入了实践.
OpenAI自2018年进行模型研发以来, 其实已经进行了相应的尝试, 它们的数据量如下:
- GPT-1: 117 Million Parameter, Read about 1GB Text
- GPT-2: 1542 Million Parameter, Read about 50GB Text
- GPT-3: 175 Billion Parameter, Read about 580GB Text
但很遗憾, 直到GPT-3, 模型仍然表现的十分 “不受控” . 它往往不会老老实实的回答你的问题, 有时甚至会产生意想不到的输出格式.
如果读者还觉得不够, 同阶段, Google训练出了一个模型叫PaLM, 足足达到了 504 Billion Parameter 的参数大小, 但结果仍然如此.
因此, 事实证明, 只有这种简单的自督导式学习还不够, 语言模型的训练还需要更进一步的指导.
3.3 第二阶段: 督导式学习(Supervised Learning)
第一阶段完成了基础的资料累计, 但很显然, 这距离一个强大的, 能够正确回答问题的语言模型而言, 远远不够. 它接触到的语料不足以让它以正确的问答逻辑来回答问题.
这个阶段, 人工需要介入了.
3.3.1 指令微调 Instruction Fine-tuning
所谓 指令微调 , 指的是在这一阶段, 语言模型会再次接收到一系列新的信息, 但特殊的是, 这一系列新信息是以 指令-回复对(Instruction-Response pair) 来给出的.
这些指令回复对, 是人类自行产生的高质量资料, 需要耗费大量的人力物力来进行生产, 产生这一系列指令回复对的过程叫做 资料标注(Data Labeling) .
事实上, 这一阶段的训练过程, 我们在Chap.1中也提到过它的另一个名字, 督导式学习(Supervised Learning / Supervised Fine-tuning)
为什么不一开始就只用人类给出的资料?
这问题的答案比较现实. 太贵了.
要收集人类标注的, 高质量的对话, 需要的成本过高, 往往花费巨量成本搜集到的资料, 也不足以让语言模型成功对这个世界产生足够多的认知. 因此, 第一阶段预训练, 即便它的效果不佳, 资料质量不高, 但胜在能够以较低的成本来让模型满足大量基本认知.
3.3.2 Adapter
我们曾提到过, 要想提高模型的训练效果, 可以从两方面着手: 扩充资料以及变更初始参数.
显然, 对于这个指令微调阶段, 人工产生的资料实在是太贵了, 扩充资料显得不是很现实, 变更初始参数因而成为了比较常规的方式.
这个初始参数自然就是是从第一阶段的预训练拿来的.
通过这种方式, 我们就能够让最终微调出的参数比较接近我们的初始参数(我们提到过的, 初始参数是最佳化寻找参数的起点). 当然, 如果我们还不放心, 那么我们完全可以借助另一种思路.
Adapter 的思路是: 直接冻结模型原有的初始参数, 转而加上些额外的参数使得这个模型能够满足微调时提供资料的要求:
当前最红火的Adapter示例即LoRA(Low-Rank Adaptation), 但课程原因, 这里不详述.
3.3.3 Fine-tuning的方向?
显然, 这种指令微调的方式给予了我们第二次重塑模型表现的机会. 这同时也让微调这个行为, 有了不同的努力方向:
- 通过不同风格的QA, 打造很多擅长不同领域的语言模型(专才)
- 收集一大堆的标注材料, 通通喂给模型, 打造一个各方面都很强大的语言模型(通才)
我们已经理解了专才的培养方式, 那通才对我们而言就不会很难, 无非是看看量变能否引起质变的关系.
在2022年, 谷歌就曾做过相应的尝试, 谷歌对一个Pre-train的模型做微调时, 加入了 1.8k种任务 , 得到的结果事实上还蛮喜人的.
当然, 从2026年初的视角来看, 通才模型是主流方向.
3.3.4 画龙点睛与逆向工作
我们上面讨论了这么多关于指令微调的事项, 尽管它们方向不同, 风格迥异, 但至今为止, 有一点是确定的:
指令微调是一个 画龙点睛 的工作, 资料在精不在多.
在llama2等模型的论文中, 就已经给出了他们的结论, 他们仅用了上万规模的高质量资料集, 就能够让模型做到它应当做到的事情.
那么, 既然我们不需要过多的资料, 这个指令微调的过程能不能让我们自己来做?
不行 , 因为从基本定义上来说, 我们就没有 高品质的资料 .
好, 就是这里, 危险的想法开始出现了奥.
我们让一个现有的, 表现很好的语言模型, 自己产生出很多很多的QA对, 然后把这些它产生出来的QA对直接拿过来自己做Fine-tuning不就好了吗?
这个想法此前有人做过, 被称之为 逆向指令生成(Reverse Instruction Generation)
不过显然, 这些大公司不希望这种事情的产生, 这不是给自己创造竞争对手嘛. 因此, 以OpenAI为例, 能够看到用户条款中类似这样的表述:
(c)Restrictions. … (iii)use output from the Services to develop models that compete with OpenAl;不过这个条款真的没什么人在意就是了.
好!
我们现在有了Fine-tuning的资料, 还缺什么? 还缺Pre-train的模型.
在2023年, 大家还拿不到非常优质的Pre-train模型, 这整个事情在这里就卡住了. 直到Meta将Llama的整个Pre-train模型开源, 这一切才迎刃而解.
至此, 人人都可以微调大语言模型的时代, 开始了.
3.4 第三阶段: 增强式学习(Reinforcement Learning)
此前的阶段大多局限在开发者的视角上, 需要开发者来对模型来做某些自主性的改进, 但我们貌似忽略了用户的体感.
第三阶段, 我们会将历经Pre-train, Fine-tune后的模型拿出来, 真正通过用户的反馈, 来对模型进行进一步改进, 它叫做 RLHF(Reinforcement Learning from Feedback / 基于人类反馈的强化学习) .
3.4.1 增强式学习
相对于此前的训练阶段, 这个阶段的逻辑要简单得多.
我们的目的是, 通过用户真实的反馈, 来让模型微调它的参数, 从而能够使得那个 对于用户而言更好 的答案的概率相对应的变高.
RLHF的常见算法包括:
- PPO(Proximal Policy Optimization)
- DPO(Direct Preference Optimization)
- RLAIF(Reinforcement Learning from AI Feedback)
在本处不进行展开.
3.4.2 RLHF Vs Instruction Fine-tuning
系统对比一下第二阶段与第三阶段的区别, 有以下这么几点:
(1)指令微调往往需要人类自行产生出正确的回答(把做逆向的先拖出去); 而RLHF只需要让人类来判断那个答案更好就够了. 从常规角度而言, 后者的难度要显著低于前者.
(2)从对模型的影响上, RLHF相对于指令微调更加注重结果. 指令微调的训练注重于让模型在每次接龙时 接对 , 而RLHF则只关注最终结果的 整体正确性 .
3.4.3 Reward Model
以上, RLHF始终还逃离不了一个局限性, 它需要大量的人类来参与进行模型输出的评估, 这件事本身是一笔很大的开始.
人类的时间还是太宝贵, 并且有时, 评估标准也太不稳定, 那怎么办呢?
我们需要一个 代理 , 它能够像人类一样来对答案进行打分, 评估.
本节标题 Reward Model 就此产生.
3.4.4 RLHF目前的局限性
每到这个时候, 信息安全相关的事情就要接踵而至了.
对于语言模型而言, 怎么判定 好坏 是个比较难以界定的事情.
如果我们基于语言模型些很 “危险” 的输入, 这个输入可能直接引导向某些危害社会的事件, 这时候语言模型该怎么回答才叫好?
语言模型从其设计初衷来看, 应当直接拒绝回答, 这无疑在 Safety 方面是个满分答案; 但从 Helpfulness 的方面看, 语言模型拒绝了人类的请求, 这是个零分答案.
除此以外, 当语言模型面对一个连人类都都无法判定哪个答案更好的问题时(也就是这个问题超纲了, 人类老师都不知道), 它自己又应当如何进步, 这仍然是一个值得探究的问题.
这篇博文主要概述了语言模型训练的三个阶段.
Pre-train -> Instruction Fine-tuning -> RLHF
对应着
Self-supervised Learning -> Supervised Learning -> Reinforcement Learning
这篇博文就到这里~



