深度学习模型Transformer核心组件—自注意力机制

第一章:人工智能之不同数据类型及其特点梳理
第二章:自然语言处理(NLP):文本向量化从文字到数字的原理
第三章:循环神经网络RNN:理解 RNN的工作机制与应用场景(附代码)
第四章:循环神经网络RNN、LSTM以及GRU 对比(附代码)
第五章:理解Seq2Seq的工作机制与应用场景中英互译(附代码)
第六章:深度学习架构Seq2Seq-添加并理解注意力机制(一)
第七章:深度学习架构Seq2Seq-添加并理解注意力机制(二)
第八章:深度学习模型Transformer初步认识整体架构
第九章:深度学习模型Transformer核心组件—自注意力机制
第十章:理解梯度下降、链式法则、梯度消失/爆炸
第十一章:Transformer核心组件—残差连接与层归一化

假设我们有一个想要翻译的输入句子:“这只动物没有穿过街道,因为它太累了。”

这句话中的“它”指的是什么?是指“街道”还是“动物”呢?对于人类来说,这是一个简单的问题,但对于算法而言则不然。

当模型处理到单词“它”时,自注意力机制允许模型将“它”与“动物”关联起来。

当模型处理每个单词(即输入序列中的每个位置)时,自注意力机制允许模型查看输入序列中的其他位置,以寻找有助于为该单词生成更好编码的线索。

如果你对RNN(循环神经网络)有所了解,可以想想维持隐藏状态是如何让RNN将其对之前处理过的词或向量的表示与当前正在处理的词结合起来的。自注意力就是Transformer用来将其他相关词的理解融入到当前正在处理的词中的方法。

一、自注意力机制工作原理

自注意力机制(Self-Attention),也称为内部注意力机制(Intra-Attention),是Transformer模型的核心组成部分。它允许模型在处理序列数据时,能够考虑到序列中不同位置之间的关系,从而有效地捕捉长距离依赖。
在这里插入图片描述

  1. 输入表示:假设我们有一个输入序列 X = ( x 1 , x 2 , . . . , x n ) X = (x_1, x_2, ..., x_n) X=(x1,x2,...,xn),其中每个 x i x_i xi都是一个向量(例如词嵌入)。

  2. 线性变换:对输入序列中的每个元素应用三个不同的线性变换(通过学习得到的权重矩阵),生成查询(Query)、键(Key)和值(Value)向量:

    • 查询向量 Q = X W Q Q = XW_Q Q=XWQ
    • 键向量 K = X W K K = XW_K K=XWK
    • 值向量 V = X W V V = XW_V V=XWV
      其中, W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV 是模型需要学习的参数矩阵。
      在这里插入图片描述
  3. 计算注意力分数:对于序列中的每个位置 i i i,使用 Q K ⊤ QK^\top QK
    点积来计算当前位置与其他所有位置之间的相似度(即注意力分数Score)。
    在这里插入图片描述

    这可以通过以下公式完成:
    Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
    这里, d k d_k dk 是键向量的维度,分母中的 d k \sqrt{d_k} dk 用于缩放,避免点积结果过大导致softmax函数饱和。
    在这里插入图片描述

  4. 加权求和:根据计算出的注意力分数,为每个位置的值向量分配权重,并进行加权求和,得到输出序列 Z Z Z
    在这里插入图片描述

二、自注意力推导示例

