☰
大模型底层原理:从Token到Transformer的完整拆解
2026/10/21 17:08:10 网站建设 项目流程

这年头,只要打开手机,几乎到处都能看到"大模型"这三个字。你可能用过各种AI助手,让它写文案、改代码、解释一道数学题,甚至陪你聊天解闷。但很多人心里其实一直有个疙瘩:这东西到底是怎么工作的?为什么它好像什么都懂,有时候又错得离谱?网上讲大模型底层原理的文章不少,可绝大多数要么堆满公式,要么只讲概念,看完了还是云里雾里。

这篇文章想做的事很简单:把大模型的底层原理当成一台机器的说明书来拆,用最直白的人话,配合一些能上手算的小例子,把从"输入一句话"到"输出一段回答"的完整过程讲清楚。不管你是完全没接触过AI的文科生,还是刚入门想搞懂技术细节的开发者,这篇文章都值得花十几分钟慢慢看。看完之后,你再看到"Token""Transformer""注意力机制""微调"这些词,就不会再觉得它们是什么高深莫测的黑话了。

1. 大模型的本质:一台庞大的"猜词游戏"机器

先放下所有复杂的术语,记住一句话:大模型本质上就是一个极其庞大的"猜词游戏"机器。你给它前半句话,它负责猜下一个最可能出现的词是什么。就这么简单。

1.1 语言模型的真正任务:预测下一个词

你可能觉得这个说法太轻描淡写了,但事实就是这样。2018年前后的第一代大规模语言模型,核心训练任务就是"根据前面的文字预测下一个词"。比如你给它"今天天气真",它会根据海量文本中学到的规律,算出下一个字是"好"的概率最大。这个任务听起来幼稚,但当训练文本达到数十亿甚至数万亿字的规模后,一件神奇的事情发生了:为了做好"猜词"这个简单任务,模型不得不把语法、逻辑、常识、各领域知识全部压缩进参数里。

你可以把大模型想象成一个看过全世界所有书籍的人。他并没有刻意去背每本书的内容,但他通过反复做"填空练习",把语言的使用规律深深印在了脑子里。这个"猜词"任务,就是整个大模型的立身之本。

1.2 一次推理的完整链路:模型内部做了什么

当你向大模型提问时,它内部执行的过程可以拆成五步:

  1. 把你输入的文本拆成一串"Token"(可以暂时理解为"词的碎片")。
  2. 把这串Token转换成数字向量表示。
  3. 让这串数字向量流经数十层"Transformer层",每层都在重新计算词与词之间的关系。
  4. 在最后一层输出一个概率表,给出词表中每个词作为"下一个词"的概率。
  5. 根据概率,用一定的策略挑一个词输出,然后把这个词拼到原文后面,再重复第3到第5步,直到输出结束。

这个过程就是"自回归生成":一个词接一个词地往后猜。你看到的几百字回答,其实是模型循环了几百次"猜词"的结果。

提示:很多新闻里说某某模型有"几百亿参数",参数可以粗略理解为模型的"脑细胞连接数"。参数越多,模型能记住的规律就越复杂,但也意味着训练成本和使用门槛越高。

2. 从文字到数字:Tokenizer与Embedding的底层拆解

大模型是跑在计算机上的,而计算机只认识数字,不认识汉字和英文单词。所以第一步必须解决"怎么把文字变成数字"的问题。

2.1 为什么必须先分词:稀疏与稠密的差别

在深度学习早期,研究者确实试过把每个汉字或英文单词用一个"独一无二的编号"来表示,比如"我"是1号、"爱"是2号。但这种表示方式有个严重的问题:编号之间没有大小关系,"爱"是2、"恨"是3,但它们在语义上根本不是"差一点"的关系。而且词表可能达到几十万个,每个词用一个几十万维的稀疏向量表示,计算量巨大到无法训练。

解决办法就是引入"词嵌入"(Embedding)技术:把每个Token映射到一个低维的稠密向量里,比如常见模型用768维或4096维。在这个向量空间里,语义相近的词会落在彼此靠近的位置。"苹果"和"香蕉"会很近,而"苹果"和"火箭"会离得很远。这种从离散符号到连续向量的转换,是深度学习能处理自然语言的前提。

2.2 三类主流分词方法:从整词到子词

现在的主流大模型基本都不再用"整词"作为基本单位,而是用"子词"(Subword)。原因很简单:整词词表需要覆盖所有单词,太大;而把词拆成更小的片段后,模型可以通过组合字母片段的方式来理解生词。

