Transformer学习笔记

        Transformer模型是一种基于自注意力机制(Self-Attention)的深度学习架构,主要用于处理序列数据(如自然语言文本)。它由Google的研究团队在2017年的论文《Attention Is All You Need》中首次提出,彻底改变了自然语言处理(NLP)领域,并成为后续众多模型(如BERT、GPT等)的核心基础。

主要学习参考:

【超详细】【原理篇&实战篇】一文读懂Transformer-优快云博客

Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili

1.主要模型框架

Transformer 主要由 Encoder-Decoder 结构 组成,每个部分由多个相同的 编码器(Encoder) 和 解码器(Decoder) 组成。

(1) 编码器(Encoder)

  • 输入处理:输入序列通过词嵌入(Embedding)转换成向量,并加上 位置编码(Positional Encoding),因为 Transformer 没有循环结构,需要额外的位置信息。

  • 多头自注意力(Multi-Head Self-Attention):计算每个词对整个句子中其他词的依赖关系,能够关注不同的语义层面。

  • 前馈神经网络(Feed-Forward Network, FFN):每个编码层都有一个独立的前馈神经网络,提高模型的表达能力。

  • 残差连接(Residual Connection)和层归一化(Layer Normalization):稳定训练过程,加速收敛。

(2) 解码器(Decoder)

  • Masked Multi-Head Self-Attention:与编码器不同,解码器的自注意力层会遮挡(mask)未来的词,确保当前词只能关注之前的词,避免信息泄露。

  • 编码器-解码器注意力(Encoder-Decoder Attention):计算解码器当前状态与编码器输出之间的注意力,获取全局信息。

  • FFN 和残差连接:类似编码器部分,解码器也使用前馈网络和残差连接来优化训练。

简化来讲就是这样

2. Transformer 的核心算法

        Transformer 的关键在于自注意力机制(Self-Attention)和 多头注意力(Multi-Head Attention),主要计算如下:

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

        目标:计算输入序列中每个单词与其他单词的关系,并生成加权表示。

         计算方式:

  1. 计算 查询(Query, Q)、键(Key, K) 和 值(Value, V):

    Q = XW_Q, \quad K = XW_K, \quad V = XW_V

    其中,X 是输入序列的嵌入表示,W_Q, W_K, W_V 是可训练的权重矩阵。

  2. 计算注意力分数:

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

    其中,\frac{1}{\sqrt{d_k}}是缩放因子,防止数值过大影响梯度计算。

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

        为了增强模型的表达能力,Transformer 采用 多头注意力,即使用多个不同的注意力头(Head)并行计算:

\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, ..., \text{head}_h) W_O

每个头的计算方式与普通自注意力一致,但使用不同的权重矩阵。

自注意力机制的推导:

①定义 Q、K、V

在 Transformer 中,每个输入词 XXX 通过一个 线性变换 生成 查询(Query, Q)、键(Key, K) 和 值(Value, V):

Q = XW_Q, \quad K = XW_K, \quad V = XW_V

其中:

  • Q(查询,Query):表示当前词对其他词的关注程度

  • K(键,Key):用于计算当前词和其他词的匹配程度

  • V(值,Value):存储词的真实信息

这些 Q,K,VQ, K, VQ,K,V 矩阵的维度通常是:Q, K, V \in \mathbb{R}^{n \times d_k}

  • n 是序列长度(即多少个词)

  • d_k​ 是词嵌入的维度(如 512 或 768 )

② 计算注意力分数

我们希望衡量 查询(Q) 和 键(K) 之间的相似度(即:某个词应该关注哪些词)。
可以用点积(Dot Product)来计算两个向量的相似度:

                                                                 QK^T
  • 其中,Q的形状是 (n, d_k)

  • K^T 的形状是(d_k, n)

  • 结果 QK^T 形状是 (n,n),表示 序列中每个词对其他词的关注程度

问题:为什么用点积?

  • 点积可以衡量 向量之间的相似性:当两个向量方向相同时,点积较大;当方向正交时,点积接近 0。

③ 归一化(缩放因子)

                                                                  \frac{QK^T}{\sqrt{d_k}}
  • 由于 QK^T 的值可能很大,导致 softmax 计算时梯度过大,影响训练的稳定性。

  • 解决方法:除以 \sqrt{d_k}​​ 进行归一化,防止梯度消失或爆炸。

为什么是 \sqrt{d_k}

  • 从数学角度来看,点积的数值范围会随 d_k 增大而增大,使得 softmax 变得过于极端(梯度消失或爆炸)。

  • 归一化后,点积的值接近 0 均值,softmax 更平滑,训练更稳定。

④ 计算 softmax

                                                          \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right)
  • softmax 作用是 将注意力分数归一化为概率,确保所有词的注意力加起来等于 1。

  • 每一行表示 当前词对所有词的注意力权重。

⑤ 加权求和

最后,我们用这个归一化的注意力权重 乘以值矩阵 V:

                                     \text{Attention}(Q, K, V) = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) V
  • 目的是用注意力权重对 值矩阵(V) 进行加权求和,从而得到最终的注意力向量。

3. Transformer 的计算流程

  1. 输入序列嵌入:输入文本转换为词向量,并添加位置编码(Positional Encoding)。

  2. 编码器层:

    • 多头自注意力 计算词间关系

    • 前馈网络 进行特征变换

    • 残差连接 + 层归一化 进行稳定训练

  3. 解码器层:

    • Masked 多头自注意力 确保当前词不影响未来词

    • 编码器-解码器注意力 关注源文本信息

    • 前馈网络 + 残差连接 提高模型表达能力

  4. 输出层:

    • 最终输出经过 softmax 变换,得到预测的下一个单词的概率分布。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值