假设输入序列为两个词,维度 d k = 3 d_k=3 dk=3
X = [ 1 0 1 0 1 1 ] , W Q = [ 1 0 0 1 1 0 ] , W K = [ 0 1 1 0 0 1 ] , W V = [ 1 1 0 1 1 0 ] X = \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 1 \\ \end{bmatrix}, \quad W^Q = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 1 & 0 \\ \end{bmatrix}, \quad W^K = \begin{bmatrix} 0 & 1 \\ 1 & 0 \\ 0 & 1 \\ \end{bmatrix}, \quad W^V = \begin{bmatrix} 1 & 1 \\ 0 & 1 \\ 1 & 0 \\ \end{bmatrix} X=[100111],WQ= 101010 ,WK= 010101 ,WV= 101110

  1. 计算 Q、K、V
    Q = X W Q = [ 2 0 1 1 ] , K = X W K = [ 1 2 1 1 ] , V = X W V = [ 2 1 1 1 ] Q = XW^Q = \begin{bmatrix} 2 & 0 \\ 1 & 1 \end{bmatrix}, \quad K = XW^K = \begin{bmatrix} 1 & 2 \\ 1 & 1 \end{bmatrix}, \quad V = XW^V = \begin{bmatrix} 2 & 1 \\ 1 & 1 \end{bmatrix} Q=XWQ=[2101],K=XWK=[1121],V=XWV=[2111]

  2. 计算注意力分数
    Q K ⊤ 3 = 1 3 [ 4 2 2 2 ] \frac{QK^\top}{\sqrt{3}} = \frac{1}{\sqrt{3}} \begin{bmatrix} 4 & 2 \\ 2 & 2 \end{bmatrix} 3 QK=3 1[4222]

  3. Softmax 归一化
    Softmax ( [ 4 / 3 2 / 3 2 / 3 2 / 3 ] ) ≈ [ 0.88 0.12 0.5 0.5 ] \text{Softmax}\left(\begin{bmatrix} 4/\sqrt{3} & 2/\sqrt{3} \\ 2/\sqrt{3} & 2/\sqrt{3} \end{bmatrix}\right) \approx \begin{bmatrix} 0.88 & 0.12 \\ 0.5 & 0.5 \end{bmatrix} Softmax([4/3 2/3 2/3 2/3 ])[0.880.50.120.5]

  4. 加权求和
    Attention ( Q , K , V ) = [ 0.88 0.12 0.5 0.5 ] @ [ 2 1 1 1 ] = [ 0.88 × 2 + 0.12 × 1 0.88 × 1 + 0.12 × 1 0.5 × 2 + 0.5 × 1 0.5 × 1 + 0.5 × 1 ] = [ 1.88 1.0 1.5 1.0 ] \text{Attention}(Q, K, V) =\begin{bmatrix} 0.88 & 0.12 \\ 0.5 & 0.5 \end{bmatrix} @ \begin{bmatrix} 2 & 1 \\ 1 & 1 \end{bmatrix}= \begin{bmatrix} 0.88 \times 2 + 0.12 \times 1 & 0.88 \times 1 + 0.12 \times 1 \\ 0.5 \times 2 + 0.5 \times 1 & 0.5 \times 1 + 0.5 \times 1 \end{bmatrix} = \begin{bmatrix} 1.88 & 1.0 \\ 1.5 & 1.0 \end{bmatrix} Attention(Q,K,V)=[0.880.50.120.5]@[2111]=[0.88×2+0.12×10.5×2+0.5×10.88×1+0.12×10.5×1+0.5×1]=[1.881.51.01.0]

W Q W^Q WQ W K W^K WK W V W^V WV,这三个 W W W 怎么得来的,有什么作用,为什么要和 X 分别相乘

三、如何得到 W Q W^Q WQ W K W^K WK W V W^V WV

  • 初始化与学习:这些权重矩阵通常是在训练开始时随机初始化的,并通过反向传播算法在训练过程中不断调整以最小化损失函数。换句话说,它们是通过训练过程自动学习得到的,目的是为了优化模型在特定任务上的性能。

  • 作用

    • W Q W^Q WQ (Query Weight Matrix):用于将输入向量 X X X转换为查询向量 Q Q Q。查询向量代表了对于某个位置的信息“查询”或需求。
    • W K W^K WK (Key Weight Matrix):用于将输入向量 X X X转换为键向量 K K K。键向量是用来与查询向量进行比较,以确定哪些部分的信息是相关的。
    • W V W^V WV (Value Weight Matrix):用于将输入向量 X X X转换为值向量 V V V。值向量包含了实际的内容信息,这些信息将根据注意力分数被加权组合。