最常见的分词方法有三种,它们的核心逻辑各不相同:

分词方法核心逻辑代表应用特点
BPE(字节对编码)从字母/字节级别开始,反复合并出现频率最高的相邻字符对GPT系列词表大小可控,适合英文等多语言
WordPiece类似BPE,但合并依据是"让语言模型整体概率提升最多"BERT对词根和常见后缀的切分更精细
SentencePiece把空格也当作普通字符处理,直接对原始文本切分很多多语言模型不需要预分词,对中文、日文更友好

以BPE为例,假设语料里经常出现"low"和"lower"这两个词,分词器会先把"low"作为一个整体token保存,遇到"lower"时切分为"low"+"er"。这样做的好处是:模型只用较小的词表,就能覆盖几乎所有的词形变化,遇到没见过的拼写(比如新造的合成词),也能拆成见过的子词组合来理解。

2.3 嵌入矩阵:每个Token出生时"自带"的一串数字

当Token确定后,模型会去查一张"嵌入表"(Embedding Matrix)。这张表本质上就是一个大矩阵,行数是词表大小,列数是设定的向量维度。比如词表有5万个Token,向量维度为4096,这张表就有5万乘4096个数。

每个Token在这张表里对应的那一行向量,就是这个Token最初的特征表示。在模型的训练过程中,这张表会不断被更新,让每个Token的向量位置逐渐反映出它在海量语料中的使用习惯。

我第一次自己训练一个小型语言模型时,打印过几个词的嵌入向量的余弦相似度,发现"猫"和"狗"的相似度高达0.8以上,而"猫"和"编程"几乎不相关。那一刻我才真正感受到,Embedding不是人为设计的规则,而是模型从数据里自己"长"出来的语义地图。

3. 自注意力机制:模型如何真正"读懂"一句话

光有数字向量还不够。句子里的每个词不是孤立存在的,意思要结合上下文才能确定。比如"他拍了拍那个人的肩膀,因为他觉得冷"——这里的"他"到底指谁?人一眼就能明白,但计算机怎么做到呢?答案就是Transformer的核心组件:自注意力机制(Self-Attention)。

3.1 为什么每个词不能"孤立地看":循环网络的困境

在Transformer之前,主流处理序列的方式是循环神经网络(RNN)。RNN的思路是把句子从左到右逐个词处理,每处理一个新词时,携带上一个词留下的"记忆"。但RNN有个致命弱点:随着句子变长,早期信息会逐渐被遗忘。你给它读一篇500字的文章,它可能已经忘了第10个字是什么了。解决长距离依赖问题对RNN来说非常困难。

Transformer用自注意力机制彻底抛弃了"逐个处理"的思路。它的做法是:让句子里的每一个词,同时与句子里的所有词进行交互,直接计算它们之间的关联程度。这样一来,句子首尾的单词可以"直连",不再需要层层传递。

3.2 QKV三分量:一场图书馆里的高效检索

自注意力机制的实现涉及三个基本向量,它们分别叫Query(查询)、Key(键)、Value(值)。为了理解这三者,你可以想象自己去图书馆找书的过程:

  • Query就是你脑子里想找的主题,比如"如何做红烧肉"。
  • Key是每本书封面上的标签和简介。
  • Value就是书架上书的内容本身。

当你浏览书架时,你会先把你的需求(Query)与每本书的标签(Key)进行比对,算出每本书与你的需求有多匹配;然后根据匹配程度,把每本书的内容(Value)加权混合起来。匹配度高的书,你记住的内容就多;匹配度低的书,基本忽略。

在自注意力机制里,每个Token都会生成自己的一套Q、K、V向量。句子中任意两个Token之间都要做一次"需求-标签"匹配,得到的分数就决定了一个Token在理解另一个Token时,应该给予多大的权重。

3.3 一个具体的打分全流程:从"it"看到"animal"

来看一个经典的例子:句子"The animal didn't cross the street because it was too tired."。模型在处理"it"这个词时,需要判断它指的是"animal"还是"street"。

计算过程大致是:

  1. 将"it"的Query向量,分别与"animal"和"street"的Key向量做点积,得到原始分数。
  2. 把分数除以一个缩放因子(通常是向量维度的平方根),防止数值过大。
  3. 用softmax函数把分数转成和为1的概率权重,比如"animal"得到0.9,"street"得到0.1。
  4. 用这两个权重对"animal"和"street"的Value向量做加权求和,得到"it"这个位置更新后的表示。
对比词原始点积(示意)softmax后权重对"it"的贡献
animal高(如10)0.90大部分语义指向animal
street低(如2)0.10语义贡献很小

