Transformer总结(三):组件介绍(位置编码,多头注意,残差连接,层归一化,基于位置的前馈网络)


Transformer总结(二)中介绍Transformer的整体架构,下文主要介绍其中涉及的一些组件,尽可能从多角度来探讨它们的作用。

一、位置编码

【Transformer系列】深入浅出理解Positional Encoding位置编码

一文通透位置编码:从标准位置编码、旋转位置编码RoPE到ALiBi、LLaMA 2 Long(含NTK-aware简介)

Transformer总结(一):基础介绍(注意力机制、自注意力机制、位置编码、多头注意力机制)

1.1 介绍

Transformer模型本身不具有处理序列顺序的能力,为了让模型能够理解词序,就需要借助位置编码注入位置信息。

  • 位置编码将位置信息注入到输入里:假设长度为 n n n的序列是 X ∈ R n × d X\in \mathbb{R}^{n\times d} XRn×d

    • 使用位置编码矩阵 P ∈ R n × d P\in \mathbb{R}^{n\times d} PRn×d,输出 X + P X+P X+P作为自编码输入

    • P P P中的元素根据列的奇偶差异,分为: p i , 2 j = sin ⁡ ( i 1000 0 2 j d ) p_{i,2j}=\sin(\frac{i}{10000^{\frac{2j}{d}}}) pi,2j=sin(10000d2ji) p i , 2 j + 1 = cos ⁡ ( i 1000 0 2 j d ) p_{i,2j+1}=\cos(\frac{i}{10000^{\frac{2j}{d}}}) pi,2j+1=cos(10000d2ji) j j j始于0

    • 绝对位置信息:在上述公式中,频率 ω j = 1 1000 0 2 j d \omega_j=\frac{1}{10000^{\frac{2j}{d}}} ωj=10000d2j1,从函数定义中可以得出,频率沿向量维度减小, j j j越大,波长越长;不同词元的位置编码仅由其位置唯一决定

    • 相对位置信息:选择正弦余弦曲线函数,可以让模型更加轻易的学习关注相对位置信息
      [ cos ⁡ ( δ ω j ) sin ⁡ ( δ ω j ) − sin ⁡ ( δ ω j ) cos ⁡ ( δ ω j ) ] [ p i , 2 j p i , 2 j + 1 ] = [ sin ⁡ ( ( i + δ ) ω j ) cos ⁡ ( ( i + δ ) ω j ) ] = [ p i + δ , 2 j p i + δ , 2 j + 1 ] \begin{bmatrix}\cos(\delta\omega_j) & \sin(\delta\omega_j)\\-\sin(\delta\omega_j) & \cos(\delta\omega_j)\end{bmatrix}\begin{bmatrix}p_{i,2j}\\p_{i,2j+1}\end{bmatrix}=\begin{bmatrix}\sin((i+\delta)\omega_j)\\\cos((i+\delta)\omega_j)\end{bmatrix}=\begin{bmatrix}p_{i+\delta,2j}\\p_{i+\delta,2j+1}\end{bmatrix} [cos(δωj)sin(δωj)sin(δωj)cos(δωj)][pi,2jpi,2j+1]=[sin((i+δ)ωj)cos((i+δ)ωj)]=[pi+δ,2jpi+δ,2j+1]
      通过一个 2 × 2 2\times2 2×2的投影矩阵(与 i i i值无关),便可以实现线性投影,也可以理解为某个单词的位置信息是其他单词位置信息的线性组合,这种线性组合就意味着位置向量中蕴含了相对位置信息。
      在这里插入图片描述

1.2 简单探讨

不过值得探讨的是此处对位置编码的使用,它可以与词向量直接相加,也可以直接拼接到词向量后面,而论文选择使用前者,并且前者确实足够有效,从直观角度来看,直接相加可能导致信息损失,但这种损失依然被神经网络强大的抽象能力所理解,并从中得到了更加丰富的上下文信息。