四、 W Q W^Q WQ W K W^K WK W V W^V WV为什么要与 X X X 分别相乘

  1. 不同视角的理解:通过使用不同的权重矩阵将相同的输入向量 X X X映射到不同的空间,模型可以从多个角度理解输入数据。例如,一个单词在一个句子中可能扮演多种角色(如主语、宾语等),通过不同的变换可以捕捉到这些多样的信息。

  2. 增强表达能力:这种机制极大地增强了模型的表达能力。因为即使面对相同的输入,通过不同的权重矩阵可以产生多样化的输出,从而使得模型能够更灵活地捕捉序列中的复杂模式和依赖关系。

  3. 实现自我关注机制:在自注意力机制中, Q Q Q K K K之间的交互(即点积操作)用于衡量输入序列中各元素间的相关性或相似度。然后,基于这些相似度得分对 V V V进行加权求和,以生成每个位置的新表示。这样做的好处是可以让模型在构建每个位置的表示时考虑到整个序列的信息,而不是仅仅局限于局部邻域内的信息。

总之, W Q W^Q WQ W K W^K WK W V W^V WV的存在是为了将输入向量映射到不同的表示空间,从而使得模型能够在计算自注意力时从多个维度理解输入数据。这一过程不仅提高了模型处理序列数据的能力,还使其能够有效地捕捉长距离依赖关系。

五、Q为什么要和 K 的转置 K T K^T KT求点积

(Q)与 K T K^T KT(即键(K)的转置)点积这一操作是为了计算注意力分数,也就是衡量输入序列中各个元素之间的相似度或关联程度。
在这里插入图片描述

  1. 计算相似度:在自注意力机制中,我们需要一种方法来量化序列中每个位置与其他所有位置之间的相关性或相似度。通过将查询向量 Q Q Q 与键向量 K K K 的转置 K T K^T KT 求点积,我们可以得到一个矩阵,其中每个元素代表了一个位置的查询向量与另一个位置的键向量之间的点积。这个点积可以看作是一种相似度得分,表示两个向量方向上的接近程度。

  2. 维度匹配:假设我们有一个输入序列长度为 n n n,每个位置对应的向量维度为 d k d_k dk 。那么, Q Q Q K K K 都是形状为 [ n , d k ] [n, d_k] [n,dk] 的矩阵。为了使 Q Q Q 中的每个查询向量能够与 K K K 中的每个键向量进行比较,我们需要将 K K K 转置成形状为 [ d k , n ] [d_k, n] [dk,n] 的矩阵。这样,当执行 Q × K T Q \times K^T Q×KT 时,结果就是一个形状为 [ n , n ] [n, n] [n,n] 的矩阵,其中每个元素 A i j A_{ij} Aij 表示第 i i i 个位置的查询向量与第 j j j 个位置的键向量之间的相似度得分。

  3. 生成注意力权重:一旦得到了相似度得分矩阵,接下来会通过softmax函数将其转换为概率分布,这些概率就是所谓的“注意力权重”。它们决定了在计算最终输出时,每个位置的值向量 V V V 应该被赋予多少权重。换句话说,它决定了哪些位置的信息对于当前位置最为重要。

  4. 加权求和得到输出:最后,使用上述获得的注意力权重对值向量 V V V 进行加权求和,从而产生新的表示形式,该表示综合了整个序列的信息,并且更加侧重于那些被认为更重要的位置。

综上所述, Q Q Q K T K^T KT 点积是自注意力机制中用于计算输入序列中各个元素之间相似度的核心步骤。这一步骤允许模型动态地评估并整合来自序列内不同位置的信息,从而捕捉到复杂的模式和依赖关系。

六、 Q K ⊤ QK^\top QK为什么要除以 d k \sqrt{d_k} dk

