一、预训练与微调
预训练是大语言模型能力形成的基石。在这个阶段,模型通过海量无标注文本(如网页、书籍、代码)进行学习,其目标并非执行某个具体任务,而是掌握语言的通用规律、积累世界知识与常识,并形成基础的逻辑推理能力。这个过程类似于人类的“基础教育”(就好像咱们在读小学的时候认字识字,通过周围的信息了解世界,学习内容不局限于任何具体领域),其核心目标是构建一个具备通用语言理解与生成能力的“基座模型”。
在此基础之上,微调阶段则赋予模型解决专项任务的能力。如果说预训练是通识教育,那么微调就更像是大学阶段的专业培养。它基于预训练好的基座模型,使用特定领域或指令的数据进行针对性训练,使其能够胜任聊天、编程或文档分析等具体工作。
微调主要有两种技术路径:全参数微调与部分参数微调。这种区分类似于神经网络不同层级学习到的特征差异——浅层网络通常学习通用特征(如图像中的线条、纹理),而深层网络则学习与任务高度相关的抽象特征(如物体轮廓)。因此,在适配新任务时,冻结浅层的通用参数、仅微调深层参数,即可高效地使模型适应新领域,这能显著降低计算成本。当然,若追求更强的领域性能,也可进行全参数微调,但这可能带来“灾难性遗忘”的风险,即模型在精通新领域的同时,淡化了原有的部分通用知识(就好比一个学识渊博的博士生,却不会正常的穿衣走路)。
二、语言模型
语言模型(Language Model, LM)是自然语言处理的核心,其本质是一个对词序列的概率分布进行建模的系统。简单说,它的核心任务是预测下一个词是什么。例如,给定“今天天气很”,模型会计算“好”、“热”、“冷”等词出现的可能性。这种能力是机器理解、生成人类语言的基础。经典的语言模型大致可分为三个发展阶段:统计语言模型-->神经网络语言模型-->现代大语言模型。
2.1 统计语言模型
统计语言模型是早期自然语言处理的基础,其核心思想是通过计算文本中词语出现的频率,来估计一个句子(词序列)的可能性。它的根本目标是计算一个词序列 W=(w1,w2,...,wm)作为一个完整句子出现的概率 P(W)。根据概率的链式法则,这个概率可以分解为一系列条件概率的乘积:

其中,P(wk∣w1,...,wk−1)表示在已知前面所有词的情况下,出现wk的概率。
但是,直接估算长序列的条件概率几乎不可能(数据稀疏且参数空间巨大)。因此,N-gram模型引入了一个关键的简化假设——马尔可夫假设,即一个词出现的概率只依赖于它前面有限的 N−1个词。由此,模型得到了极大简化:
Unigram (1-gram):每个词独立出现。

Bigram (2-gram):每个词只依赖于前一个词。

Trigram (3-gram):每个词依赖于前两个词。

其中,条件概率 P(wi∣wi−2,wi−1)可以通过语料库中出现的频率来估算:

这里,count(wi−2,wi−1,wi)是这三个词连续出现的次数,count(wi−2,wi−1)是前两个词连续出现的次数。如此,咱们已经获得了一个可量化的统计语言模型N-gram。但N-gram也有自身局限性,比如数据稀疏——无论语料库多大,都无法覆盖所有可能的词组合,会出现大量零概率事件。长程依赖——固定的N-1阶历史无法捕捉长距离的词语关系。
2.2 神经网络语言模型
如果说统计语言模型(如N-gram)是依靠“查字典数次数”来机械地猜测下一个词,那么神经网络语言模型(NNLM) 则开始尝试像人一样“理解”词的含义与关系,并进行“思考推理”。

