Contents

Transformer

transformer架构

Transformer

基于自注意力机制和多头注意力机制

Attention Is All You Need

  • 作者:Vaswani et al.
  • 年份:2017
  • 链接论文链接
  • 贡献:提出了 Transformer 架构,完全基于自注意力机制,取代了传统的循环神经网络(RNN)。这是注意力机制在自然语言处理中的重要里程碑。

注意力机制

注意力就是权重,即关注程度

Q,K,V

查询(自主性提示)、键、值

/posts/algorithm_knowledge_base/9_transformer/1.png

权重由注意力评分函数计算

自注意力机制 (Self-Attention)

source=target这种特殊的注意力机制

同一输入序列内部计算注意力,使得每个元素都可以与其他元素进行交互,增强上下文信息的理解。

/posts/algorithm_knowledge_base/9_transformer/2.png

每个词表示为其他所有词的加权和

整体架构

/posts/algorithm_knowledge_base/9_transformer/3.png

训练时使用的是教师强制,预测第n+1个token时输入前n个token真实值

训练时:第i个decoder的输入 = encoder输出 + ground truth embeding

预测时:第i个decoder的输入 = encoder输出 + 第(i-1)个decoder输出

训练时因为知道ground truth embeding,相当于知道正确答案,网络可以一次训练完成

预测时,首先输入start,输出预测的第一个单词 然后start和新单词组成新的query,再输入decoder来预测下一个单词,循环往复 直至end

相当于训练时是有标签的

/posts/algorithm_knowledge_base/9_transformer/4.png

concat 操作

拼接输出:将所有注意力头的输出拼接在一起,形成一个大的特征向量。
Concat(Attention1,Attention2,…,Attentionh)=Attention1∥Attention2∥…∥Attentionh
Concat(Attention1,Attention2,…,Attentionh)=Attention1∥Attention2∥…∥Attentionh

其中 hh 是注意力头的数量,∥∥ 表示拼接操作。

/posts/algorithm_knowledge_base/9_transformer/5.png

Transformer 模型中的前馈网络主要负责对输入进行特征转换和表示学习,以便于模型理解输入序列的语义信息和结构关系。这些前馈网络通常是浅层的,只有一个或两个全连接隐藏层,以减少模型的复杂度,并避免过拟合

/posts/algorithm_knowledge_base/9_transformer/6.png

/posts/algorithm_knowledge_base/9_transformer/7.png

线性变换

在 Transformer 模型中,线性变换后的输出是一个 logits 向量,这个向量用于表示每个可能输出(通常是词汇表中的词)的得分。具体来说,以下是线性变换后输出的详细过程:

1. 解码器输出

在 Transformer 的解码器部分,经过多层自注意力和编码器-解码器注意力之后,最终生成的输出是一个表示当前时间步的上下文特征的向量。这一向量通常被称为解码器的输出。

2. 线性变换

  • 线性层:解码器的输出经过一个线性层(全连接层),将其映射到词汇表的维度。假设词汇表大小为 VVV,解码器的输出向量维度为 dmodeld_{model}dmodel​,则线性变换的公式为:Logits=W⋅Output+b

    Logits=W⋅Output+b\text{Logits} = W \cdot \text{Output} + b

    其中:

    • WWW 是权重矩阵,维度为 V×dmodel​。

      V×dmodelV \times d_{model}

    • Output\text{Output}Output 是解码器的输出向量,维度为 dmodel​。

      dmodeld_{model}

    • bbb 是偏置项,维度为 V。

      VV

3. 输出解释

  • Logits 向量:线性变换后的输出,即 logits 向量,维度为 V,表示模型对于词汇表中每个词的得分。这些得分并不直接表示概率,而是用来计算每个词的相对可能性。

    VV

4. 进一步处理

  • Softmax 函数:将 logits 向量传递给 Softmax 函数,转换为概率分布,使得每个词的输出概率可以用来选择下一个生成的词。P(yi​=k)=∑j​elogitsj​elogitsk​​

    P(yi=k)=elogitsk∑jelogitsjP(y_i = k) = \frac{e^{\text{logits}k}}{\sum{j} e^{\text{logits}_j}}

总结

在 Transformer 中,线性变换后的输出是一个 logits 向量,它用于表示模型对每个可能输出的得分。这个 logits 向量随后通过 Softmax 函数转换为概率分布,从而实现下一个词的预测。

softmax激活

在 Transformer 模型中,Softmax 函数被用于预测输出概率,特别是在生成序列时,例如文本生成、翻译等任务。以下是 Transformer 如何利用 Softmax 进行输出概率预测的详细步骤:

1. 模型结构

Transformer 主要由编码器和解码器组成。解码器负责生成输出序列,其最后一层通常是线性层后接 Softmax 函数。

2. 生成输出序列的步骤

2.1 输入处理

  • 在解码器中,输入通常是前一个时间步的输出(或者是特定的起始符号)。
  • 解码器中的自注意力机制和编码器-解码器注意力机制用于生成当前时间步的上下文表示。

