NLP自然语言处理-Transformer架构 作者:马育民 • 2025-12-28 22:41 • 阅读:10002 # 介绍 Transformer的整体结构**非常对称、简洁**,论文中的经典结构只有 **6层编码器 + 6层解码器**,所有大模型都是在这个基础上堆叠层数(比如GPT-3堆叠了96层)、增大维度得到的。 # 总体架构 在机器翻译中,Transformer可以将一种语言翻译成另一种语言,如果把Transformer看成一个黑盒,那么其结构如下图所示: [](https://www.malaoshi.top/upload/0/0/1GW2UP94tmTR.png) ### 总体架构:编码器(Encoder) + 解码器(Decoder) Transformer由若干个 **编码器** 和 **解码器** 组成: - 编码器负责 **理解文本** - 解码器负责 **生成文本** 输入文本先经过 **编码器** 处理得到 `语义特征`,再传给 **解码器**,解码器基于这个特征生成目标文本。 `输入 → 编码器 → 语义特征 → 解码器 → 输出` [](https://www.malaoshi.top/upload/0/0/1GW2UPBeZOFc.png) ### 编码器、解码器架构图 左边为编码器,右边为解码器: [](https://www.malaoshi.top/upload/0/0/1GW2UPIhmEv8.png) # 一、编码器(Encoder) 理解文本的 `读懂模块`【N层堆叠,论文中N=6】 编码器是**对称的、全相同的结构堆叠**,每一层的内部结构完全一样,**所有编码器共享权重**,核心作用:**对输入的文本做深度的语义理解,输出一个包含完整上下文信息的特征矩阵**。 ### 编码器单一层的内部结构(固定4步,顺序不变) 1. **多头自注意力层(Multi-Head Self-Attention)**:核心模块,计算每个词和其他词的关联,捕捉上下文信息; 2. **残差连接 + LayerNorm(层归一化)**:Transformer的「保命机制」,解决深度学习的梯度消失问题,让模型能堆叠更多层,训练更稳定; → 残差连接:把输入直接加到输出上,相当于「走捷径」,梯度可以直接传递; → LayerNorm:对每层的输出做归一化,让数据分布更稳定,加速训练。 3. **前馈神经网络(Feed Forward Network, FFN)**:两层全连接层,对每个词的特征做「非线性变换」,提取更复杂的语义特征,**所有词并行计算**; 4. **残差连接 + LayerNorm**:和第二步一样,完成单一层的处理。 ### 编码器的输入与输出 - 输入:经过**词嵌入+位置编码**后的向量矩阵(比如一句话有10个词,每个词是512维向量,输入就是10×512的矩阵); - 输出:编码器的最后一层输出一个**和输入维度完全相同的特征矩阵**,这个矩阵里包含了**每个词的完整上下文语义信息**,也叫「上下文表征」。 ### 编码器的核心特点 - **双向注意力**:编码器的自注意力是**全双向**的,能看到一个词的「左边所有词」和「右边所有词」,比如处理「小明爱小红」中的「爱」,能同时看到「小明」和「小红」,完美理解语义; - **只做理解,不做生成**:编码器没有生成能力,只是把文本转换成机器能理解的特征。 # 二、编码器(Encoder)的计算过程 ### 1. 第一层 生成Query、Key、Value 向量 自注意力机制的第一步,是将输入序列中的每个位置表示映射为三个不同的向量,分别是 `查询(Query)`、`键(Key)` 和 `值(Value)` [](https://www.malaoshi.top/upload/0/0/1GW2UV2xamn6.png) - **Query**:表示当前词的用于发起注意力匹配的向量; - **Key**:表示序列中每个位置的内容标识,用于与Query进行匹配; - **Value**:表示该位置携带的信息,用于加权汇总得到新的表示。 自注意力的核心思想是:每个位置用自身的 `Query向量`,与整个序列中所有位置的 `Key向量` 进行相关性计算,从而得到注意力权重,并据此对对应的 `Value向量` 加权汇总 三个向量的计算公式如下: [](https://www.malaoshi.top/upload/0/0/1GW2UVGf9zYm.png) 其中,$$W\_{q}$$,$$W\_{k}$$,$$W\_{v}$$ 均为可学习的参数矩阵。 论文中:`x` 是 512维向量,`q` 是 64维向量 # 二、解码器(Decoder):生成文本的「写作模块」【N层堆叠,论文中N=6】 解码器也是**对称的、全相同的结构堆叠**,每一层的内部结构和编码器相似,但多了一个核心模块,核心作用:**基于编码器输出的语义特征,「自左到右」生成目标文本,一次生成一个词,直到生成结束符**。 ### 解码器单一层的内部结构(固定6步,顺序不变,比编码器多2步) 1. **掩码多头自注意力层(Masked Multi-Head Self-Attention)**:核心创新点,「掩码」是关键! → 解码器是**生成式模型**,生成文本时是「从左到右」逐个生成的,比如生成「我爱中国」,先生成「我」,再生成「爱」,最后生成「中国」; → 生成「爱」的时候,模型**不能看到后面的「中国」**,否则就是「作弊」,掩码的作用就是**把未来的词全部屏蔽掉**,让模型只能看到「已经生成的词」; → 这一层的作用:捕捉生成文本内部的上下文关联,比如生成的「我」和「爱」的关联。 2. **残差连接 + LayerNorm**:和编码器一致; 3. **交叉注意力层(Encoder-Decoder Attention)**:解码器的第二个注意力层,核心作用是**让生成的词「关注」编码器输出的语义特征**; → 比如做机器翻译(中译英),编码器输出的是中文的语义特征,解码器生成英文时,每个英文词会去关注对应的中文词,比如生成「I」时关注「我」,生成「love」时关注「爱」; 4. **残差连接 + LayerNorm**:和编码器一致; 5. **前馈神经网络(FFN)**:和编码器一致,做非线性变换; 6. **残差连接 + LayerNorm**:完成单一层的处理。 ### 解码器的输入与输出 - 输入:① 编码器的输出特征矩阵 ② 已经生成的目标文本(词嵌入+位置编码); - 输出:解码器最后一层输出一个向量,经过**Softmax层**转换成「概率分布」,概率最大的词就是当前生成的词。 # 三、Transformer的最后一步:线性层 + Softmax层 解码器的输出是一个高维向量,需要经过这两层转换成最终的输出: 1. **线性层**:把高维向量映射到「词表维度」(比如词表有3万个词,就映射成3万维向量); 2. **Softmax层**:把3万维向量转换成**0~1之间的概率分布**,每个维度对应一个词的概率,概率最大的词就是模型最终生成的词。 原文出处:http://malaoshi.top/show_1GW2UVPLSEtF.html