它的核心流程,如图中自下而上所示:
查表获取“词义”:首先,模型拥有一个巨大的词表矩阵 C(即查找表)。每个词(如
W{t-2})不再是一个孤立的符号,而是被转换(查找)成一个有意义的数字向量(例如C(W{t-2}))。这一步至关重要,它让模型能用数学(向量)来表征每个词的“含义”。可以把它想象成一本“概念字典”,把每个单词翻译成一组代表其特性的数字密码。拼接与“综合思考”:模型将目标词前后若干个历史词(如图中的
W{t-2},W{t-1}等)的向量拼接起来,形成一个更长的、代表当前上下文的向量。这个向量被送入一个以 tanh 函数为核心的隐藏层。这个层就像一个“思考中枢”,通过非线性计算,从输入的词义向量中提取出更高层、更抽象的上下文特征。这克服了N-gram只能看固定长度历史的局限。输出“可能性分布”:最后,“思考中枢”得出的特征被送入 softmax 输出层。该层的作用就像一个“可能性计算器”,它会为词表中的每一个词计算出一个概率
P(Wt = i | context),即“在当前上下文中,下一个词是第i个词的可能性有多大”。最终,模型会选择概率最高的词作为预测输出。
NNLM的划时代意义在于:
学会“词义”:通过词向量,它首次让计算机能够以连续、分布式的方式表示语义,相似的词会有相似的向量。
学会“推理”:通过神经网络隐藏层,它能够捕捉词与词之间非线性的、复杂的组合关系,而不仅仅是表面的共现频率。
解决“数据稀疏”:即使一个词序列从未在训练数据中出现过,模型也能根据已学到的词向量和组合规律,给出合理的概率预测。
因此,NNLM为后来一切基于深度学习的语言模型(包括当今的GPT、BERT)奠定了最核心的思想基础:用神经网络学习词的分布式表示,并据此建模整个序列的概率。
三、词向量
由于计算机只能识别数字,不知道语言的具体含义,那么我们就要想办法把世界信息投射到计算机当中,早期,在训练词汇量不大的情况下,人们想到,如果我们把每个词都用一个独特的数来表示,比如[1,0,0,0,0,0,0,0]表示time,[0,1,0,0,0,0,0,0]表示fruit...依次类推,那计算机不就能区分了?这就是独热(one-hot)编码,如下图所示。

但聪明的你很快发现,one-hot编码有一个非常严重的缺陷,它假设所有词都相互独立。任意两个不同词的独热向量,其点积(或余弦相似度)永远为0。这意味着计算机无法从这种表示中得知“苹果”和“橙子”都是水果,它们之间的关联性被完全忽略了。
显然,我们需要一种能表达语义关联的表示方法。理想情况下,“国王”与“皇后”的向量关系,应当类似于“男人”与“女人”的向量关系;而“水果”这个词的向量,应当更靠近“苹果”“香蕉”,而不是“汽车”。这种既能被计算机处理,又蕴含语义信息的数字表示,就是词向量。
在上一节介绍的神经网络语言模型中,我们已经见到了词向量的关键实现:每个输入的词(如 W{t-2}),其原始的独热编码会与一个嵌入矩阵Q相乘。这个乘法操作,本质上是从矩阵Q中“查表”取出对应的行。这一行,就是一个全新的、稠密的低维向量,我们称之为该词的词向量或嵌入(见下图,即根据独热编码从Q取第四行数据),该过程可直观理解为:
独热编码是词的生硬“身份证号”,只标明身份,不承载意义。
嵌入矩阵Q是一本精心编写的“语义词典”或“概念映射表”。
词向量则是通过查这本“语义词典”得到的、富含意义的“词义肖像”。它用一组连续的数值,刻画了这个词在语义空间中的位置。

四、Word2Vec & RNN & LSTM & ELMo
4.1 Word2Vec
上文提到,词向量的核心在于那个将独热编码映射为语义向量的矩阵Q,那么,如何从零开始训练出一个能准确捕捉语义的Q矩阵呢?这正是Word2Vec要解决的核心问题。Word2Vec是谷歌团队在2013年提出的一个经典而高效的词向量训练模型。它的目标非常直接:通过让模型学习单词在真实语句中的出现规律,自动优化矩阵Q,使得生成的词向量能精准反映词义之间的关联。就好比通过观察大量“词语搭伴”的实际情况,反向推演出每个词的“语义坐标”。
Word2Vec通过两种简单巧妙的“填空游戏”来训练模型:
CBOW(连续词袋模型):其核心是 “猜词” 。在一个句子中,我们把中间的一个词(例如“苹果”)暂时遮住,然后让模型根据这个词的上下文(比如前后的“吃”、“一个”、“很甜”)来预测这个被遮住的词到底是什么。这个过程是“多个上下文词输入,预测一个中心词输出”。通过反复训练,模型会学会哪些上下文特征通常指向某个特定词语,从而将语义相似的词(如“苹果”、“梨子”)放置在向量空间中相近的位置。
Skip-gram(跳字模型):其核心是 “组词” 。它与CBOW的思路正好相反。我们输入一个单独的中心词(例如“苹果”),然后让模型去预测它周围可能出现的上下文词(比如“吃”、“树”、“红色”)。这个过程是“一个中心词输入,预测多个上下文词输出”。这种训练方式让模型能更精细地学习一个词的使用语境,尤其擅长处理低频词。
简单类比,CBOW像“完形填空”,而Skip-gram像“词语联想”。两种方法从不同角度迫使模型理解词语之间的共现关系,从而在优化预测任务的同时,使得矩阵Q(即词向量查找表)被训练成一个富有语义信息的“词典”。最终,在这个向量空间里,“国王 - 男人 + 女人 ≈ 皇后”这类经典的语义关系计算得以实现,这正是Word2Vec里程碑意义的体现。