防止梯度过大或过小

  1. 梯度消失或爆炸问题:当输入向量的维度较高时,点积的结果可能会非常大或者非常小。这会导致softmax函数的输出变得极端(接近0或1),从而引发梯度消失或梯度爆炸的问题。这是因为softmax函数对输入的尺度非常敏感,特别是在其输入值较大或较小时。

  2. 归一化效果:通过除以 d k \sqrt{d_k} dk ,可以有效地将点积的结果控制在一个合理的范围内。这样做有助于保持softmax函数输入值的稳定性,使其不会因为输入过大而饱和到极端值,也不会因为输入过小而导致所有输出几乎相同的情况。

实践中的影响

  • 训练稳定性:适当缩放可以提高训练过程的稳定性,使得模型更容易收敛。
  • 性能提升:通过这种方式,可以改善模型的表现,因为它有助于维持每一层输入的尺度一致,避免了某些层的激活值过于膨胀或收缩。

示例数据

第一组:未缩放时 - 注意力权重趋向极端分布

假设我们有如下输入序列,每个词被表示为一个4维向量,并且这些向量之间的差异较大:

  • x 1 = [ 1 , 2 , 3 , 4 ] x_1 = [1, 2, 3, 4] x1=[1,2,3,4]
  • x 2 = [ 5 , 6 , 7 , 8 ] x_2 = [5, 6, 7, 8] x2=[5,6,7,8]
  • x 3 = [ 9 , 10 , 11 , 12 ] x_3 = [9, 10, 11, 12] x3=[9,10,11,12]

这些向量通过线性变换得到查询 Q Q Q、键 K K K(这里为了简化,直接使用原始向量作为 Q Q Q K K K)。

计算 Q K ⊤ QK^\top QK
Q K ⊤ = [ 1 2 3 4 5 6 7 8 9 10 11 12 ] [ 1 5 9 2 6 10 3 7 11 4 8 12 ] = [ 30 70 110 70 174 278 110 278 446 ] QK^\top = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \end{bmatrix} \begin{bmatrix} 1 & 5 & 9 \\ 2 & 6 & 10 \\ 3 & 7 & 11 \\ 4 & 8 & 12 \end{bmatrix} = \begin{bmatrix} 30 & 70 & 110 \\ 70 & 174 & 278 \\ 110 & 278 & 446 \end{bmatrix} QK= 159261037114812 123456789101112 = 307011070174278110278446

应用Softmax函数到每一行上,得到注意力权重矩阵:
softmax ( Q K ⊤ ) ≈ [ 0.001 0.018 0.981 0.000 0.002 0.998 0.000 0.000 1.000 ] \text{softmax}(QK^\top) \approx \begin{bmatrix} 0.001 & 0.018 & 0.981 \\ 0.000 & 0.002 & 0.998 \\ 0.000 & 0.000 & 1.000 \end{bmatrix} softmax(QK) 0.0010.0000.0000.0180.0020.0000.9810.9981.000
可以看到,在这种情况下,未经缩放的点积结果导致了非常极端的注意力权重分布。特别是对于第三个位置,几乎所有的注意力都集中在自身上,而忽略了其他位置的信息。

第二组:缩放后 - 权重分布更平缓

现在考虑相同的输入序列,但在计算 Q K ⊤ QK^\top QK后除以 d k \sqrt{d_k} dk ,其中 d k = 4 d_k=4 dk=4,因此缩放因子是 1 2 \frac{1}{2} 21

重新计算 Q K ⊤ / d k QK^\top/\sqrt{d_k} QK/dk
Q K ⊤ d k = 1 2 × [ 30 70 110 70 174 278 110 278 446 ] = [ 15 35 55 35 87 139 55 139 223 ] \frac{QK^\top}{\sqrt{d_k}} = \frac{1}{2} \times \begin{bmatrix} 30 & 70 & 110 \\ 70 & 174 & 278 \\ 110 & 278 & 446 \end{bmatrix} = \begin{bmatrix} 15 & 35 & 55 \\ 35 & 87 & 139 \\ 55 & 139 & 223 \end{bmatrix} dk QK=21× 307011070174278110278446 = 153555358713955139223

