LLM怎么知道自己应该输出什么?

大模型的工作原理可以总结为一个字, 就是 "猜"

LLM 最核心、最基础的任务: 给 "我" 一段文字 (上下文),"我" 猜出下一个最有可能 / 最应该出现的字

其实本质就是通过了大量训练后,"我" 根据这段文字判断出最应该 / 最高频出现 (当然为了避免过于死板, 不是一定会选择概率最高的词, 而是从概率高的词里面随机选一个, 至于随机的概率则可以调控) 在这段文字后面的字是哪个, 然后输出出来

比如

  1. 你给了海量的关于"吃饭"和"肚子饿"的对话来对我进行训练,比如<"你饿了?"、"我还没"><"你吃了吗?"、"我刚准备做饭">
  2. 然后你给我一段文字"你饿了吗?"
  3. 通过之前喂给我的数据,我推断出这段文字后面应该出现(或者说最高频出现)的字是"我"
  4. 在输出了"我"字之后,我会继续判断"我"字后面最应该出现的是"吃"/"还"字
  5. 最后可能会得出"我饿了,你呢?"或者"我还没饿"或者其他,根据训练效果可能每次输出会相同或者不同

其实大模型不知道自己为什么应该输出这个字, 一开始它压根就不知道应该输出什么而乱输出一通

它会输出这个字是完全因为我们筛选出了 < 问它 "你饿了吗?", 它能回答 "我饿了, 你呢?"> 的那个它


LLM是怎么学会"猜"的?

海量阅读数据

  1. 给LLM大量文本(书籍、文章、代码、对话等等),数量达到TB/PB级别
  2. LLM不是在尝试"理解"这些内容,而是根据这些内容寻找词语之间搭配的规律和统计这些规律的概率

疯狂训练

训练的核心: 遮住一部分, 让它猜。就是我们做的 "完形填空"

具体操作:

  1. 从海量文本随机截取一段句子,比如"人工智能正在改变世界"
  2. 遮住一个词,比如遮住"改变",变成"人工智能正在[mask]世界"
  3. 让模型猜被遮住的词是什么,刚一开始肯定是瞎猜
  4. 揭晓答案,然后调整模型内部的参数和权重。猜错了就调一点,猜对了也微调一下让它下次猜对的概率更高

重复亿万次: 用海量的句子进行上述训练, 然后对模型内部参数和权重进行微调, 重复这个过程亿万次, 训练时间可能长达数天或数月。模型在这过程中就学会了在特定的上下文中知道了什么时候应该输出哪个字


上下文和词之间的关系(Transformer)

猜下一个词不能只看前一个词。"苹果很好吃"、"苹果发布新手机了", 虽然同样是 "苹果", 但下一个词完全不同。Transformer 的自注意力机制能分辨出第一个 "苹果" 和 "好吃" 关系紧密, 第二个 "苹果" 和 "发布"、"手机" 关系紧密。

GPT(Generative Pre-trained Transformer, 生成式预训练的 Transformer 模型) 中的T 就是 Transformer

在 Transformer 出来之前, 领域在用的是循环神经网络 RNN(Recurrent Neural Network),RNN 设计思想是一个词一个词的阅读并处理, 所以很容易造成忘记开头说了啥的问题 ("长期依赖" 问题), 而且只能按顺序读, 不能跳着看 (难做并行计算)

Transformer 的思想则是扫描整个上下文, 瞬间分析上下文的每个词和其他所有词之间的关系。不是按顺序读, 而是同时关注所有词, 找出谁和谁联系紧密


自注意力机制Self-Attention

通过 Attention, 把原来要关注全部信息优化成只关注重点信息。就像人看照片一样, 不会关注所有细节, 只会关注某些部分

可以理解成

  • "找关系"游戏: 对于上下文的每一个词,Transformer都会问:"上下文中其他所有词对我理解这个词有多重要?"
  • "重要性"打分: 给上下文的其他词都打一个"重要性"分数。分数高的词,对理解当前词就跟关键

自注意力机制执行并不是只有一次, 而是多次执行这个机制, 这就是多头注意力 (Multi-Head Attention)


Transformer执行流程

输入嵌入 (Input Embedding): 把每个词 / 字转换成数字向量 (一串数字), 相当于给每个词颁发一个 "身份证号"

位置编码 (Positional Encoding): Transformer 是同时看所有词的, 词的顺序互换的意思也会不一样 ("猫追老鼠" 和 "老鼠追猫"), 所以需要给每个词标注位置顺序信息, 相当于给每个词加上 "座位号"

编码器 (Encoder):

  • 核心: 多头自注意力层(Multi-Head Attention): 同时执行多次,每次关注不同方面的关系(一次关注"谁在做什么"、一次关注"在哪做什么"...),然后把结果合并起来,这样更能全面理解词与词之间的关系
  • 前馈神经网络层(Feed Forward): 基于自注意力层得到的关系信息对每个词单独进行复杂处理(大概就是词与词之间建立连接,形成单向无环图)
  • 残差连接&层归一化(Add & Norm): 主要是让训练更稳定、更容易,相当于在计算过程中加一些"稳定器"和"平衡器"

编码器层会堆叠很多层, 每一层都会让模型对输入的理解更深入一点

解码器 (Decoder):

  • 多头自注意力层: 但关注的是已经生成出来的部分
  • 解码器-解码器注意力层: 解码器会在生成下一个词时,回头看编码器对输入的理解结果(比如源语言句子),并决定输入中的哪些部分对生成当前词最重要,就像写作文根据题目要求(编码器结果)来构思下一句
  • 前馈神经网络层、残差连接&层归一化

解码器同样会堆叠很多层

输出: 解码器会把生成的当前词作为输入的一部分来预测生成下一个词, 直到生成完整输出


Transformer的优势

Transformer = 同时看所有词 + 计算词与词之间的关系 (自注意力)+ 多层深入理解

并行计算能力强: 同时处理所有词, 不需要像 RNN 一样顺序读, 可以并行读和处理

处理长距离依赖: 自注意力机制让模型直接关注到词与词之间的关系, 无论它们距离有多远, 解决了 RNN 记不住开头的问题

效果好: 各种自然语言处理任务 (翻译、问答、摘要、文本生成等) 上, 效果大幅超越之前的模型

大模型基石: 现代 AI 语言模型都是基于 Transformer。ChatGPT 的核心就是 Transformer 的解码器部分。