4.2 RNN
仔细观察会发现,无论是统计语言模型还是早期的神经网络模型,在处理句子时,都像是把词语扔进一个“袋子”里观察,忽略了词语出现的顺序。然而,语言的时序性至关重要——“猫追老鼠”和“老鼠追猫”的含义截然不同。为赋予模型记忆顺序的能力,研究者提出了循环神经网络(RNN):

RNN 像一条具有记忆的流水线。在每一个时刻 t,模型接收当前输入 xt,并综合当前输入与上一时刻传递下来的全部记忆(即隐藏状态 h{t-1}),计算出当前输出 ht。这个 ht随即被传递给下一个时刻,作为其记忆的一部分。这意味着,时刻 t的输出 ht,实质上是从序列开头 x0到当前 xt所有输入信息的浓缩总结。模型通过这种循环连接,理论上能够记住并利用整个上文的信息来处理后续内容。
然而,RNN 存在一个根本性的缺陷:它不擅长处理长距离依赖。我们可以将其记忆想象成一条不断被稀释或放大的信息流。当序列很长时(例如一段复杂的段落),最早期的输入信息在经历多次循环传递后,其影响要么急剧衰减至近乎消失(梯度消失),要么指数级放大导致失控(梯度爆炸)。这使得模型很难学会跨越很多步的关联。
例如,在句子 “我今天早上吃了冰箱里的苹果,然后去公园散步,接着……(中间有很长一段描述)……所以现在感觉肚子很舒服。” 中,一个标准的RNN很难将最后“肚子舒服”的原因,清晰地归因到很久之前“吃了苹果”这个动作上,因为中间的漫长叙述早已冲淡了最初的记忆。
4.3 LSTM
如果说RNN的记忆像一条不断被稀释的溪流,那么LSTM则像配备了一套智能阀门和管道的蓄水池系统。它通过精巧的“门控”机制,有选择地记住重要的长期信息,并过滤掉无关的噪音。这使其能够学习跨越数百甚至数千时间步的依赖关系。

咱们将上述这幅LSTM的原理图拆分为三个关键部分:
细胞状态:贯穿始终的记忆主线
图中贯穿上方的水平线 -> 的是LSTM的细胞状态。可以将它理解为一个“传送带”,它从序列开始一直运行到结束,其目的是让信息以最小的改变在不同时间步之间流动。LSTM的所有设计,都围绕着如何保护和调控这条主线上的信息。
三道智能门控:遗忘、输入与输出
LSTM通过三个结构相似但功能各异的“门”来决定信息的去留。每个门都是一个神经网络层(通常是一个sigmoid函数和一个点乘操作的组合),它输出一个0到1之间的值,代表“允许通过的比例”。
遗忘门 :决定从上一时刻的记忆 中丢弃哪些信息。它查看当前输入 和上一输出 ,为 中的每个部分产生一个“保留分数”。
输入门 :决定将哪些新信息存入细胞状态。它同时与一个层协同工作,共同筛选出值得加入长期记忆的新内容。
输出门 :基于当前的细胞状态 ,决定最终要输出什么信息到隐藏状态 中。将作为当前时刻的“总结”被传递下去。
信息的整合与更新
理解了三个门后,再看图中间部分就清晰了:首先,遗忘门的输出与旧的记忆相乘,丢弃无用部分;接着,输入门的输出与候选记忆相乘,筛选出新信息;最后,将这两部分相加,就得到了更新后的、全新的细胞状态 。这个“乘法遗忘 + 加法更新”的组合,是LSTM能保护梯度、维持长期记忆的数学关键。
4.4 ELMo
在前面的内容当中,我们教会了模型如何用一个固定的“词义肖像”(Word2Vec)来代表一个词,并为其赋予了记忆时序(RNN)和长期记忆(LSTM)的能力。然而,一个根本性的问题依然存在:同一个词在不同的语境下,含义可能截然不同。例如,“苹果”在“我吃了一个苹果”和“苹果发布了新产品”中,所指完全不同。但Word2Vec只能为“苹果”生成唯一一个静态的向量,无法捕捉这种细腻的语境差异。这限制了模型对语言真正含义的理解。
为了解决“一词多义”的难题,我们迎来了一个里程碑式的工作:ELMo(Embeddings from Language Models)。它的核心思想非常巧妙且有效:既然词义由上下文决定,那么词的表示就应该随着上下文动态变化。ELMo不再追求一个“放之四海而皆准”的词向量。相反,它采用了一个两阶段的动态策略。