接着应用Softmax函数到每一行上,得到调整后的注意力权重矩阵:
softmax ( Q K ⊤ d k ) ≈ [ 0.011 0.269 0.720 0.002 0.092 0.906 0.000 0.024 0.976 ] \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) \approx \begin{bmatrix} 0.011 & 0.269 & 0.720 \\ 0.002 & 0.092 & 0.906 \\ 0.000 & 0.024 & 0.976 \end{bmatrix} softmax(dk QK) 0.0110.0020.0000.2690.0920.0240.7200.9060.976

对比与解释

  • 未缩放的情况:在第一组的例子中,由于点积结果非常大,导致Softmax输出的概率分布极其不均衡,某些位置几乎完全占据了注意力权重,这不利于模型学习序列中的复杂依赖关系。

  • 缩放的情况:第二组的数据展示了当应用缩放因子后,Softmax函数产生的概率分布更加平滑。虽然第三个位置仍然获得了较高的注意力权重,但相比于未缩放情况下的极端分布,这里的权重分布明显更加合理和平缓,允许模型更好地捕捉不同位置之间的关系。

七、不缩放为什么会导致梯度消失?

  1. Softmax函数的导数
    Softmax函数的导数依赖于其自身的输出。具体来说,如果某个位置的Softmax输出接近1,则该位置对应的梯度将会很小,因为Softmax函数在其输出接近1的地方几乎是平坦的。相反,对于那些输出接近0的位置,其梯度也会非常小,因为这些位置对最终输出的影响微乎其微。

  2. 梯度传播
    在反向传播过程中,梯度通过网络层逐层传递。如果某一层的激活值(在这里是Softmax的输出)导致梯度变得非常小,那么这一小部分梯度将被进一步传播到前面的层,导致前层接收到的用于参数更新的信号极其微弱。这种情况称为“梯度消失”。

  3. 极端分布的影响
    当注意力权重分布极为不均衡(例如,一个位置几乎占据了所有注意力,而其他位置的注意力权重接近0),这会导致大部分路径上的梯度变得极小。由于梯度是参数更新的关键依据,过小的梯度意味着模型难以有效调整其权重以适应训练数据,从而可能导致训练停滞或者学习速度显著减慢。

上面的例子,未缩放的情况
softmax ( Q K ⊤ ) ≈ [ 0.001 0.018 0.981 0.000 0.002 0.998 0.000 0.000 1.000 ] \text{softmax}(QK^\top) \approx \begin{bmatrix} 0.001 & 0.018 & 0.981 \\ 0.000 & 0.002 & 0.998 \\ 0.000 & 0.000 & 1.000 \end{bmatrix} softmax(QK) 0.0010.0000.0000.0180.0020.0000.9810.9981.000

在这种情况下,我们可以观察到第三行的注意力权重几乎完全集中在最后一个位置(即权重为1.000)。这意味着对于第三个位置,它几乎不会考虑来自其他位置的信息,这不仅限制了模型捕捉长距离依赖的能力,而且由于Softmax输出接近1,其梯度也将非常小。具体来说:

  • 对于第三行,Softmax输出为[0.000, 0.000, 1.000],这意味着在反向传播过程中,对于第一和第二位置,由于它们的注意力权重接近0,所以从损失函数回传到这两个位置的梯度也非常小。
  • 同样地,对于那些获得较高注意力权重的位置(如第三个位置),尽管它们会接收到来自后续层的一些梯度信息,但由于Softmax在其输出接近1的区域几乎是平坦的,因此这部分梯度也非常有限。

这种现象在整个网络中传播时,会导致前面的层接收到的梯度信号极其微弱,进而导致梯度消失问题,使得模型难以有效地更新其参数。

八、为什么是除以 d k \sqrt{d_k} dk ,不是其他其他变量或者数字

在Transformer模型中,将查询(Q)和键(K)的点积结果除以 d k \sqrt{d_k} dk 的主要原因是为了控制点积的方差,防止因维度 d k d_k dk增大导致Softmax函数输入值过大而引发的梯度消失问题