二、多头注意力

Transformer总结(一):基础介绍(注意力机制、自注意力机制、位置编码、多头注意力机制)

d2l-10.5 多头注意力

2.1 一般的多头注意力机制

给定查询 q ∈ R d q q\in \mathbb{R}^{d_q} qRdq、键 k ∈ R d k k\in \mathbb{R}^{d_k} kRdk和值 v ∈ R d v v\in \mathbb{R}^{d_v} vRdv,每个注意力头的计算方法为:
h i = f ( W i ( q ) q , W i ( k ) k , W i ( v ) v ) ∈ R p v h_i=f(W_i^{(q)}q,W_i^{(k)}k,W_i^{(v)}v)\in\mathbb{R}^{p_v} hi=f(Wi(q)q,Wi(k)k,Wi(v)v)Rpv
多头注意力的输出需要经过另一个线性转换, 它对应着 h h h个头连结后的结果:
W o [ h 1 ⋮ h h ] ∈ R p v W_o\begin{bmatrix}h_1\\\vdots\\h_h\end{bmatrix}\in \mathbb{R}^{p_v} Wo h1hh Rpv

  • 其中可学习的参数包括: W i ( q ) ∈ R p q × d q W_i^{(q)}\in\mathbb{R}^{p_q\times d_q} Wi(q)Rpq×dq W i ( k ) ∈ R p k × d k W_i^{(k)}\in\mathbb{R}^{p_k\times d_k} Wi(k)Rpk×dk W i ( v ) ∈ R p v × d v W_i^{(v)}\in\mathbb{R}^{p_v\times d_v} Wi(v)Rpv×dv W o ∈ R p o × h p v W_o\in\mathbb{R}^{p_o\times hp_v} WoRpo×hpv
  • 代表注意力汇聚的函数 f f f,此时是缩放点积注意力

在这里插入图片描述

2.2 解码器中的掩码多头注意力机制(Look-ahead Mask)

Transformer总结(二)中的3.4.2 讨论了掩码机制是在解码器的训练阶段发挥作用,是为了并行计算时可以获得不同时间步的输入,此时将讨论是如何实现这种掩码计算。

图片来源(Illustrated Guide to Transformers Neural Network: A step by step explanation)

首先根据一般的多头注意力计算得到注意力分数矩阵,此时尚未引入mask
在这里插入图片描述

在计算完注意力分数之后,此时分数矩阵还没有经过sofamax操作,将其与一个右上角填充了负无穷大的mask矩阵相加,相加之后得到一个新的注意力分数矩阵。根据观察,可以发现,在这个新的矩阵上,单词与其后的单词的注意力分数变为了负无穷大。
在这里插入图片描述

对注意力分数使用softmax操作,可以发现原先负无穷大的值逼近了0,它们的注意力权重也就可以忽略不计了。在这里插入图片描述


三、残差连接

Deep Residual Learning for Image Recognition论文原文

在Transformer模型中,残差连接(Residual Connection) 通过将输入数据与其通过子层变换后的数据相加,以提高模型的训练稳定性和深度。这种操作不仅保留了原始数据的某些信息,还允许模型学习输入数据的多个层次表示。
在这里插入图片描述


四、层归一化

详解三种常用标准化 Batch Norm & Layer Norm & RMSNorm
Group Normalization(图片出处)

4.1 对比不同的Normalization

在这里插入图片描述

  • N N N表示批量轴
  • C C C表示通道轴(特征轴)
  • ( H , W ) (H,W) (H,W)表示空间轴
  • 蓝色像素是相应计算时涉及到的位置,通过相同的平均值和方差进行归一化,聚合这些像素的值来计算。