第一阶段:预训练一个强大的“上下文理解器”
ELMo使用一个双层双向LSTM网络作为核心架构,在大规模文本上进行语言模型任务的预训练。
“双向”是关键:模型同时从左到右(正向)和从右到左(反向)阅读整个句子。这使得每个词的表示都能融合其全部上文和下文的信息,从而获得真正的上下文感知能力。
任务就是预测下一个词:通过这个简单的任务,模型被逼着去学习单词、语法和语义之间的复杂规律。
第二阶段:按需抽取,动态组合
当我们需要在具体任务(如情感分析、问答)中使用ELMo时,过程如下:
我们将句子输入预训练好的双层双向LSTM。
对于句子中的每个词(例如图中的T1...TN),模型会生成不止一个,而是多个层次的向量表示(对应图中右侧的E1, E2, E3...)。
底层(如E1):更多地捕捉单词特征(如词性、拼写)。
中层(如E2):更多地捕捉句法特征(如语法结构)。
高层(如E3):更多地捕捉深层语义特征。
最终,我们不是只取某一层的向量,而是将所有这些不同层次的表示进行加权组合,生成该词在这个特定句子中的最终动态向量。由此,ELMo实现了从“词嵌入”到“基于上下文的嵌入” 的关键跨越。它首次清晰地证明,深度预训练语言模型是提升NLP性能的强大引擎。当然,ELMo并非终点。其基于LSTM的架构在捕捉极长距离依赖和计算效率上仍有局限。但它点燃的火炬,直接照亮了后续Transformer和BERT等模型的道路,彻底开启了预训练语言模型的新时代。
五、注意力机制及延伸
5.1 Attention
在理解复杂的句子或场景时,人类的思维有一个关键特质:我们不会同等地处理所有信息,而是会动态地将“注意力”聚焦在最关键的部分上。例如,阅读这句话时,您的视线正聚焦于“注意力”这个词,而相对弱化了页面边缘或其他文字的信息。
这种“选择性聚焦”的能力,正是人工智能,尤其是处理序列信息(如语言)的模型所亟需的。在上一章我们探讨了LSTM,它通过门控机制改善了长距离记忆,但其本质仍是“被动”的:信息必须按顺序流过所有中间单元,距离越远,衰减或混淆的可能性就越大。
于是,注意力机制应运而生。它不再强迫模型通过一个固定的“记忆通道”来压缩所有历史信息,而是允许模型在任何时候,都能直接“回首”或“眺望”序列中任何位置的信息,并动态决定哪些部分更值得关注。这彻底解决了超长距离的依赖问题,并因其高度并行的计算方式,带来了效率的极大提升。
注意力机制的核心:Q, K, V 三部曲
注意力机制最经典的计算过程可以用一个公式概括,其核心是三个关键向量:查询(Query)、键(Key)、值(Value)。初看可能令人困惑,我们可以通过一个改进的“图书馆查资料”类比来轻松理解:
想象我们走进一座巨大的图书馆,想要查找 “注意力机制在自然语言处理中的应用” 相关资料。我们的这个需求,就是 Q(Query),它定义了我们当前关注的焦点。
匹配与筛选:Q 与 K 的相遇
图书馆的每本书都有一个索引标签(Key, K),例如“深度学习”、“计算机视觉”、“语言学理论”等等。我们的目标不是漫无目的地浏览,而是将查询 Q 与所有书的标签 K 进行比对,计算出一个“相关度得分”。这个得分决定了我们应该对哪本书投以更多的注意力。
在数学上,这通常通过计算 Q 与每个 K 的点积(或其他相似度函数)来实现。随后,通过一个 Softmax 函数 将这些得分转化为一个概率分布(即“注意力权重”)。Softmax 的作用至关重要:它不仅将所有得分归一化到 0 到 1 之间(形成权重),还通过指数运算放大了重要项的权重,同时压低了不相关项的权重,使模型的聚焦更加“锐利”。
信息聚合:加权求和 V
现在,咱们手中有了一个注意力权重列表:比如,0.8 的概率关注“深度学习”类的书,0.15 关注“语言学”,0.05 关注其他。每本书的真正内容就是它的 值(Value, V)。
最终,我们获得的资料不是单一的一本书,而是所有书籍内容的加权融合:我们会从“深度学习”类书籍中汲取 80% 的精髓,从“语言学”类书籍中汲取 15%,以此类推。这个对 V 进行加权求和的过程,就是注意力机制的输出——一个基于当前查询 Q,动态聚合了全局最相关信息的上下文向量。
注意力机制的伟大之处在于,它将模型从序列的线性束缚中解放了出来。对于序列中的每一个元素(作为Q),它都可以直接与序列中所有元素(的K)计算关联度,并直接从所有元素(的V)中聚合信息。这意味着,无论两个词在句子中相隔多远,它们都可以建立直接连接,彻底解决了长距离依赖问题。同时,注意力机制可以并行计算每一个单词与其他单词的关系,不再像LSTM一样必须按序计算,这飞跃式的提升了模型训练的效率。
(再补充一下 的作用,由于点积的结果会随着维度的增大而显著变大,从而将Softmax函数推入梯度极小的饱和区,导致注意力分布过于尖锐且训练不稳定。通过除以,可以将点积得分缩放至一个适中的范围,确保Softmax能够产生平缓且合理的注意力权重,这如同一个稳定的调节器,既维持了模型捕捉多重依赖关系的能力,又保障了梯度更新的有效性。)
5.2 Self-Attention
理解了“注意力机制”后,自注意力机制便呼之欲出。它的核心区别在于“自”——不再是拿着一个外部查询(Query)去审视一系列信息,而是让序列中的每个元素“自我关照”,并与序列中的所有其他元素(包括自己)进行互动,以确定在当前的语境下,谁更重要。
简单来说,自注意力就是让句子自己理解自己的过程。当模型处理“Thinking Machines”这个短语时,它会让“Thinking”这个词去判断:在理解“Thinking”的含义时,它自己(“Thinking”)和“Machines”各自应该占据多少注意力?这个过程始于三个关键的向量:查询(Q)、键(K)、值(V)。在自注意力中,Q、K、V并非来自外部,而是全部源于输入序列本身。
咱们从计算的角度来进行说明:
第一步:生成 Q, K, V