经过这一轮计算,"it"这个位置的最终向量里,就包含了"animal"的大部分语义信息。模型由此"知道"了"it"指的是那只动物。

需要说明的是,这里的数字只是帮助理解的示意值,实际训练好的模型里,权重分布会复杂得多。但核心机制就是这四步:点积算分、缩放、softmax归一化、加权求和。整个过程在Transformer每一层里会并行地对所有Token执行一次。

3.4 自注意力的代价:平方复杂度

自注意力机制有一个重要的代价——计算量随着序列长度呈平方级增长。如果句子有100个Token,需要做1万次两两交互;如果是1万个Token,需要做1亿次。这就是为什么大模型的"上下文窗口"(一次能处理的最大文本长度)很难做得很大。后来的各种优化技术,如稀疏注意力、线性注意力等,本质上都是在想办法缓解这个平方复杂度问题,而不是要抛弃注意力机制本身。

4. 三大支柱:多头注意力、位置编码、残差与归一化

自注意力机制是核心发动机,但一台发动机不能直接装在车上开。Transformer之所以能稳定工作,还依赖三个关键组件:多头注意力、位置编码、残差连接与层归一化。它们分别解决"单视角不够用""模型不知道顺序""层数深了难训练"这三个问题。

4.1 多头注意力:一组QKV不够,那就并行多组

单靠一组Q、K、V向量,模型只能捕捉一种"关系模式"。但一句话里的关系有很多种:有语法关系(主语-谓语)、有指代关系(代词-名词)、有位置关系(前-后)、有语义关联等等。只用一组参数很难同时照顾到所有关系。

多头注意力(Multi-Head Attention)的做法是:把相同的输入同时送入多个并行的注意力计算通道,每个通道有自己的Q、K、V投影矩阵。以8个头为例,输入会被切成8份,分别计算8份注意力结果,最后拼接在一起再做一个线性变换。

每个头会自发地学习到不同的关注模式。我在训练完一个小型模型后,把8个头的注意力权重可视化出来过:一个头几乎固定关注句子的动词和宾语,另一个头专门关注形容词修饰的名词,还有一个头甚至学会了关注标点符号。这个现象不是谁事先设计好的,而是"多头+海量数据"自然涌现出的分工。

4.2 位置编码:怎么让模型知道"谁在前谁在后"

自注意力机制本身对Token的顺序毫无感知。你把句子倒过来,注意力分数的计算结果完全一样。所以必须额外给模型注入位置信息。

早期的Transformer采用固定频率的正弦余弦函数编码,用一组随位置变化的数字加到嵌入向量上,让模型可以从数值上区分第1个词和第5个词。后来GPT系列改成了让模型在训练中自己学习位置向量。而现在的许多大模型则采用了旋转位置编码(RoPE)——它的思路更巧妙:不直接给位置加数字,而是对Token的向量做旋转操作,两个Token之间的相对位置关系可以通过向量夹角体现出来。

用人话说,位置编码就是给每个Token发一张"排队号",让模型在理解句子时知道元素的先后顺序。没有位置编码,Transformer就跟"一袋子词"没有区别,根本组不成句子。

4.3 残差连接与层归一化:深层次的稳定器

大模型动辄几十层甚至上百层网络。如果每一层都进行复杂的非线性变换,梯度在反向传播时很容易消失或爆炸,导致模型根本训不动。两个工程上的关键设计解决了这个问题:

  • 残差连接:把上一层的输出直接加到本层输出上。这样即使本层变换没学到有用的东西,信息也有一条"高速公路"原封不动地传到下一层。梯度也可以顺着这条高速公路回流,解决了深层训练中梯度消失的问题。
  • 层归一化:对每个Token的向量做标准化处理,让每一层的输入数据分布保持稳定。就好比每过一段路就设一个服务区,让所有数据都休整成统一尺度再继续上路。

这两个设计看起来平平无奇,但却是整个深度学习领域的"基建"级操作。没有它们,今天所有的大规模神经网络都跑不起来。

5. 训练三部曲:预训练、微调与人类反馈对齐

了解了模型结构,还远不是全貌。真正让大模型"无所不知"的关键,在于它的训练方式。现代大模型的训练过程可以拆成三段:预训练、监督微调、人类反馈对齐。

5.1 预训练:在海量语料里做没完没了的"完形填空"

预训练是耗时最长、成本最高的阶段。模型会被喂入数万亿字的互联网公开文本,包括书籍、文章、代码、论坛讨论等等。它要做的任务很简单:一边读前面的文字,一边预测下一个词,预测错了就调整参数,如此反复迭代。