1. 数学推导:点积的方差分析

假设查询向量 Q Q Q和键向量 K K K的每个元素是独立同分布的随机变量,均值为0,方差为1:
E [ Q i ] = E [ K j ] = 0 , Var ( Q i ) = Var ( K j ) = 1. \mathbb{E}[Q_i] = \mathbb{E}[K_j] = 0, \quad \text{Var}(Q_i) = \text{Var}(K_j) = 1. E[Qi]=E[Kj]=0,Var(Qi)=Var(Kj)=1.

则点积 Q ⋅ K = ∑ i = 1 d k Q i K i Q \cdot K = \sum_{i=1}^{d_k} Q_i K_i QK=i=1dkQiKi的方差为:
Var ( Q ⋅ K ) = ∑ i = 1 d k Var ( Q i K i ) ( 独立项方差相加 ) = d k ⋅ E [ Q i 2 K i 2 ] ( 因  E [ Q i ] = E [ K i ] = 0 ) = d k ⋅ Var ( Q i ) Var ( K i ) ( 独立性 ) = d k ⋅ 1 ⋅ 1 = d k . \begin{aligned} \text{Var}(Q \cdot K) &= \sum_{i=1}^{d_k} \text{Var}(Q_i K_i) \quad (\text{独立项方差相加}) \\ &= d_k \cdot \mathbb{E}[Q_i^2 K_i^2] \quad (\text{因}\ \mathbb{E}[Q_i] = \mathbb{E}[K_i] = 0) \\ &= d_k \cdot \text{Var}(Q_i) \text{Var}(K_i) \quad (\text{独立性}) \\ &= d_k \cdot 1 \cdot 1 = d_k. \end{aligned} Var(QK)=i=1dkVar(QiKi)(独立项方差相加)=dkE[Qi2Ki2]( E[Qi]=E[Ki]=0)=dkVar(Qi)Var(Ki)(独立性)=dk11=dk.

结论:点积的方差与维度 d k d_k dk成正比,即维度越大,点积值的波动范围越大。

2. Softmax函数的敏感性

Softmax函数对输入值的绝对大小非常敏感。当输入值 z i z_i zi的绝对值较大时,输出会趋向于极端值(如0或1),导致梯度消失:
Softmax ( z i ) = e z i ∑ j e z j , ∂ Softmax ( z i ) ∂ z j = Softmax ( z i ) ( δ i j − Softmax ( z j ) ) . \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}, \quad \frac{\partial \text{Softmax}(z_i)}{\partial z_j} = \text{Softmax}(z_i)(\delta_{ij} - \text{Softmax}(z_j)). Softmax(zi)=jezjezi,zjSoftmax(zi)=Softmax(zi)(δijSoftmax(zj)).
若某个 z i z_i zi远大于其他值, Softmax ( z i ) ≈ 1 \text{Softmax}(z_i) \approx 1 Softmax(zi)1,梯度趋近于零,阻碍参数更新。

3. 缩放因子的选择

为了稳定点积的方差,需将点积结果缩放,使其方差与 d k d_k dk无关。由于点积的方差为 d k d_k dk,标准差为 d k \sqrt{d_k} dk ,因此选择除以 d k \sqrt{d_k} dk
Scaled Dot-Product = Q K ⊤ d k . \text{Scaled Dot-Product} = \frac{QK^\top}{\sqrt{d_k}}. Scaled Dot-Product=dk QK.
效果

  • 方差归一化:缩放后的方差为 d k ( d k ) 2 = 1 \frac{d_k}{(\sqrt{d_k})^2} = 1 (dk )2dk=1,与维度无关。
  • 数值稳定:无论 d k d_k dk多大,点积值被限制在合理范围内,避免Softmax输入过大。
  • 梯度保留:Softmax输出的分布更平缓,保留有效的梯度流动。