从上图不难发现,不同的归一化方法区别只在于像素集选取的差异。但上图对于数据的表示需要特别说明一下:

  • 如果是2D图片,可以构成一个4D向量,以 (N, C, H, W ) 顺序索引特征,其中 N 是批处理轴,C 是通道轴, H和W是空间高度和宽度轴。
  • 如果是句子,可以将其理解为高度为1的数据,像素的通道数就是token的特征向量长度, C C C作为词嵌入特征向量的索引, ( H , W ) (H,W) (H,W)理解为一个句子中词元的索引。

4.2 Batch Normalization的实现

在这里插入图片描述
如果以 S i S_i Si表示每次计算归一化时涉及到的位置集,Batch Normalization对应的 S i S_i Si定义为:
S i = { k ∣ k C = i C } S_i=\{k\vert k_C=i_C\} Si={kkC=iC}
这意味着只要特征轴索引相同的位置会被一起归一化。

结合上图,Batch Normalization处理的是同一个特征轴下的元素,需要访问每个批次以及其中所有的样本。

  • 如果是图片,它将访问所有批次所有样本的某张特征图,4D向量为(N, C, H, W ) 时,将计算C次归一化
  • 一般不使用BN来处理NLP问题,因为句子长度不一,如果以特征图的角度来理解,也就是不同批次下特征图的大小不同,不利于使用。

4.3 Layer Normalization的实现

在这里插入图片描述
Layer Normalization对应的 S i S_i Si定义为:
S i = { k ∣ k N = i N } S_i=\{k\vert k_N=i_N\} Si={kkN=iN}
这意味着只要批量轴索引相同的位置会被一起归一化。

不过此时需要特别说明

  • CV领域是使用上述公式来进行层归一化计算,如果是图片,每次计算它将访问同一批次下所有的元素(同一批次里所有样本所有通道)
  • 在Transformer模型中,是以token为单位单独计算,每次计算它只会访问句子中一个词元对应的特征向量,如对于形状为(2,3,4)的向量,它将计算6次层归一化。

4.4 Layer Normalization所处位置的讨论

OnLayer Normalization in the Transformer Architecture
《为什么Pre Norm的效果不如Post Norm?》-苏剑林
pre-norm 和 post-norm 的区别 -唐翔昊
在这里插入图片描述
在上述架构中,改变了归一化操作所处的位置,具体而言就是 P r e   N o r m Pre\ Norm Pre Norm是先进行归一化,再将数据输入子层,最后进行残差,公式描述如下:
P r e   N o r m :    x t + 1 = x t + F t ( N o r m ( x t ) ) Pre\ Norm:\ \ x_{t+1}=x_t+F_t(Norm(x_t)) Pre Norm:  xt+1=xt+Ft(Norm(xt))
P o s t   N o r m :    x t + 1 = N o r m ( x t + F t ( x t ) ) Post\ Norm:\ \ x_{t+1}=Norm(x_t+F_t(x_t)) Post Norm:  xt+1=Norm(xt+Ft(xt))

  • 同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm。
    • 一个L层的Pre Norm模型,其实际等效层数不如L层的Post Norm模型,而层数少了导致效果变差。
    • Pre Norm结构会过度倾向于恒等分支(bottom layers),从而使得Pre Norm倾向于退化(degradation)为一个“浅而宽”的模型,最终不如同一深度的Post Norm。

4.5 何以使用LN而非BN

  • 4.2中已经说明了BN不适用于不定长的序列,可能导致训练的不稳定。
  • BN会损失样本之间的信息差异性,而LN是按照词元进行计算,可以保留不同词之间的差异性。

五、基于位置的前馈网络

在这里插入图片描述

F F N ( X ) = m a x ( 0 , X W 1 + b 1 ) W 2 + b 2 FFN(X)=max(0,XW_1+b_1)W_2+b_2 FFN(X)=max(0,XW1+b1)W2+b2
在Transformer模型中,前馈网络(Feed-Forward Network,FFN)的作用是对序列数据进行进一步的非线性变换,使得模型能够捕捉到更复杂的特征,具体而言就是先将数据映射到高维空间再映射到低维空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值