这个过程没有任何人工标注,所以叫"自监督学习"。因为网络文本是现成的,"预测下一个词"这个任务可以自动生成训练数据。预训练结束后,模型已经获得了极强的语言能力和广泛的世界知识,但它只会接话,并不知道怎么像一个助手那样回答问题。你问它"给我推荐一部电影",它可能只会接着你的话头继续编故事。

注意:预训练语料的规模和质量,直接决定了模型能力的上限。这也是为什么行业内流传一句话:"数据质量决定模型上限,算力决定你能否达到这个上限。"

5.2 监督微调:让"接话机器"变成"答题助手"

为了让模型学会遵循指令,需要第二步:监督微调(SFT,Supervised Fine-Tuning)。做法是人工准备一大批"问题-标准回答"对,让模型在预训练基础上继续训练,习得"用户问什么,我就答什么"的行为模式。

这一步的数据量通常只有几万到几十万条,但质量要求极高。人工写答案的时候需要把表达方式、思考过程、拒绝回答的边界都示范出来。我在实际做微调实验时发现,同样一个基础模型,微调数据的风格会完全改变它的回答调性。你给它看什么风格的答案,它以后就更倾向用什么风格回答。

5.3 人类反馈对齐:用打分机制让模型"越来越懂你"

监督微调只能让模型模仿已有的答案,但人类对"好答案"的判断往往很主观。所以还差最后一步:让模型学会如何权衡回答质量。

常见的技术路线是"基于人类反馈的强化学习"(RLHF),大致过程是:由一个AI模型生成多个候选回答,让人类在几个答案之间排序打分,用这些打分训练一个"奖励模型"。这个奖励模型就像一个打分老师,专门判断AI的回答好不好。然后把大模型接在这个奖励模型上,用强化学习算法(如PPO)不断调整大模型参数,让它学会输出奖励更高的回答。

这整个过程就是大模型从"什么都不知道的婴儿"到"懂规矩的助手"的三段成长史。很多人误以为大模型是被人一段一段写出来的程序逻辑,实际上它完全是在数据驱动下自己"长"出来的行为模式。

5.4 参数规模与涌现能力:为什么大就是不一样

有个现象特别值得聊:当模型参数规模越过某个临界点后,会出现很多小模型不具备的能力,比如上下文推理、思维链、代码生成,这类能力被称作"涌现能力"。

比如一个10亿参数的模型,你问它一道三位数加法,它经常算错;但同架构的1000亿参数模型,却能逐步推理,把步骤写出来然后算对。模型架构和训练方法并没有本质区别,差别只在于规模大了。这背后的原因学术界还在研究,主流的一种解释是:更大的模型有更多参数来存储分散的规律,并且能把多步操作串联起来。这些现象告诉我们,"大"之所以值得追求,不只是量的提升,更是质的改变。

6. 大模型为什么会"一本正经地胡说八道"

所有用过大模型的人,都遇过它信誓旦旦给出一个完全错误答案的情况。这被称作"幻觉"。按理说,一个读过万亿字的模型,不应该犯常识错误才对,但事实恰恰相反。要理解幻觉,得先看清模型的本质。

6.1 幻觉的根源:模型记的不是事实,是规律

大模型的训练目标,从来不是"保证答案正确",而是"让预测的词最符合语言规律"。它把海量文本压缩成参数后,记住的不是确切的某条百科条目,而是"这类问题通常会搭配什么样的回答"。

比如你问一个冷门历史人物的出生年份,如果语料里相关信息太少,模型就会根据"与这个人相关的文字风格"脑补一个看起来合理的年份。它不会觉得自己在撒谎,因为在它的训练目标里,这个猜测就是"最合理的下一个词"。用一句话概括:模型的优化目标与人类的"事实正确"目标之间存在天然鸿沟。

6.2 知识截止与上下文限制:大模型的"记忆牢笼"

除了目标偏差,还有两个客观限制与幻觉密切相关:

  • 知识截止时间:模型参数只包含训练数据截止之前的信息。你问它最近发生的事,它只能基于以前学到的规律去"编"。除非它接入了外部搜索工具,否则它确实不知道昨天发生了什么。
  • 上下文窗口上限:一次对话里能放进去的文本总量有限。如果你让模型处理的信息超过了窗口上限,更早的内容会被"截断",模型就只能根据剩余信息作答,答案自然会偏离。

6.3 降低幻觉的实操建议