输入序列中的每个词(如 Thinking, Machines)首先被转换为词向量(即 x₁, x₂)。接着,这些词向量会分别与三个可学习的权重矩阵( , , )相乘,从而派生出对应的查询向量(q₁, q₂)、键向量(k₁, k₂)和值向量(v₁, v₂)。
第二步:计算注意力分数与权重

这是自注意力计算的核心。我们以计算“Thinking”的最终表示为例
评分:用“Thinking”的查询向量
q₁分别与“Thinking”自己的键向量k₁和“Machines”的键向量k₂进行点积,得到两个原始分数(112 和 96)。这衡量了“Thinking”与每个词(包括自己)的相关性。缩放:为防止点积结果过大导致梯度不稳定,将分数除以键向量维度的平方根(此处 =64),得到缩放后的分数(14 和 12)。
归一化:对缩放后的分数应用 Softmax 函数,将其转化为概率分布(权重),和为1。这样,“Thinking”在处理时,分配给自己的权重是0.88,分配给“Machines”的权重是0.12。
第三步:加权聚合,生成输出

用上一步得到的注意力权重(0.88, 0.12)对所有的值向量(v₁, v₂)做加权求和,输出 z₁= 0.88 * v₁+ 0.12 * v₂ ,该结果 z₁就是“Thinking”经过自注意力机制处理后的新表示。它不再是一个孤立的词向量,而是融入了对“Machines”上下文信息的考量。最终,模型会为序列中的每个词都计算出一个这样的上下文感知的新表示。
需提及的一点是,自注意力机制输出向量 z₁, z₂, ...与输入向量 x₁, x₂, ...的维度是相同的,但向量包含的信息已经发生了本质的升华。原始的 x是一个静态的、孤立的词表示(例如来自Word2Vec或随机初始化)。而经过自注意力计算得到的 z,是一个动态的、上下文感知的表示。它不再是“苹果”这个词的单一含义,而是“在这个特定句子中、被周围词语修饰后的苹果” 的精确表示。
5.3 Masked Self-Attention
理解了自注意力能让词看到句子中所有其他词后,我们面临一个关键问题:对于生成式语言模型(如GPT),它在预测“下一个词”时,能提前看到“未来的词”吗?答案显然是否定的。就像人类在写作或说话时,只能基于已说出的内容思考下一个词,模型在生成时也不应“作弊”。这就是掩码自注意力机制(Masked Self-Attention)要解决的问题。
1. 核心目标:屏蔽未来信息
它的目标非常明确:确保在处理序列中某个位置时,模型只能“注意”到该位置及之前的信息,而无法看到其后的信息。 这完美模拟了人类逐词生成文本的过程。
2. 实现方式:一个“信息过滤器”
这一目标通过一个巧妙的“掩码”操作实现,如图所示:

左侧(标准自注意力):注意力矩阵全亮,意味着单词“I”可以看到包括未来词“have”, “a”, “dream”在内的所有信息。
右侧(掩码自注意力):注意力矩阵的右上角变成了灰色。这表示在计算注意力权重时,模型将“未来位置”的关联性强行设置为一个极大的负值(如
-1e9),使其在后续Softmax计算中权重趋近于零。
3. 工作原理:逐词解锁的视野
掩码的效果,如下图中具体的数值所示,形成了一个仅左下三角区域有效的注意力模式:

第一个词 “I”:只能看到自己(注意力权重为1.0)。
第二个词 “have”:可以看到“I”和它自己(权重分别为0.4和0.6)。
第三个词 “a”:可以看到“I”、“have”和自己(权重分别为0.1, 0.1, 0.8)。
…以此类推。
掩码自注意力是自回归生成模型(如GPT系列)的基石。它通过强制模型仅依赖已知上文来预测下一个词,保证了生成过程的逻辑合理性,也极大地增强了模型在文本生成、代码补全等任务中的能力。它使模型学会的不是“填空”,而是真正地“创造”后续内容。
5.4 Multi-head Self-Attention
在理解了自注意力这个强大的“自我审视”机制后,一个自然的疑问是:单一的注意力视角是否足够? 就像一个复杂的决策,往往需要多位专家从不同角度分析才能周全。Transformer模型的核心创新之一——多头自注意力机制,正是基于这样的思想。它的核心设计是:并行地执行多次自注意力计算,每次聚焦于输入信息的不同侧面,最后将各方的“见解”综合起来,形成更全面、更丰富的上下文表征。

第一步:准备输入
以“Thinking Machines”为例。每个单词首先被转换为词向量,所有词向量堆叠即构成输入矩阵 X。
第二步:生成多组视角(分头)
模型通过多组独立的、可学习的线性变换矩阵,将 X “投影”到多个不同的子空间。
如图所示,对于每个“头”(Head,图中以8个头为例),我们都准备三套独立的权重矩阵:,,。
输入 X 会分别与这些矩阵相乘,为每个头生成一组专属的 Q, K, V。这意味着,每个头都在从不同的视角对原始输入进行解读和提问。
第三步:各头独立计算注意力
在拥有了各自的 Q, K, V 之后,每个头便像一个小型且独立的“自注意力专家”,按照我们之前介绍的标准自注意力流程进行计算:
每个头独立运算后,都会产出一个代表本头“见解”的上下文矩阵 Zi,图中展示了从 Z0到 Z7 这8个不同的输出矩阵。
第四步:整合见解(拼接)
现在,我们有了来自8位“专家”的8份报告(Z0到 Z7)。为了形成一个统一的结论,我们将所有这些矩阵在特征维度上拼接(Concatenate) 起来,形成一个更大的矩阵。
第五步:融合与输出
最后,这个拼接后的庞大矩阵会经过一个最终的线性变换层(乘以权重矩阵 WO),将来自多头的综合信息融合、降维,并映射回与输入 X 一致的维度,得到本多头注意力层的最终输出 Z。
多头设计的核心优势
并行化能力:每个头的计算完全独立,可以高效并行,极大提升了训练和推理速度。
表达力增强:不同头可以自发地学习关注不同类型的信息。例如,在处理“银行”一词时,有的头可能聚焦于“金融”相关的上下文,有的头则可能关注“河流”相关的线索。这种并行而专注的探究,让模型对一词多义的捕捉能力远超单头注意力。
稳健性提升:类似于集成学习,综合多个“专家”的意见,使得模型表征更加稳健,不易受单个注意力模式偏差的影响。
总结而言,多头自注意力机制通过组建一个各司其职又协同工作的“专家委员会”,让模型能够同时从多个维度解构并理解输入信息,是Transformer架构强大表征能力的关键所在。
六、位置编码
基于前述内容,自注意力机制赋予了模型同时关注序列中所有位置信息的能力,完美解决了长距离依赖和并行计算的问题。然而,这里存在一个根本性的缺陷:自注意力机制本身是“排列不变”的。
什么是“排列不变”?
让我们看一个简单的例子。假设我们要计算句子A“猫追老鼠”和句子B“老鼠追猫”的注意力表示。对于自注意力机制而言,它看到的输入仅仅是三个词向量:“猫”、“追”、“老鼠”。由于自注意力会对所有词对进行关联计算,而计算过程不关心词的先后顺序,因此它可能会为这两个语义截然相反的句子生成几乎相同的上下文表示。这就像把一堆单词卡片打乱顺序后,模型无法分辨原始句序一样,丢失了至关重要的序列顺序信息。
顺序是语言的灵魂。“我打你”和“你打我”含义相反,“未完工”和“工未完”强调不同。为了弥补这一缺陷,Transformer的发明者引入了 位置编码。
位置编码的核心思想非常直接:既然注意力机制本身无法感知顺序,我们就在输入数据中显式地加入顺序信息。具体做法是,在将词向量输入Transformer层之前,为每个词向量加上一个与其在序列中位置相关的独特向量。即:

如上图,对于单词“爱”,其512维的词嵌入向量与一个同样512维的位置编码向量逐元素相加,得到最终的输入表示。这样,模型在计算注意力时,就能同时感知到“这个词是什么”以及“这个词在句子的哪个位置”。那么你可能有两个疑问,一是位置编码是如何生成的,二是这样简单的相加,后续如何从识别出来哪部分是词嵌入向量,哪部分是位置向量呢?咱们来分别理解:
问题一:位置编码是如何生成的?
如何生成这个能表示位置信息的向量?一个直觉的想法是用简单的数字,比如第一个位置是1,第二个位置是2……但这在遇到比训练时更长的句子时会失效。Transformer采用了一种极其巧妙且优雅的方法——使用正弦和余弦函数的组合:

咱们来拆解一下:
pos:单词在序列中的绝对位置(第0个,第1个……)。
i:代表位置编码向量的维度索引。对于512维的编码,i从0到255。
d_model:模型的总维度(这里是512)。
这个公式为每个位置 pos 生成一个独一无二的、512维的位置编码向量。它的独特之处在于:
绝对位置感知:不同位置 (pos) 通过不同频率、不同相位的正弦波编码,确保了每个位置都有唯一的向量表示。
相对位置外推:得益于三角函数的性质(sin(α+β)和 cos(α+β)可展开为 sin(α), cos(α), sin(β), cos(β)的函数),模型能够轻松地学习和推断词与词之间的相对位置关系。例如,它能学到“偏移k个位置”是一种可计算的模式,这使其能更好地处理训练时未见过的长句子。
周期性规律:如图中维度 [0,1,2,3,...,511]对应的 [sin, cos, sin, cos, ..., cos]所示,不同维度(i)使用不同的频率(由 10000^{2i/d_model}决定)。低维(i小)频率高,变化快,编码细粒度的位置信息;高维(i大)频率低,变化慢,编码粗粒度的位置信息。这为模型提供了丰富的、多层次的位置信号。
问题二:如何从最终向量识别出词嵌入部分和位置部分?
模型并不需要(也通常不会)在计算过程中显式地将它们重新分离。相反,它通过训练学会如何同时且高效地利用这个融合了双重信息的统一表示。这个过程的关键在于模型的训练目标与架构设计:
训练迫使模型学会“解读”信号:在通过海量文本进行训练时,模型为了准确完成“预测下一个词”等任务,必须同时理解词义和词序。这驱动它去发现:输入向量中某些相对稳定、与特定词语绑定的变化模式对应词义(例如,“苹果”一词的核心向量特征);而另一些有规律、随位置索引周期性波动的模式则对应位置。
线性变换实现动态聚焦:自注意力机制的核心操作是为每个词生成查询(Q)、键(K)、值(V) 向量,这本身就是对输入向量进行了一次可学习的线性变换。模型通过训练,会优化这些变换矩阵的权重,使得:
当计算语义关联时,
W_Q、W_K等矩阵能优先投影出输入向量中与词义相关的成分。当需要感知顺序时,这些矩阵也能有效提取出其中规律性的位置信号。
因此,不是物理分离,而是通过不同的投影方向,在需要时提取出所需侧面的信息。
独立性是高效学习的基础:理想情况下,词嵌入空间和正弦位置编码空间近乎线性独立(正交)。这种性质意味着两种信息混杂的干扰最小,使得模型更容易通过上述线性变换,像调节不同滤波器一样,分别捕捉到语义和位置这两种不同维度的特征。正弦编码自带的规律性,为这种分离提供了强有力的先验引导。
总结来说,模型通过训练目标驱动,并利用可学习的线性变换层,能够从融合的输入中自适应地、按需地提取或组合词义与位置信息,而无需进行显式的逆向分离操作。
七、transformer
接下来,咱们终于来到了现代大语言模型的基石——Transformer架构。它彻底摒弃了循环结构,完全依赖自注意力机制,实现了前所未有的并行能力和对长距离依赖的捕捉。

