大模型学习 (Datawhale_Happy-LLM)笔记3: Transformer 架构
1. 概述
第二章分三个不分系统地讲解了Transformer架构的理论基础与实现细节。首先,本章介绍了注意力机制,其次是 Encoder 与 Decoder,最后通过代码完整实现了一个 Transformer 架构。
2. 注意力机制 (Attention Mechanism)
注意力机制起源于计算机视觉(Computer Vision, CV)领域。核心的神经网络架构:(1)前馈神经网络 (Feedforward Neural Network, FNN)
- 输入层 (Input layer):接收原始数据,不进行计算,仅传递信号。
- 隐藏层(Hidden layer): 可以有一层或多层,每层包含多个神经元,对输入数据进行非线性变换。
- 输出层(Output layer): 产生最终预测结果。
- 特点:层与层之间完全连接,无循环或反馈连接,信号单向流动。
(2)卷积神经网络(Convolutional Neural Network, CNN)
卷积神经网络(Convolutional Neural Network, CNN)是一种专门为处理具有网格结构数据(如图像、音频)而设计的深度学习模型。它通过卷积层自动提取特征,大幅减少参数数量,主要应用于图像分类、目标检测,语义分割等领域。
**CNN 主要由三种类型的层组成:**
卷积层(Convolutional Layer):通过卷积核提取局部特征。
池化层(Pooling Layer):降维并保留主要特征。
全连接层(Fully Connected Layer):输出分类或回归结果。
**典型 CNN 架构:**
输入层 → [卷积层 → 激活函数 → 池化层] × N → 全连接层 → 输出层
(3)循环神经网络(Recurrent Neural Network, RNN)
循环神经网络是一种专门设计用于处理序列数据(如文本、语音、时间序列等)的神经网络架构。与前馈神经网络(FNN)不同,RNN 具有记忆能力,能够利用历史信息影响当前输出,其核心特点如下:
循环连接:网络中存在反馈环路,允许信息从当前时刻传递到下一时刻。
时序依赖:神经元的输出不仅取决于当前输入,还依赖于之前的隐藏状态。
参数共享:不同时间步使用相同的权重矩阵,大幅减少模型参数数量。
在注意力机制出现之前,RNN 及其变体 LSTM 的确在 NLP 任务上取得了最优效果,但仍存在两个难以弥补的缺陷:
依序计算,时间成本高
难以捕捉长距离的相关关系
(4)注意力机制原理
它是深度学习中模拟人类认知 “选择性关注” 特性的技术 —— 即让模型聚焦于输入数据中关键信息区域,忽略无关信息。其本质是对两段序列的元素依次进行相似度计算。核心参数包括:
查询(Query, Q):需要关注的目标信息
键(Key, K):输入数据的特征标识
值(Value, V):输入数据的具体内容
通过公式展示了Query、Key、Value之间的关系及其矩阵计算方式:
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention(Q,K,V)}=\text{softmax}\biggl( \Large \frac{QK^T}{\sqrt{d_{k}}} \biggr) \normalsize \text{V}Attention(Q,K,V)=softmax(dkQKT)V
(5)自注意力机制 (Self-Attention Mechanism)
自注意力机制(Self-Attention)是注意力机制的变种。简单理解自注意力机制就像给模型装了一个 “智能放大镜”,让它在处理信息时,能自动聚焦关键部分,忽略无关细节,从而更聪明地理解整体内容。通过⾃注意⼒机制,我们可以找到⼀段⽂本中每⼀个 token 与其他所有 token 的相关关系⼤⼩,从⽽建模⽂本之间的依赖关系。在代码中的实现,self-attention 机制其实是通过给 Q、K、V 的输⼊传⼊同⼀个参数实现的。
(6)掩码自注意力(Mask Self-Attention)
简单理解就是给自注意力机制加了个 “时间锁”,让模型在生成内容时只能 “向后看”(看已经处理过的信息),不能 “向前看”(看还没生成的信息),保证生成逻辑的合理性 —— 就像你写作文时,只能按顺序构思,不能先写结尾再写开头。
(7)多头注意力(Multi-head Attention)
Multi-head Attention 即同时对⼀个语料进⾏多次注意力计算,每次注意力计算都能拟合不同的关系,将最后的多次结果拼接起来作为最后的输出,即可更全⾯深⼊地拟合语⾔信息。简单说,多头注意力机制就是让模型同时用多个 “思考视角” 分析信息,每个视角专注于不同类型的关联关系(如语义、语法、位置),最后把所有视角的发现合并起来,让模型对信息的理解更全面、更深入 —— 就像一群人从不同角度观察事物,比一个人单独看更能抓住本质。我们用公式可以表示为:
MultiHead(Q, K, V)=Concat(head1,...,headh)WO\text{MultiHead(Q, K, V)} = \text{Concat}(head_1,...,head_h)W^OMultiHead(Q, K, V)=Concat(head1,...,headh)WO
where headi=Attention(QWiQ,KWiK,VWiV)\text{where} \ head_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)where headi=Attention(QWiQ,KWiK,VWiV)
3. Encoder-Decoder
在 Transformer 中,使⽤注意⼒机制的是其两个核⼼组件——Encoder
(编码器)和 Decoder(解码器)。事实上,后续基于 Transformer 架构而来的预训练语言模型基本都是对 Encoder-Decoder 部分进⾏改进来构建
新的模型架构,例如只使⽤ Encoder 的 BERT、只使⽤ Decoder 的 GPT 等。
(1)Seq2Seq
序列到序列可以简单那理解为一个能把 “一段话” 转换成 “另一段话” 的智能翻译机,它的核心是通过 “编码器” 和 “解码器” 两个部分,先把输入内容 “压缩成思想包”,再把思想包 “扩展成目标内容”。就像你看中文小说时,大脑先理解内容(编码器),然后用英文转述出来(解码器)。
(2)前馈神经网络(FeedFoward Neural Network, FNN)
FNN 是一个 “信息向前单向加工的数学流水线”:输入数据像原材料一样进入网络,经过隐藏层的 “权重计算 + 激活函数ReLU” 层层加工,最后从输出层得到结果。它的核心是通过多层非线性变换,把简单特征组合成复杂特征,从而解决分类、回归等问题,是深度学习中最基础的网络结构之一。
(3)层归一化(Layer Norm)
Layer Norm(层归一化)可以理解为给神经网络的“输入数据”做“统一规格化处理”,就像把不同尺寸的快递盒塞进标准大小的快递袋里,让后续处理更高效。核心目的是让同一层的神经元输入数据分布更稳定,避免某些数据“太突出”或“太弱小”导致网络学习困难。 它特别适合处理长度变化的序列数据(如文本),不依赖批次大小,就像给每个学生单独按班级平均分打分,让神经网络能更公平地学习不同特征的重要性。
对比Batch Norm(批量归一化):应用场景的区别
场景 | Layer Norm(层归一化) | Batch Norm(批量归一化) |
---|---|---|
标准化维度 | 对单个样本的同一层所有特征做归一化 | 对同一批次中每一层所有样本的同一特征做归一化 |
类比 | 单个学生在班级内的成绩标准化 | 不同班级同一科目的成绩标准化 |
适用场景 | 变长序列(如NLP中不同长度的句子):每个样本独立处理,不依赖批次数据 | 固定长度输入(如图像):需要批次数据计算统计量 |
是否依赖批次大小 | 不依赖(只看单个样本的层内特征) | 依赖(批次越小,统计量越不准) |
(4)残差连接(Residual Connection or Skip Connection)
在传统前馈神经网络中,数据按顺序流经每一层:一层的输出是下一层的输入。
残差连接通过跳过某些层,为数据到达神经网络的后续部分提供了另一条路径。考虑从第 i 层到第 i + n 层的一系列层,令 F 表示这些层所代表的函数。将第 i 层的输入记为 x。在传统前馈设置中,x 将简单地逐层通过这些层,第 i + n 层的输出为 F (x)。残差连接首先对 x 应用恒等映射,然后执行元素级加法 F (x) + x。
(5)Encoder 和 Decoder 代码
Encoder 由 N 个 Encoder Layer 组成, 每一个 Encoder Layer 包括一个注意力层和一个 FNN,在最后加入一个 Layer Norm 实现归一化。
同理,Decoder 由 N 个 Decoder Layer 组成,不同的是,Decoder Layer 由两个注意力层和一个 FNN 组成。 第一个 Attention Layer 是 Mask Self-Attention保证每⼀个 token 只能使用该 token 之前的注意力分数;第⼆个注意力层是⼀个多头注意力层,该层将使⽤第⼀个注意⼒层的输出作为 query,使用 Encoder 的输出作为 key 和 value,来计算注意力分数。最后,再经过前馈神经网络。