一、为什么需要Transformer?

Transformer是Google团队在2017年提出的,论文名为《Attention Is All You Need》。它的最大创新是完全抛弃了RNN和CNN,只靠注意力机制来完成序列建模。

相比RNN,Transformer有两个主要优势:

  1. 并行计算能力强:不用按时间步一步一步算,非常适合GPU训练。

  2. 长距离依赖建模能力强:自注意力可以直接看到序列中任意两个位置的关系,缓解了长序列中的梯度消失问题。

二、整体长什么样?

Transformer采用经典的编码器-解码器架构,可以分为四块:

  • 输入部分:词嵌入 + 位置编码

  • 编码器:N个相同层堆叠,每层包含多头自注意力和前馈网络

  • 解码器:N个相同层堆叠,每层包含掩码自注意力、编码器-解码器注意力和前馈网络

  • 输出部分:线性层 + Softmax

三、输入部分:让模型“看懂”文本

3.1 词嵌入(Word Embedding)

文本不能直接喂给模型,要先转成向量。流程如下:

  1. 分词:把句子切成token序列

  2. 对齐:用填充或截断让一批样本长度相同

  3. 独热编码:每个token变成高维稀疏向量

  4. 嵌入映射:通过可学习的嵌入矩阵,变成低维稠密向量

假设词表大小是 V,嵌入维度是 d,token的独热向量为 ei∈RV,嵌入矩阵为 E∈Rd×V,则词嵌入为:

x_i = E e_i, \quad x_i \in \mathbb{R}^d

3.2 位置编码(Positional Encoding)

自注意力本身不包含顺序信息,所以需要加入位置编码。最终的输入是:

z_i = x_i + p_i

Transformer使用的是正弦位置编码

PE(pos,2i) = \sin \left(\frac{pos}{10000^{2i / d}}\right)

PE(pos,2i+1) = \cos \left(\frac{pos}{10000^{2i / d}}\right)

其中 pos 是位置索引,i 是维度索引,d 是模型维度。

四、编码器:理解输入序列

4.1 自注意力机制(Self-Attention)

自注意力的目标是:根据上下文动态调整每个token的表示。对每个输入向量,我们会生成三个新向量:

  • 查询向量 Q

  • 键向量 K

  • 值向量 V

计算公式:

\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V

其中 dk 是键向量的维度,除以 dk 是为了稳定梯度。

4.2 多头注意力(Multi-Head Attention)

把多个注意力头并行计算,每个头用不同的线性变换:

\mathrm{head}_j = \mathrm{Attention}(QW_j^Q, KW_j^K, VW_j^V)

\mathrm{MultiHead}(Q,K,V) = \mathrm{Concat}(\mathrm{head}_1, \ldots, \mathrm{head}_h) W^O

多头注意力的好处是:模型可以从不同的语义子空间去关注信息。

4.3 Add & Norm 和前馈网络

每个子层后面都有残差连接层归一化

前馈网络(FFN)是两层全连接,中间用ReLU:

\mathrm{FFN}(X) = \max (0, XW_1 + b_1) W_2 + b_2

五、解码器:生成目标序列

解码器在编码器的基础上增加了两个关键点:

  • 掩码自注意力:保证当前位置只能看到之前已生成的部分,防止未来信息泄露。具体做法是把未来位置的注意力分数设为 −∞,Softmax后权重趋近于0。

  • 编码器-解码器注意力:查询来自解码器,键和值来自编码器的输出,用来实现源语言和目标语言的对齐。

六、输出部分:得到最终预测

输出部分包含一个线性层和一个Softmax:

  • 线性层:把解码器的输出映射到词表大小

  • Softmax:转换成概率分布

设解码器输出为 htht​,则预测概率为:

P(y_t = k \mid y_{< t}, X) = \mathrm{softmax}(W_o h_t + b_o)_k

训练时使用交叉熵损失

\mathcal{L} = -\sum_{t=1}^{T} \log P(y_t^* \mid y_{< t}^*, X)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