在使用大模型时,有一些可以有效降低幻觉率的方法:

  1. 在提问中给出具体的背景信息和期望的回答格式,而不是泛指地提问。
  2. 让模型先检索再回答,或接入外部知识库,而不是让它单凭记忆作答。
  3. 对关键事实,让它给出"依据"或"信息来源",然后自己去核实。
  4. 开启"推理模式"(思维链),让模型把分析步骤写出来,推理过程本身能显著降低出错率。
  5. 不要把模型的回答当成权威结论,特别是医疗、法律、金融等高风险领域,只把它的回答当作初稿或参考。

我自己的习惯是,把大模型当成一个"知识面很广但偶尔犯浑的同事":它的初稿质量高,但重要信息一定要经过验证再用。

7. 动手实操:在个人电脑上真正跑起一个大模型

原理讲了这么多,不如自己动手跑一个。很多人觉得训练和运行大模型需要超级计算机,那是针对训练而言。运行(推理)一个开源模型的门槛其实没有想象中那么高。

7.1 模型体积与显存需求:一张表算清楚

先看模型的参数量和存储的关系。以70亿参数(7B)模型为例,它的参数存储需求按不同精度有所不同:

精度每个参数占位7B模型占用内存13B模型占用内存
FP32(单精度)4字节约28GB约52GB
FP16/BF16(半精度)2字节约14GB约26GB
INT8(8位量化)1字节约7GB约13GB
INT4(4位量化)0.5字节约3.5GB约6.5GB

这个表告诉我们两个关键信息:第一,显存大小直接决定你能跑多大的模型;第二,量化(降低参数精度)是个人用户运行大模型最重要的手段。INT4量化后,一个7B模型只要3.5GB左右显存,很多普通显卡都能跑起来。量化的代价是模型在某些任务上精度略有下降,但日常聊天完全够用。

提示:除了模型本身,运行时的KV Cache(键值缓存)还会额外占用一定显存,实际需求通常比静态计算多出1到2GB。预算时记得留出余量。

7.2 一套可以直接照抄的本地部署方案

如果你有一块8GB显存的显卡,或者一台16GB内存的普通电脑,下面这套组合足够你跑起一个7B级模型:

  1. 安装好Python环境和显卡驱动(如果用的是NVIDIA显卡,需要装CUDA)。
  2. 安装一个开源推理框架,它支持GPU加速和CPU推理两种模式。
  3. 从开源社区下载一个量化好的7B模型文件(GGUF格式),选Q4_K_M这种平衡性好的量化版。
  4. 修改框架的配置文件,指定模型路径和监听端口。
  5. 启动服务之后,在浏览器或客户端里发起对话。

第一次跑起来的时候,那种"我自己电脑上也有一个AI"的感觉还是挺神奇的。虽然回答速度没有网页版快(在8GB显卡上约每秒10到20个Token),但优势是:数据完全本地传输,不依赖外部网络,还能任意调试提示词、更换不同风格的模型。

7.3 给零基础入门的路线建议

很多人学到这儿就卡壳了,不知道下一步该学什么。从我个人的经历来看,比较顺滑的路径是这样:

  1. 先把本文提到的概念——Token、Embedding、自注意力、预训练、微调——彻底弄懂,不懂就多读几遍,或者上手跑一个开源小模型。
  2. 动手把一个7B模型在本地跑起来,试着调整采样温度、上下文长度等参数,观察输出变化。
  3. 用开源框架微调一个小模型,用几百条自己准备的数据,体验一把"调教"模型的过程。这一步会让你对所有概念的理解发生质变。
  4. 读完"Attention Is All You Need"这篇Transformer原始论文,以及BERT、GPT的原始论文。你会发现有了实操经验再读论文,以前看不懂的部分能看懂了。
  5. 对某个方向产生了兴趣(比如多模态、Agent、检索增强),再沿着那个方向的论文和开源项目深挖。

我记得自己第一次跑微调时,用错了数据集格式,模型训练完只会重复反问句,成了个"复读机"。排查了半天才发现是对话模板没配对。这种坑,只有动手踩过才能真正理解模型内部的输入输出格式有多重要。

关于学习这件事,我的最大体会是:不要试图先把所有数学原理都学完再动手。大模型的学习路径是"理解概念、动手跑通、回头补数学、再深入原理"这样螺旋式上升的。先跑起来,让模型在你自己的电脑上吐出一句完整的话,这个正反馈比看十篇文章都管用。剩下的问题,等你真的遇到了,自然会知道该补哪块知识。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询