以上是transformer的整体架构图,它初看复杂,但核心逻辑清晰:这是一个编码器-解码器(Encoder-Decoder) 结构。我们以机器翻译为例,其工作流程可以简化为:输入“I love you”,经过Transformer,输出“我爱你”,就是这么简单。
对整个架构做拆解,左半部分是编码器,负责理解和编码源语言(如英语)句子的全部信息;右半部分是解码器,负责根据编码器的信息,逐步生成目标语言(如中文)的句子。下面,我们逐一拆解这两个核心部分。
7.1 编码器(Encoder)
编码器(图左灰色框)由 N 个(原论文中 N=6)结构完全相同的层堆叠而成。每一层都包含两个核心子层,数据流动如箭头所示,自下而上:
多头自注意力机制层(Multi-Head Attention):
功能:这是该层的核心。它允许输入序列中的每个词,同时关注序列中所有其他词的信息,从而计算出包含全局上下文的词表示。
输入:该层的输入来自前一层(第一层的输入是“词嵌入+位置编码”)。
处理:它运行我们之前详解的“多头自注意力”计算,让模型从多个角度理解词与词之间的关系。
前馈神经网络层(Feed Forward):
功能:这是一个简单的全连接神经网络(通常包含一个或两个线性变换和激活函数)。它对每个位置的向量进行独立、相同的处理。
作用:为模型引入非线性变换,增强其表达能力。可以将其理解为对自注意力层输出的信息进行进一步的提炼和转换。
残差连接与层归一化(Add & Norm):
这是图中环绕在两个核心子层周围的“Add & Norm”模块。
Add(残差连接):将子层的输入直接加到子层的输出上(即
输出 = 子层(输入) + 输入)。这如同为信息流动开辟了一条“高速公路”,能有效缓解深层网络中的梯度消失问题,让模型得以堆叠得很深。Norm(层归一化):对相加后的结果进行层归一化操作,稳定每一层的输入分布,加速模型训练收敛。
编码器工作流总结:源语言句子经过词嵌入和位置编码后,输入到第一层编码器。数据依次通过该层的“自注意力 -> 加法和归一化 -> 前馈网络 -> 加法和归一化”后,输出给下一层编码器。经过 N 层的逐层抽象,最终从顶层编码器输出一组富含源语言句子全部语义和结构信息的上下文向量。这组向量将被送给解码器,作为其生成目标句子的“参考蓝本”。
7.2 解码器(Decoder)
解码器(图右灰色框)同样由 N 个相同的层堆叠而成,但每层结构比编码器更复杂,包含三个核心子层,数据流也是自下而上。
掩码多头自注意力层(Masked Multi-Head Attention):
功能与不同:这是解码器的第一个自注意力层,关键区别在于“掩码”。
目的:确保在生成目标序列的第
t个词时,模型只能“看到”已经生成的1到t-1位置的词,而不能“偷看”未来的词。这保证了模型在训练和生成时行为一致,是自回归生成的核心。
编码器-解码器注意力层(Multi-Head Attention):
功能:这是连接编码器和解码器的桥梁,是真正的“翻译”发生的关键层。
输入:该层的 Query(查询) 来自其下方掩码自注意力层的输出,而 Key(键) 和 Value(值) 则来自顶层编码器的最终输出。
作用:解码器通过此层,主动地、有选择地从编码器输出的“源语言信息蓝本”中,提取与当前生成步骤最相关的信息。例如,在生成“爱”这个词时,模型会特别聚焦于编码器输出中与“love”对应的部分。
前馈神经网络层(Feed Forward):
与编码器中的前馈网络功能完全相同,对每个位置的向量进行独立处理。
残差连接与层归一化(Add & Norm):
环绕在上述每一个子层周围,作用与编码器中完全相同。
解码器工作流与输出:
输入:解码器的初始输入是目标句子向右移动一位(Shifted Right)后的词嵌入。例如,训练时,生成“我”的输入是
<开始>标志,生成“爱”的输入是“我”,以此类推。这体现了其自回归特性。处理:该输入逐层通过解码器的三层结构(掩码自注意力 -> 编码器-解码器注意力 -> 前馈网络),并在每层后进行Add & Norm。
输出:顶层解码器的输出,经过一个线性层(Linear) 将向量维度投影到目标语言词表大小,再通过 Softmax 函数转换为每个词的概率分布。模型选择概率最高的词作为当前时间步的输出,并作为下一个时间步的输入,如此循环,直至生成结束标志。
Transformer通过编码器并行地理解整个输入序列,再通过解码器自回归地生成输出序列。其完全基于注意力机制的设计,使其在训练时实现了极致并行,在推理时又能精准捕捉任意距离的依赖关系。这张架构图中的每一个模块,都是这一伟大设计的精妙构件,共同奠定了当今所有大语言模型的基础。