2.2 线性变换

  • 解码器的输出经过线性层(也称为全连接层),将其映射到词汇表大小的维度。Logits=W⋅Output

    Logits=W⋅Output\text{Logits} = W \cdot \text{Output}

    其中 WWW 是权重矩阵,Output\text{Output}Output 是解码器的输出。

2.3 Softmax 函数

  • 对于生成的 logits,使用 Softmax 函数将其转换为概率分布:P(yi​=k)=∑j​elogitsj​elogitsk​​

    P(yi=k)=elogitsk∑jelogitsjP(y_i = k) = \frac{e^{\text{logits}k}}{\sum{j} e^{\text{logits}_j}}

    其中 kkk 表示词汇表中的每个词,logitsk\text{logits}_klogitsk​ 是对应词的 logits 值。

3. 输出解释

  • Softmax 的输出 P(yi​) 表示当前时间步生成每个词的概率。这些概率可以用于选择最可能的下一个词:

    P(yi)P(y_i)

    • 采样:可以通过随机选择一个词(根据概率分布)来生成文本。
    • 贪婪搜索:选择概率最大的词作为输出。
    • 束搜索(Beam Search):在生成过程中维护多个候选序列,以提高生成的质量。

4. 损失计算

  • 在训练过程中,使用交叉熵损失来衡量模型预测的概率分布与实际目标分布之间的差距:Loss=−i∑​yi​log(P(yi​))

    Loss=−∑iyilog⁡(P(yi))\text{Loss} = -\sum_{i} y_i \log(P(y_i))

    其中 yiy_iyi​ 是目标词的独热编码,P(yi)P(y_i)P(yi​) 是模型预测的概率。

总结

在 Transformer 中,Softmax 函数通过将线性变换后的输出映射为概率分布,使得模型能够预测下一个词的可能性。这一机制使得 Transformer 在序列生成任务中表现出色,能够灵活处理多种类型的文本生成和翻译任务。

训练中的shifted right操作

在 Transformer 模型的训练中,“shifted right” 是指将目标输出序列向右移动一个位置,从而在解码器中进行自回归的训练过程。这是序列生成任务(例如机器翻译、文本生成)中常用的技巧,用于确保解码器在预测当前词时只能访问先前的词,而不能看到未来词,从而避免“数据泄露”。以下是这一操作的详细过程:

1. Shifted Right 的操作步骤

假设我们有目标输出序列 y=[y1,y2,y3,…,yn]\text{y} = [y_1, y_2, y_3, \ldots, y_n]y=[y1​,y2​,y3​,…,yn​]:

  • 原始目标序列:包含模型应该预测的词,例如 [y_1, y_2, y_3, \ldots, y_n]
  • Shifted Right 序列:在解码器输入时,将目标序列右移一位,并在最前面插入一个特定的起始标记 <start>(例如 [<start>, y_1, y_2, \ldots, y_{n-1}]),用于指导模型生成完整的输出序列。

2. 为什么需要 Shifted Right

  • 自回归建模:在生成第 t 个词 yt​ 时,模型只能访问它之前的词(即 [y_1, y_2, \ldots, y_{t-1}]),从而模拟生成过程中的自回归特性。

    tt

    yty_t

  • 避免信息泄露:如果解码器在第 t 步直接看到 yt​ 之后的词,模型会利用未来信息,导致训练与实际生成过程不一致。因此,Shifted Right 强制模型只能基于先前的上下文来预测当前词。

    tt

    yty_t

3. 实际应用

在具体实现中,Shifted Right 通常在解码器输入中完成。例如:

  • 训练输入:输入解码器的序列为 [<start>, y_1, y_2, ..., y_{n-1}]
  • 训练标签:模型的预测目标为 [y_1, y_2, y_3, ..., y_n],用于计算损失。

这样,解码器在第 ttt 步预测 yty_tyt​ 时,能够访问的是 [,y1,y2,…,yt−1][, y_1, y_2, …, y_{t-1}][,y1​,y2​,…,yt−1​] 而不是包含未来词的完整序列。

4. Masking 和 Shifted Right 配合

在实际操作中,Transformer 的解码器还使用了 Masking(掩码) 技术,进一步确保模型仅关注之前的词。例如,利用三角矩阵掩码让解码器在第 ttt 步只能访问到 [,y1,y2,…,yt−1][, y_1, y_2, \ldots, y_{t-1}][,y1​,y2​,…,yt−1​]。

总结

Shifted Right 是 Transformer 模型在解码器中训练序列生成任务的关键操作,通过向右移动目标序列,模型能够模拟生成序列的自回归过程,确保预测时不会使用未来信息。

LN层

  • Batch Normalization (BN)在批次维度上进行归一化,即对每个 mini-batch 内的所有样本的同一特征进行归一化。公式中使用的是每个 mini-batch 内特征的均值和方差。适合卷积神经网络(CNN)等批量大小比较大的场景。
  • Layer Normalization (LN):在层维度上进行归一化,即对每个样本的所有特征进行归一化。公式中使用的是单个样本的所有特征的均值和方差。适合循环神经网络(RNN)和 Transformer 等批量大小较小或动态性强的场景。

ViT

待续…