目录
- [1. 前言:它为什么能"听懂"人话?](#1. 前言:它为什么能"听懂"人话?)
- [2. 什么是大语言模型?](#2. 什么是大语言模型?)
- [3. 整体流程:一张图看懂](#3. 整体流程:一张图看懂)
- [4. 分词器:把语言变成"数字钥匙"](#4. 分词器:把语言变成"数字钥匙")
- [5. 嵌入与位置编码:让数字带上"含义"和"位置"](#5. 嵌入与位置编码:让数字带上"含义"和"位置")
- [6. Transformer:模型的大脑](#6. Transformer:模型的大脑)
- [6.1 自注意力机制:让"I"想起"am"](#6.1 自注意力机制:让"I"想起"am")
- [6.2 多头注意力:从不同角度理解](#6.2 多头注意力:从不同角度理解)
- [6.3 前馈网络:非线性变换](#6.3 前馈网络:非线性变换)
- [7. 训练过程:从"白纸"到"通才"](#7. 训练过程:从"白纸"到"通才")
- [7.1 预训练:海量数据中学习语言规律](#7.1 预训练:海量数据中学习语言规律)
- [7.2 指令微调与人类对齐:让模型学会"听话"](#7.2 指令微调与人类对齐:让模型学会"听话")
- [8. 推理过程:一个字一个字"吐"出答案](#8. 推理过程:一个字一个字"吐"出答案)
- [9. 为什么 LLM 会"犯错"?](#9. 为什么 LLM 会"犯错"?)
- [10. 总结与展望](#10. 总结与展望)
1. 前言:它为什么能"听懂"人话?
你有没有想过,当你向 ChatGPT 提问时,它到底是怎么"理解"你的问题,又是怎么组织出那些看起来像模像样的回答的?它真的在思考吗?还是说,它只是某种超级复杂的"鹦鹉学舌"?
在这篇文章里,我们就用尽可能通俗的方式,把大语言模型(LLM)的工作流程拆开来看一看。从你输入一句话,到屏幕上出现第一个字,再到几千字的回答生成完毕,这中间到底发生了什么?
2. 什么是大语言模型?
首先,大语言模型(Large Language Model,LLM)本质上是一个"预测下一个词"的概率模型。听起来很无聊?但正是这个简单到不可思议的目标,加上海量的数据、巨大的参数量和精巧的模型结构,催生出了我们看到的"智能"。
它的核心任务可以概括为:给定一段文本,预测下一个最可能出现的 token。
这里的"token"很重要,它不一定是完整的单词,更多的是一个词根、一个标点或一个中文字符。比如"我喜欢吃苹果"可能会被切分成 ["我", "喜欢", "吃", "苹果"] 这样的 token 序列。
3. 整体流程:一张图看懂
在深入细节之前,我们先看一张 LLM 的宏观工作流程图:
#mermaid-svg-07vjK0ye3GKYZT4f{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-07vjK0ye3GKYZT4f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-07vjK0ye3GKYZT4f .error-icon{fill:#552222;}#mermaid-svg-07vjK0ye3GKYZT4f .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-07vjK0ye3GKYZT4f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-07vjK0ye3GKYZT4f .marker{fill:#333333;stroke:#333333;}#mermaid-svg-07vjK0ye3GKYZT4f .marker.cross{stroke:#333333;}#mermaid-svg-07vjK0ye3GKYZT4f svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-07vjK0ye3GKYZT4f p{margin:0;}#mermaid-svg-07vjK0ye3GKYZT4f .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-07vjK0ye3GKYZT4f .cluster-label text{fill:#333;}#mermaid-svg-07vjK0ye3GKYZT4f .cluster-label span{color:#333;}#mermaid-svg-07vjK0ye3GKYZT4f .cluster-label span p{background-color:transparent;}#mermaid-svg-07vjK0ye3GKYZT4f .label text,#mermaid-svg-07vjK0ye3GKYZT4f span{fill:#333;color:#333;}#mermaid-svg-07vjK0ye3GKYZT4f .node rect,#mermaid-svg-07vjK0ye3GKYZT4f .node circle,#mermaid-svg-07vjK0ye3GKYZT4f .node ellipse,#mermaid-svg-07vjK0ye3GKYZT4f .node polygon,#mermaid-svg-07vjK0ye3GKYZT4f .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-07vjK0ye3GKYZT4f .rough-node .label text,#mermaid-svg-07vjK0ye3GKYZT4f .node .label text,#mermaid-svg-07vjK0ye3GKYZT4f .image-shape .label,#mermaid-svg-07vjK0ye3GKYZT4f .icon-shape .label{text-anchor:middle;}#mermaid-svg-07vjK0ye3GKYZT4f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-07vjK0ye3GKYZT4f .rough-node .label,#mermaid-svg-07vjK0ye3GKYZT4f .node .label,#mermaid-svg-07vjK0ye3GKYZT4f .image-shape .label,#mermaid-svg-07vjK0ye3GKYZT4f .icon-shape .label{text-align:center;}#mermaid-svg-07vjK0ye3GKYZT4f .node.clickable{cursor:pointer;}#mermaid-svg-07vjK0ye3GKYZT4f .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-07vjK0ye3GKYZT4f .arrowheadPath{fill:#333333;}#mermaid-svg-07vjK0ye3GKYZT4f .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-07vjK0ye3GKYZT4f .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-07vjK0ye3GKYZT4f .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-07vjK0ye3GKYZT4f .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-07vjK0ye3GKYZT4f .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-07vjK0ye3GKYZT4f .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-07vjK0ye3GKYZT4f .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-07vjK0ye3GKYZT4f .cluster text{fill:#333;}#mermaid-svg-07vjK0ye3GKYZT4f .cluster span{color:#333;}#mermaid-svg-07vjK0ye3GKYZT4f div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-07vjK0ye3GKYZT4f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-07vjK0ye3GKYZT4f rect.text{fill:none;stroke-width:0;}#mermaid-svg-07vjK0ye3GKYZT4f .icon-shape,#mermaid-svg-07vjK0ye3GKYZT4f .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-07vjK0ye3GKYZT4f .icon-shape p,#mermaid-svg-07vjK0ye3GKYZT4f .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-07vjK0ye3GKYZT4f .icon-shape .label rect,#mermaid-svg-07vjK0ye3GKYZT4f .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-07vjK0ye3GKYZT4f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-07vjK0ye3GKYZT4f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-07vjK0ye3GKYZT4f :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
用户输入提示词
分词器(Tokenizer)
token序列
嵌入层(Embedding) + 位置编码
Transformer 层堆叠(×N)
输出层(Linear + Softmax)
预测下一个 token
是否结束?
将预测 token 追加到序列
结束生成,输出完整回答
接下来,我们就沿着这张图,把每一步拆开讲清楚。
4. 分词器:把语言变成"数字钥匙"
计算机不能直接理解文字,它只能处理数字。分词器(Tokenizer) 的工作就是把一句自然语言切成一个个 token,然后映射到模型词汇表中的整数 ID。
比如,句子 "Hello, world!" 在 GPT 的分词中可能被切为:
["Hello", ",", " world", "!"]
每个 token 对应一个唯一的数字 ID,比如 [15496, 11, 995, 0]。这些数字就是模型"看到"的输入。
5. 嵌入与位置编码:让数字带上"含义"和"位置"
光有 token ID 还不够,模型需要知道每个 token 的语义,更需要知道它们在句子中的顺序。
- 嵌入层(Embedding):把一个 token ID 映射成一个高维向量(例如 768 维或 4096 维)。这个向量可以理解为这个 token 的"语义指纹"。
- 位置编码(Positional Encoding):向这些向量中注入位置信息。因为 Transformer 模型本身是并行处理的,不像 RNN 那样天然有顺序,所以必须显式告诉模型"这个 token 是句子里的第几个"。
经过这一步,我们得到了一串带有位置信息的向量,它们就是 Transformer 的输入。
6. Transformer:模型的大脑
Transformer 是当今 LLM 的核心架构,它主要由多头注意力(Multi-Head Attention) 和前馈网络(Feed-Forward Network) 交替堆叠而成。
#mermaid-svg-Afzduj3vjq4TC8FF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Afzduj3vjq4TC8FF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Afzduj3vjq4TC8FF .error-icon{fill:#552222;}#mermaid-svg-Afzduj3vjq4TC8FF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Afzduj3vjq4TC8FF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Afzduj3vjq4TC8FF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Afzduj3vjq4TC8FF .marker.cross{stroke:#333333;}#mermaid-svg-Afzduj3vjq4TC8FF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Afzduj3vjq4TC8FF p{margin:0;}#mermaid-svg-Afzduj3vjq4TC8FF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Afzduj3vjq4TC8FF .cluster-label text{fill:#333;}#mermaid-svg-Afzduj3vjq4TC8FF .cluster-label span{color:#333;}#mermaid-svg-Afzduj3vjq4TC8FF .cluster-label span p{background-color:transparent;}#mermaid-svg-Afzduj3vjq4TC8FF .label text,#mermaid-svg-Afzduj3vjq4TC8FF span{fill:#333;color:#333;}#mermaid-svg-Afzduj3vjq4TC8FF .node rect,#mermaid-svg-Afzduj3vjq4TC8FF .node circle,#mermaid-svg-Afzduj3vjq4TC8FF .node ellipse,#mermaid-svg-Afzduj3vjq4TC8FF .node polygon,#mermaid-svg-Afzduj3vjq4TC8FF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Afzduj3vjq4TC8FF .rough-node .label text,#mermaid-svg-Afzduj3vjq4TC8FF .node .label text,#mermaid-svg-Afzduj3vjq4TC8FF .image-shape .label,#mermaid-svg-Afzduj3vjq4TC8FF .icon-shape .label{text-anchor:middle;}#mermaid-svg-Afzduj3vjq4TC8FF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Afzduj3vjq4TC8FF .rough-node .label,#mermaid-svg-Afzduj3vjq4TC8FF .node .label,#mermaid-svg-Afzduj3vjq4TC8FF .image-shape .label,#mermaid-svg-Afzduj3vjq4TC8FF .icon-shape .label{text-align:center;}#mermaid-svg-Afzduj3vjq4TC8FF .node.clickable{cursor:pointer;}#mermaid-svg-Afzduj3vjq4TC8FF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Afzduj3vjq4TC8FF .arrowheadPath{fill:#333333;}#mermaid-svg-Afzduj3vjq4TC8FF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Afzduj3vjq4TC8FF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Afzduj3vjq4TC8FF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Afzduj3vjq4TC8FF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Afzduj3vjq4TC8FF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Afzduj3vjq4TC8FF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Afzduj3vjq4TC8FF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Afzduj3vjq4TC8FF .cluster text{fill:#333;}#mermaid-svg-Afzduj3vjq4TC8FF .cluster span{color:#333;}#mermaid-svg-Afzduj3vjq4TC8FF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Afzduj3vjq4TC8FF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Afzduj3vjq4TC8FF rect.text{fill:none;stroke-width:0;}#mermaid-svg-Afzduj3vjq4TC8FF .icon-shape,#mermaid-svg-Afzduj3vjq4TC8FF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Afzduj3vjq4TC8FF .icon-shape p,#mermaid-svg-Afzduj3vjq4TC8FF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Afzduj3vjq4TC8FF .icon-shape .label rect,#mermaid-svg-Afzduj3vjq4TC8FF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Afzduj3vjq4TC8FF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Afzduj3vjq4TC8FF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Afzduj3vjq4TC8FF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Transformer 层 (×N)
多头自注意力(Multi-Head Self-Attention)
残差连接 + 层归一化
前馈网络(Feed-Forward)
残差连接 + 层归一化
输入序列向量
更丰富的上下文向量
6.1 自注意力机制:让"I"想起"am"
自注意力(Self-Attention) 是 Transformer 的灵魂。它的作用就是让当前的 token 去"看"句子中所有的 token,并计算出一个权重,表示"我该关注谁"。
比如在句子 "The cat sat on the mat because it was tired" 中,当模型处理到 "it" 时,它需要知道 "it" 指的是 "cat" 还是 "mat"。自注意力机制会通过计算 "it" 与 "cat"、"mat" 之间的关联分数,最终让 "cat" 获得更高的权重,从而消解歧义。
计算过程可以简化为:每个 token 都会生成三个向量------Query(查询)、Key(键)和 Value(值)。通过 Query 和所有 Key 的点积,就能得到注意力权重,再用这些权重对 Value 加权求和,就得到了当前 token 的"上下文感知"表示。
6.2 多头注意力:从不同角度理解
多头注意力(Multi-Head Attention) 就是同时做多组不同的注意力计算,让模型可以关注到不同位置、不同语义层面的信息。比如一个头关注语法关系,另一个头关注指代消解,还有一个头关注局部搭配。
6.3 前馈网络:非线性变换
注意力层拿到上下文信息后,会交给一个前馈神经网络(Feed-Forward Network) 做一次非线性的特征变换,增强模型的表达能力。然后,通过残差连接(Residual Connection) 和层归一化(Layer Normalization) 来稳定训练,防止梯度消失。
7. 训练过程:从"白纸"到"通才"
一个 LLM 通常要经历两个阶段的训练:
7.1 预训练:海量数据中学习语言规律
预训练(Pre-training) 阶段,模型在海量的互联网文本、书籍、代码等数据上,用"预测下一个 token"这个任务进行训练。这个阶段会让模型学会语法、常识、推理能力等,但此时的模型只是一个"文档补全器",你问它问题,它可能只会把问题补全成一段话,而不是给出一个有用的回答。
7.2 指令微调与人类对齐:让模型学会"听话"
为了让模型真正成为助手,我们需要进行指令微调(Instruction Tuning) 和基于人类反馈的强化学习(RLHF)。在这个阶段,我们给模型看大量高质量的"指令-回答"对,并让人类对模型的回答进行排序,训练一个奖励模型,再用强化学习去优化模型。经过对齐后,模型就学会了"回答问题"的模式,而不是单纯地补全文本。
8. 推理过程:一个字一个字"吐"出答案
当你向训练好的 LLM 提问时,它是如何生成回答的呢?
采用的是自回归(Autoregressive) 生成方式:模型每次只预测下一个 token,然后将这个 token 拼接到输入序列末尾,再对新的序列预测下一个 token,如此循环,直到预测出特殊的结束 token(如 <eos>)或达到最大长度。
#mermaid-svg-JfJ7Gy0k23q8doAh{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JfJ7Gy0k23q8doAh .error-icon{fill:#552222;}#mermaid-svg-JfJ7Gy0k23q8doAh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JfJ7Gy0k23q8doAh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JfJ7Gy0k23q8doAh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JfJ7Gy0k23q8doAh .marker.cross{stroke:#333333;}#mermaid-svg-JfJ7Gy0k23q8doAh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JfJ7Gy0k23q8doAh p{margin:0;}#mermaid-svg-JfJ7Gy0k23q8doAh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh .cluster-label text{fill:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh .cluster-label span{color:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh .cluster-label span p{background-color:transparent;}#mermaid-svg-JfJ7Gy0k23q8doAh .label text,#mermaid-svg-JfJ7Gy0k23q8doAh span{fill:#333;color:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh .node rect,#mermaid-svg-JfJ7Gy0k23q8doAh .node circle,#mermaid-svg-JfJ7Gy0k23q8doAh .node ellipse,#mermaid-svg-JfJ7Gy0k23q8doAh .node polygon,#mermaid-svg-JfJ7Gy0k23q8doAh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JfJ7Gy0k23q8doAh .rough-node .label text,#mermaid-svg-JfJ7Gy0k23q8doAh .node .label text,#mermaid-svg-JfJ7Gy0k23q8doAh .image-shape .label,#mermaid-svg-JfJ7Gy0k23q8doAh .icon-shape .label{text-anchor:middle;}#mermaid-svg-JfJ7Gy0k23q8doAh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JfJ7Gy0k23q8doAh .rough-node .label,#mermaid-svg-JfJ7Gy0k23q8doAh .node .label,#mermaid-svg-JfJ7Gy0k23q8doAh .image-shape .label,#mermaid-svg-JfJ7Gy0k23q8doAh .icon-shape .label{text-align:center;}#mermaid-svg-JfJ7Gy0k23q8doAh .node.clickable{cursor:pointer;}#mermaid-svg-JfJ7Gy0k23q8doAh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JfJ7Gy0k23q8doAh .arrowheadPath{fill:#333333;}#mermaid-svg-JfJ7Gy0k23q8doAh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JfJ7Gy0k23q8doAh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JfJ7Gy0k23q8doAh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JfJ7Gy0k23q8doAh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JfJ7Gy0k23q8doAh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JfJ7Gy0k23q8doAh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JfJ7Gy0k23q8doAh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JfJ7Gy0k23q8doAh .cluster text{fill:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh .cluster span{color:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JfJ7Gy0k23q8doAh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JfJ7Gy0k23q8doAh rect.text{fill:none;stroke-width:0;}#mermaid-svg-JfJ7Gy0k23q8doAh .icon-shape,#mermaid-svg-JfJ7Gy0k23q8doAh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JfJ7Gy0k23q8doAh .icon-shape p,#mermaid-svg-JfJ7Gy0k23q8doAh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JfJ7Gy0k23q8doAh .icon-shape .label rect,#mermaid-svg-JfJ7Gy0k23q8doAh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JfJ7Gy0k23q8doAh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JfJ7Gy0k23q8doAh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JfJ7Gy0k23q8doAh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入: 今天天气
模型预测: 真
新序列: 今天天气真
模型预测: 好
新序列: 今天天气真好
模型预测:
生成结束
每一步预测时,模型会输出一个在所有词汇表上的概率分布,我们通常会选择概率最高的 token(贪心解码),或者引入一些随机性(如 top-p 采样、温度调节)来让回答更多样化。
9. 为什么 LLM 会"犯错"?
了解了原理,也就能理解 LLM 的一些局限:
- 幻觉(Hallucination):因为模型本质上是在做概率预测,而不是查询知识库,所以它可能会编造出看起来合理但完全虚构的事实。
- 上下文窗口限制:尽管现在的模型上下文窗口已经很长(几十万 token),但超出窗口的内容会被遗忘。
- 缺乏真正的理解:模型没有意识,也不具备真正的逻辑推理能力,它只是一个复杂的模式匹配器。
- 偏见:训练数据中的偏见会被模型学到并放大。
10. 总结与展望
LLM 的工作原理可以浓缩为一句话:一个用海量数据训练出来的、基于 Transformer 架构的、以预测下一个 token 为目标的巨型概率模型,再经过指令微调和人类对齐,最终展现出了惊人的语言生成能力。
它没有"灵魂",但它的确在很多任务上表现得像拥有了灵魂。未来,随着多模态(文本+图像+音频)、工具调用、长程记忆等能力的持续进化,LLM 会变得更加实用和强大。
希望这篇文章能帮你揭开 LLM 神秘面纱的一角,让你下次再和 ChatGPT 聊天时,能对"它"的内心世界多一份理解。