Transformer 解码器的详细推导

Transformer 解码器的详细推导

我们将详细推导 Transformer 解码器 的操作,包括具体的矩阵计算过程。主要涵盖以下步骤:

  1. 遮掩多头自注意力机制(Masked Multi-Head Self-Attention) 的计算。
  2. 编码器-解码器注意力机制(Encoder-Decoder Attention) 的计算。
  3. 残差连接和层归一化
  4. 前馈神经网络(Feed-Forward Network, FFN) 的计算。
  5. 最终输出

为简化计算,我们假设所有矩阵的维度较小,并使用简单的数值。


1. 解码器输入

假设解码器的输入序列 Y_input 为:

 

plaintext

复制代码

Y_input = [0 1] [1 0] [1 1]

这个序列有 3 个词,每个词的嵌入维度为 2。


2. 遮掩多头自注意力机制

2.1 定义投影矩阵

为了计算注意力,需要定义查询(W^Q)、键(W^K)、值(W^V)的投影矩阵。为简化,我们设定:

 

plaintext

复制代码

W^Q = W^K = W^V = [1 0] [0 1]

2.2 计算查询、键和值

计算查询 Q、键 K 和 值 V

 

plaintext

复制代码

Q = Y_input * W^Q K = Y_input * W^K V = Y_input * W^V

因此,

 

plaintext

复制代码

Q = K = V = [0 1] [1 0] [1 1]

2.3 计算未缩放的注意力得分
 

plaintext

复制代码

Q * K^T = [0 1] [0 1 1] [1 0] * [1 0 1] [1 1] [1 1 2]

计算结果为:

 

plaintext

复制代码

[1 0 1] [0 1 1] [1 1 2]

2.4 缩放并应用遮掩

我们将注意力得分缩放,假设 d_k = 2,计算缩放后的得分:

 

plaintext

复制代码

Scaled Scores = [0.707 0 0.707] [0 0.707 0.707] [0.707 0.707 1.414]

接下来应用遮掩矩阵 M

 

plaintext

复制代码

M = [0 -∞ -∞] [0 0 -∞] [0 0 0]

将遮掩矩阵添加到缩放后的注意力得分中,结果为:

 

plaintext

复制代码

Masked Scores = [0.707 -∞ -∞ ] [0 0.707 -∞ ] [0.707 0.707 1.414]

2.5 计算注意力权重

对每一行应用 softmax 函数:

  • 第一行:[0.707, -∞, -∞] -> [1, 0, 0]
  • 第二行:[0, 0.707, -∞] -> [0.330, 0.670, 0]
  • 第三行:[0.707, 0.707, 1.414] -> [0.248, 0.248, 0.504]

得到注意力权重矩阵:

 

plaintext

复制代码

Attention Weights = [1 0 0 ] [0.330 0.670 0 ] [0.248 0.248 0.504]

2.6 计算注意力输出

将注意力权重与值矩阵 V 相乘:

 

plaintext

复制代码

Attention Output = Attention Weights * V

结果为:

 

plaintext

复制代码

[0 1 ] [0.670 0.330] [0.752 0.752]


3. 残差连接和层归一化

3.1 残差连接

将注意力输出与解码器输入相加:

 

plaintext

复制代码

Z = Attention Output + Y_input = [0 2 ] [1.670 0.330] [1.752 1.752]

3.2 层归一化

对每一行进行层归一化,结果如下:

 

plaintext

复制代码

LayerNorm(Z) = [-1 1 ] [ 1 -1 ] [ 0 0 ]


4. 编码器-解码器注意力机制

4.1 获取编码器输出

假设编码器的输出为:

 

plaintext

复制代码

X_encoder = [ 1 -1 ] [-1 1 ] [ 0 0 ]

4.2 计算查询、键和值
  • 查询 Q = LayerNorm(Z) * W^Q
  • K = X_encoder
  • V = X_encoder
4.3 计算注意力得分
 

plaintext

复制代码

Q * K^T = [-1 1 ] [ 1 -1 0 ] [ 1 -1 ] * [-1 1 0 ] [ 0 0 ] [ 0 0 0 ]

结果为:

 

plaintext

复制代码

[-2 2 0] [ 2 -2 0] [ 0 0 0]

4.4 缩放并应用 softmax

我们对得分进行缩放,然后应用 softmax 得到注意力权重矩阵:

 

plaintext

复制代码

Attention Weights = [0.047 0.642 0.311] [0.642 0.047 0.311] [0.333 0.333 0.333]

4.5 计算注意力输出

将注意力权重与值矩阵 V 相乘,得到注意力输出:

 

plaintext

复制代码

Attention Output = [-0.594 0.594] [ 0.594 -0.594] [ 0 0 ]


5. 残差连接和层归一化

5.1 残差连接

将注意力输出与 LayerNorm(Z) 相加:

 

plaintext

复制代码

Z_ED = Attention Output + LayerNorm(Z) = [-1.594 1.594] [ 1.594 -1.594] [ 0 0 ]

5.2 层归一化

Z_ED 进行归一化:

 

plaintext

复制代码

LayerNorm(Z_ED) = [-1 1] [ 1 -1] [ 0 0]


6. 前馈神经网络(FFN)

6.1 计算 FFN 输出

应用 ReLU 激活函数:

 

plaintext

复制代码

FFN(x) = ReLU(x)

结果为:

 

plaintext

复制代码

FFN(x) = [ 0 1 ] [ 1 0 ] [ 0 0 ]


7. 残差连接和层归一化

7.1 残差连接

将 FFN 输出与输入相加:

 

plaintext

复制代码

Z_FFN = FFN(x) + LayerNorm(Z_ED) = [-1 2 ] [ 2 -1 ] [ 0 0 ]

7.2 层归一化

Z_FFN 进行归一化:

 

plaintext

复制代码

LayerNorm(Z_FFN) = [-1 1] [ 1 -1] [ 0 0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值