4. 为什么不是其他缩放方式?

  1. 除以 d k d_k dk

    • 方差变为 d k d k 2 = 1 d k \frac{d_k}{d_k^2} = \frac{1}{d_k} dk2dk=dk1,随维度增加急剧减小,导致数值过小。
    • 引发梯度不稳定,尤其在高维度下。
  2. 使用常数(如2)

    • 无法适应不同维度的模型,导致低维时缩放不足,高维时缩放过度。
  3. 其他函数(如 log ⁡ d k \log d_k logdk

    • 缺乏数学依据,增加复杂性且无实际收益。

选择 d k \sqrt{d_k} dk 的优势

  • 直接对应于点积的标准差,数学上自然。
  • 保持方差恒为1,适应任意维度。
  • 实现简单,计算高效。

5. 实际训练验证

  • 未缩放时:当 d k = 64 d_k=64 dk=64,点积值可能达到数十或数百,Softmax输出接近one-hot,梯度消失。
  • 缩放后:点积值被限制在 [ − 8 , + 8 ] [-8, +8] [8,+8](假设原始值在 [ − 64 , + 64 ] [-64, +64] [64,+64]),Softmax输出保留合理分布(如 [ 0.7 , 0.2 , 0.1 ] [0.7, 0.2, 0.1] [0.7,0.2,0.1]),梯度有效传播。
操作数学意义实际影响
计算 Q K ⊤ QK^\top QK衡量相似度生成原始注意力分数
除以 d k \sqrt{d_k} dk 标准差归一化稳定数值范围,防止梯度消失
应用Softmax概率归一化生成注意力权重

关键结论

除以 d k \sqrt{d_k} dk 是唯一能同时满足以下条件的缩放方式:

  1. 方差稳定:控制点积方差为1,与维度无关。
  2. 计算高效:无需复杂运算,直接缩放。
  3. 训练友好:确保Softmax输入在合理范围,保留梯度流动性。

九、总结

自注意力机制让Transformer能够灵活地处理序列数据中的每一个元素,并且可以同时考虑整个序列的信息,这对于理解句子结构、捕捉长距离依赖关系等非常有帮助。此外,由于其并行化特性,相较于RNN/LSTM等序列模型,Transformer在处理长序列时更加高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29957.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS 源码结构解析与 STM32 HAL 库移植实践(任务创建、删除篇)

1. FreeRTOS源码结构介绍 1.1 下载源码 ​ 点击官网地址,选择 FreeRTOS 202212.01非 LTS 版本(非长期支持版),因为这个版本有着最全的历程和更多型号处理器支持。 1.2 文件夹结构介绍 ​ 下载后主文件 FreeRTOSv202212.01 下包…

【uniapp】图片添加canvas水印

目录 需求&背景实现地理位置添加水印 ios补充 需求&背景 需求:拍照后给图片添加水印, 水印包含经纬度、用户信息、公司logo等信息。 效果图: 方案:使用canvas添加水印。 具体实现:上传图片组件是项目里现有的&#xff…

基于Windows11的DockerDesktop安装和布署方法简介

基于Windows11的DockerDesktop安装和布署方法简介 一、下载安装Docker docker 下载地址 https://www.docker.com/ Download Docker Desktop 选择Download for Winodws AMD64下载Docker Desktop Installer.exe 双点击 Docker Desktop Installer.exe 进行安装 测试Docker安装是…

AI自习室渐兴:人工智能赋能教育新场景的深度剖析

在数字化浪潮席卷全球的今天,教育领域也迎来了前所未有的变革。近年来,AI自习室作为人工智能技术与传统教育融合的产物,在河北等多地悄然兴起,成为学生们的新宠。这一新兴的学习场所,不仅引发了社会的广泛关注&#xf…

Android中AIDL和HIDL的区别

在Android中,AIDL(Android Interface Definition Language) 和 HIDL(HAL Interface Definition Language) 是两种用于定义跨进程通信接口的语言。AIDL 是 Android 系统最早支持的 IPC(进程间通信&#xff0…

从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动

目录 所以,键盘是如何工作的 说一说我们的8042 输出缓冲区寄存器 状态寄存器 控制寄存器 动手! 注册中断 简单整个键盘驱动 Reference ScanCode Table 我们下一步就是准备进一步完善我们系统的交互性。基于这个,我们想到的第一个可以…

【JavaEE】-- 多线程(初阶)4

文章目录 8.多线程案例8.1 单例模式8.1.1 饿汉模式8.1.2 懒汉模式 8.2 阻塞队列8.2.1 什么是阻塞队列8.2.2 生产者消费者模型8.2.3 标准库中的阻塞队列8.2.4 阻塞队列的应用场景8.2.4.1 消息队列 8.2.5 异步操作8.2.5 自定义实现阻塞队列8.2.6 阻塞队列--生产者消费者模型 8.3 …

用Python分割并高效处理PDF大文件

在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

Python——计算机网络

一.ip 1.ip的定义 IP是“Internet Protocol”的缩写,即“互联网协议”。它是用于计算机网络通信的基础协议之一,属于TCP/IP协议族中的网络层协议。IP协议的主要功能是负责将数据包从源主机传输到目标主机,并确保数据能够在复杂的网络环境中正…

【MySQL】事务|概念|如何回滚|基本特性|MySQL事务隔离性具体怎么实现的

目录 1.为啥引入 2.是啥 3.如何回滚(日志) 🔥4.面试题:谈谈事务的基本特性 (1)原子性 (2)一致性(收入和支出相匹配) (3)持久性…

deepseek 本地部署

deepseek 本地部署 纯新手教学,手把手5分钟带你在本地部署一个私有的deepseek,再也不用受网络影响。流畅使用deepseek!!! 如果不想看文章,指路:Deep seek R1本地部署 小白超详细教程 &#xff0…

⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II

⭐算法OJ⭐N-皇后问题【回溯剪枝】(C实现)N-Queens 问题描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…

关联封号率降70%!2025最新IP隔离方案实操手册

高效运营安全防护,跨境卖家必看的风险规避指南 跨境账号管理的核心挑战:关联封号风险激增 2024年,随着全球电商平台对账号合规的审查日益严苛,“关联封号”已成为跨境卖家最头疼的问题之一。无论是同一IP登录多账号、员工操作失误…

pytest框架 核心知识的系统复习

1. pytest 介绍 是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。 优点: 语法简洁(用 assert 替代 self.assertEqual)。 自动发现测试用例。 丰富的插件生态(如失败重试、并发执…

搭建BOA服务器

BOA服务器是嵌入式常用的服务器类型,嵌入式程序作为后端时候如果想配合网页进行显示,利用BOA服务器搭建网络界面是不错的选择 首先下载boa官方安装包 Boa Webserver 下载后传输到Ubuntu随便文件夹,解压 tar -xvf boa-0.94.13.tar.gz 进入…

C# OPC DA获取DCS数据(提前配置DCOM)

OPC DA配置操作手册 配置完成后,访问远程ip,就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据,支持订阅(数据变化)、单个读取、单个写入、断线重连

Ubuntu20.04搭建gerrit code review

一、环境准备 1. 安装 Java 环境‌ Gerrit 依赖 Java 运行环境(推荐 JDK 8): sudo apt install openjdk-11-jdk 验证安装: java -version ‌2. 安装 Git sudo apt install git ‌3. 可选依赖 数据库‌:Gerrit …

【FSM-3: 串行序列】

FSM-3:串行序列 1 Serial receiver FSM使用总结: 所有涉及输出的driver原则上用cur_sta;若是使用nxt_sta的相当于是提前一拍知道结果,所以对于输出必须要使用clocked reg,这样才能和cur_sta对应起来;描述声…

蓝桥杯 之 前缀和与查分

文章目录 题目求和棋盘挖矿 前缀和有利于快速求解 区间的和、异或值 、乘积等情况差分是前缀和的反操作 前缀和 一维前缀和: # 原始的数组num,下标从1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的区…

国产化板卡设计原理图:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡

基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于 FPGAJFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持PXIE标准协议,其中XJ3…