AI大模型是怎么从一个“小白”到学会人类语言的
大模型从一个“小白”变成一个掌握人类语言的过程称之为“预训练(Pretrain)”,本文尝试用尽量“大白话”的方式描述大模型是如何“预训练”的。
预训练阶段,我们都对小白做了什么?
(这一阶段所需要的训练数据是最大的,也是最耗时)
- 不停的阅读大量大量的人类文字资料
- 亦步亦趋的学习人类是如何使用文字的(一字一字的学习)
- 学习到最多的人类知识,学习到大量的文字表达方式
训练这么多数据用来干什么?
为了让小白“掌握”人类语言。
首先我们要知道一个概念,即所谓模型,有三个关键要素,“输入,输出,以及中间的处理机制”。比如DeepSeek-R1是一种模型,你给它一个问题(输入),它经过自身的分析处理后,还给你一个回答(输出)。
拿汉字举例,假设所有汉字共5000个。小白经过训练后,就知道了这5000字当中的每一个字与其他4999个字之间的关系。这个关系是怎么得出来的呢?
- 将每个汉字转化为一个Token,可理解为一串编码或者每个字的身份证号码(实际上汉字和Token不是一一对应的关系,1个汉字可能由1个或多个Token组成)
- 有了身份证,那小白此时就认识每个汉字了,但它还无法知道字与字之间的关系。比如“人”和“类”有一定的关系1,可以组成“人类”,“人”和“们”也有一定的关系2,可以组成“人们”,其中关系1和关系2表示所代表的关系程度会不一样,比如在某些场景下,可能“人”和“类”的关系程度要大于“人”和“们”,有些场景下则可能相反。这时,小白就需要用一种方法来衡量这些关系,这个方法就是将Token进行向量化。因为每个向量都代表唯一1个坐标,坐标与坐标之间就会有距离,所以此时就相当于让每个汉字之间都有了一个“距离”;
- 距离越近,代表越相似即关系越程度越大。(比如推荐策略中,每个物或人都被量化为一个向量,判断给什么人推什么东西时也会用到相似推荐,其实这里的“相似”也是看向量的距离,一般常用余弦计算夹角,越小代表越相似)
- 就像上述“2”所描述的,字与字之间的关系程度不是唯一的,需要带入实际当时的场景(上下文含义)进行计算。
(实际的训练过程远比这个复杂,还有位置向量需要参与计算等等)
以上,向量里的每个坐标分别是多少呢?
简化点,拿3维向量举例;
假设我们定义汉字“人”为a(a1,a2,a3),其中a1,a2,a3这3个参数分别是多少呢?
另外4999个字的各自向量的参数分别又是多少呢?
假设我们人为规定每个坐标的取值只能为0-99之间的整数(即每个坐标各自有100种取值)
小白在预训练之前,它也不知道每个参数是多少,人类科学家也是不知道的。但我们可以在第1次训练时,给每个参数随机赋一个值,然后通过上述训练步骤(学习人类文字资料)来测试这轮随机赋值准确的概率(设想一下,假设小白通过阅读了人类几乎所有有记载的文字内容,那么它就知道了每个字与其他字在什么“场景、语境”下该是什么关系,当它在某个上下文场景下看到某个字时,它就能判断下一个字大概是什么),通过一轮轮迭代调试,小白就逐渐掌握了人类的表达方式,这个“逐渐掌握人类表达方式的过程”就是“不断调整参数的过程”,最终就确定了这个小白的这个版本的预训练阶段的每个参数的值(训练过程大致描述放到了文章后面)。
到这里,假设给小白输入一个汉字“人”,让它输出下一个字是什么,此时5000个字每个字都有成为下一个字的可能(即概率),且每个字的概率值不同,所有字的概率之和为100%。输入的字越多,它输出下一个字的准确性会越高,比如输入“人类简”,下一个字的范围就被大大缩小(比如“史”、“介”、“要”、“值”……这些字的概率就会远大于其他字),又比如输入“我想阅读的书的名字叫《人类简”,此时下一个字是“史”的概率就非常大了。
当我们给小白输入一个问题时,它开始回答输出第1个字,然后把这个字和用户的问题一起打包再返回给小白,小白把这个打包的整体当成一个问题继续输出第2个字,依次类推,直到输出最后一个字。
这里有个问题,小白怎么判断回答完毕了呢?
它在训练阶段会把所有的标点符号都当成一个特殊的字进行处理,也定义了开始符和结束符,同时也把开始符和结束符当成特殊的字进行处理,只不过开始符和结束符用户是不会输出给用户的。所以当输出“结束符”时,就回答完了。
(因为在训练阶段,喂给小白的文字资料里,每个句子,每段话,哪里用的是什么标点符合,以及句子怎么开始的,怎么结束的,这些都是客观存在的,所以可以把它们看成一种特殊的字让小白学会)
所以不论哪个大模型,在输出回答时都是一个字一个字的往外蹦,并且同一个问题每次的回答都不一样,根本原因是大模型的本质是一个概率输出机器,正因为这样,所以大模型才会有幻觉,才会在有些时候没有依据的胡编乱造,没办法,当遇到训练阶段它没有学习到的东西时,它就没有办法让本应是相对正确的“下一个字”输出,而输出了那个看似幻觉的“下一个字”。
正因为大模型是个概率机器,所以它是不知道时间,不知道空间位置,不知道天气的。比如你问大模型,今天天气如何?它无法回答你,因为它不知道今天是哪天,也不知道你要问哪里的天气,它也没法知道你当前在哪。
那有人会问了,不对呀,我问DeepSeek今天天气时,它就能告诉我今天的天气啊。
那是因为我们用的这个DeepSeek是在DeepSeek大模型(不选深度思考时连接V3,选择的话连接R1)的基础上封装的一个应用产品,已经不只是一个大模型了,它在回答天气时,是大模型让这个产品去调用了某个“日期”,“天气“相关的API或插件等等。
实际的训练的过程大概是这样:假设小白获取到的所有汉字资料加起来共有7.5万亿个汉字,将这7.5万亿个汉字按20000个字为单位,共切成3.75亿个段落。每个段落都会找小白说,你赶紧把我训练聪明点-让我理解我的这20000个字组成的段落是什么意思吧。
这样经过一轮轮迭代训练,每个段落就逐渐理解了自己的段落的意思了。
这里有个词叫“段落联合概率”:段落的20000字,每个字都有一个输出概率,20000个字每个字的概率相乘就是段落联合概率,训练每个段落的目的就是提升每个段落的段落联合概率,只有这个概率足够高,小白才能足够理解段落所表示的含义。那这里会有3.75亿个段落联合概率,每个段落都去找小白要求训练自己,小白感到压力山大。因为训练的目的是提升小白的能力,它不可能让每个段落联合概率都提升。于是就它就规定了一个综合不满意度,也就是把所有段落看成一个整体,现在的训练目标就变成了降低这个综合不满意度(每个段落的不满意度的综合值,训练过程中,有的段落的段落联合概率会变低及不满意度会变高,但只有综合不满意度是提升的,小白就是在进步的),那么小白理解人类语言的能力就会提升。(这里的综合不满意度在训练里叫作损失函数。通过调参降低损失函数的过程叫作梯度下降。训练过程中所用的方法是神经网络。训练过程中的绝大部分参数都在神经网络阶段)。
大模型每完成1次训练称作Epoch(轮次/周期)-表示模型在训练过程中完整遍历整个训练数据集1次。实际的大模型训练过程需要完成多次Epoch,为什么要进行多次呢?
- 学习更充分:模型需要多次接触数据才能捕捉复杂模式(尤其深层神经网络)。好比我们常说的“你到底几个意思”,就是说一句话经常会包含不止1个意思,大模型如果只1次Epoch,则会漏掉很多意思。
- 避免欠拟合:单个Epoch可能不足以让模型学到有效特征。
- 梯度优化:通过多次更新参数逐步逼近最优解(类似下山需要多步-梯度下降是个很复杂的过程)。
就好比我们正在复习准备考试:
- 训练数据:课本内容
- Epoch:从头到尾完整复习一遍课本
- 多个Epoch:反复复习同一课本多次,直到知识点全部掌握
这里还有个词叫Batch(批次)-可类比课本的章节,是指由于待训练的数据集太大,模型很能一次性学习所有数据,所以需要拆分来训练(一章一章的学,当然实际上大模型是并行训练的,而人类是串行学习的),比如上面提到的3.75亿个段落,就是3.75亿Batch。每训练1个Batch,就表示1次调参的过程,每次调参,可理解为控制让其中1个参数变化,其他所有参数都不变,看这个可变参数(被调参数)是增大还是减小能使当前Batch的段落联合概率提升(即使整体那个损失函数降低-梯度下降)。
以此方法,把当前Epoch里的所有参数全部调1遍。这个过程相当于“复习课本的第1个章节-做题“的过程,这一过程我们逐渐背下了很多知识点很多题目的答案,做题出错率自然就会降低-损失函数降低,但是,这就代表我们一定能考得好吗?肯定不是,考试题目大概率是课本上没有的,所以要想验证我们是否真的掌握了这一章节的内容,还需要通过考试来验证,大模型训练也是,调完参数后,需要验证集数据进行验证,如果“验证损失函数“值也下降,说明本轮训练参数有效,可以继续调参。
实际训练过程中:
Epoch数量的选择:
太少:模型未收敛(欠拟合)
比如图像分类任务中,5个Epoch可能只能达到60%准确率
太多:过拟合
比如100个Epoch后训练集准确率90%,但验证集准确率下降
如何避免:通过验证集监控,使用早停法(Early Stopping)
曲线观测:
理想情况:训练损失下降,验证损失也下降,则继续训练
过拟合信号:训练损失下降,验证损失上升,则停止训练
比如:备考数学,刷了1000道练习题,都背下了,训练损失下降,真正考试时,遇到同知识点的新题,不会了,验证损失上升—过拟合,实际硬背下了1000题的答案,但没理解解题方法。
过拟合可理解为模型过于复杂了,记忆力太强了,比如记下了图片中的噪点,把噪点也当做分类特征了。
到这里,这个被训练过的小白就已经是一个很熟悉人类语言的模型了,它“阅读”了大量的人类资料,语言能力与人类相近,只要给出一些初始文字,猜下一个字的能力与人类差不多。
但,此时它还不会“做任务”。这就好比一个人上了学学了很多知识,但你让他去完成一件具体“工作”,他还是不会的,比如实习生,刚开始工作时需要有人带,教他该怎么做。因为在预训练阶段LLM只是“阅读”了大量人类资料,它并没有经过“任务”训练(SFT阶段-这里先不展开)。它只是理解了人类文字,但还不会做“任务”-不会回答问题(只会“接话茬”)。好比一个人毕业了,但此时他还没有工作的能力。需要实习,实习的过程可看作SFT。
本文由 @弋十三 原创发布于人人都是产品经理,未经许可,禁止转载。
题图来自 Unsplash,基于 CC0 协议。
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
明白了,大模型的学习过程需要海量数据和复杂计算,其掌握语言的能力真的令人惊叹。