QKV 归一化步及多层感知机 MLP

在 Transformer 模型中,QKV 输出的值通常会经过一个归一化步骤,随后通过一个多层感知机(MLP)来进一步处理。以下是这些步骤的详细说明:

计算输出

首先,我们根据注意力概率和值向量 V 计算每个词的输出。这里,我们使用之前计算的 Softmax 概率:

  • 输出(你好) = Softmax(你好) · [V(你好), V(我), …, V(世界)]
  • 输出(我) = Softmax(我) · [V(你好), V(我), …, V(世界)]
  • 输出(美丽) = Softmax(美丽) · [V(你好), V(我), …, V(世界)]
  • 输出(的) = Softmax(的) · [V(你好), V(我), …, V(世界)]
  • 输出(编程) = Softmax(编程) · [V(你好), V(我), …, V(世界)]
  • 输出(世界) = Softmax(世界) · [V(你好), V(我), …, V(世界)]
    由于这些输出向量可能会因为加权求和而变得很大,我们通常会在通过 MLP 之前对它们进行归一化。

归一化

归一化通常采用以下两种方式之一:

  1. Layer Normalization:对每个输出向量独立进行归一化,计算其均值和标准差,然后进行缩放和平移。
    • 均值(μ) = (输出(你好) + 输出(我) + … + 输出(世界)) / 6
    • 标准差(σ) = sqrt(Σ[(输出(你好) - 均值)² + … + (输出(世界) - 均值)²] / 6)
    • 归一化输出 = (输出 - 均值) / (σ + ε) * γ + β
      其中,ε 是一个小的常数以避免除以零,γ 和 β 是可学习的参数。
  2. Batch Normalization:如果我们的数据是以批次形式处理的,我们可以使用批归一化。不过,这在 Transformer 模型中不常见。

多层感知机(MLP)

归一化之后,输出向量会通过一个 MLP,通常包括两个全连接层,第一个后面跟着一个激活函数(如 ReLU)。

  • 第一层全连接:[输出向量] → Z = W₁ × [输出向量] + b₁
  • 激活函数:A = ReLU(Z)
  • 第二层全连接:[MLP输出] = W₂ × A + b₂
    这里的 W₁、W₂、b₁ 和 b₂ 是可学习的参数。

完整的例子

让我们以“你好”的输出为例,展示这个过程:

  1. 假设“你好”的输出向量是 [o_你好]。
  2. 归一化 [o_你好] 得到 [n_你好]。
  3. 通过 MLP 处理 [n_你好] 得到最终的输出。
    以下是伪代码:
# 假设输出向量
o_你好 = Softmax(你好) · [V(你好), V(), ..., V(世界)]
# Layer Normalization
mean = np.mean(o_你好)
std = np.std(o_你好)
n_你好 = (o_你好 - mean) / (std + ε) * γ + β
# MLP
Z = W₁ @ n_你好 + b₁
A = ReLU(Z)
final_output_你好 = W₂ @ A + b₂

这里的 @ 表示矩阵乘法,ReLU 是激活函数,εγβ 是 Layer Normalization 的参数,W₁W₂b₁b₂ 是 MLP 的权重和偏置。通过这个过程,我们得到了“你好”的最终输出,其他词的输出也以相同的方式计算。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨航 AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值