深度学习基础笔记 (6) :注意力机制、Transformer

《动手学深度学习》笔记——注意力机制、Transformer


深度学习基础笔记 (1) :预备知识(张量、梯度、概率…)
深度学习基础笔记 (2) :深度神经网络 DNN
深度学习基础笔记 (3) :优化算法(梯度下降、冲量法、Adam…)
深度学习基础笔记 (4) :卷积神经网络 CNN
深度学习基础笔记 (5) :计算机视觉(目标检测、语义分割、样式迁移)
深度学习基础笔记 (6) :注意力机制、Transformer
深度学习PyTorch代码模板



1 注意力机制

动物需要在复杂环境下有效关注值得注意的点
心理学框架:人类根据随意线索和不随意线索选择注意点

1.1 基本概念

卷积、全连接、池化层都只考虑不随意线索。
注意力机制(Attention Mechanism)则显示地考虑随意线索/意志线索(Volitional Cue),常称为查询(Query)。

  • 每个输入是一个(Value)和不随意线索/(Key)的对 ( x i , y i ) (x_i,y_i) (xi,yi)
  • 通过注意力池化层(Attention Pooling)来对查询 x x x 有偏向性地选择输入 f ( x ) f(x) f(x),可以表示为 f ( x ) = ∑ i α ( x , x i ) y i f(x)=\sum_i \alpha(x,x_i)y_i f(x)=iα(x,xi)yi其中 α ( x , x i ) \alpha(x,x_i) α(x,xi)注意力权重

在这里插入图片描述

1.2 非参数注意力池化

给定询问 x x x 以及键值对数据 ( x i , y i ) ,   i = 1 , 2 , ⋯   , n (x_i,y_i),\ i=1,2,\cdots,n (xi,yi), i=1,2,,n平均池化(Average Pooling)是前文解决回归问题时常用的最简单的估计器,即 f ( x ) = 1 n ∑ i = 1 n y i f(x)=\frac1n\sum_{i=1}^n y_i f(x)=n1i=1nyi更好的方案是60年代提出的Nadaraya-Watson核回归(Nadaraya-Watson Kernel Regression),如下所示 f ( x ) = ∑ i = 1 n K ( x − x i ) ∑ j = 1 n K ( x − x j ) y i f(x)=\sum_{i=1}^n \frac{K(x-x_i)}{\sum\limits_{j=1}^n K(x-x_j)}y_i f(x)=i=1nj=1nK(xxj)K(xxi)yi其中 K ( u ) K(u) K(u)高斯核(Gaussian kernel),定义为 K ( u ) = 1 2 π exp ⁡ ( − u 2 2 ) K(u)=\frac1{\sqrt{2\pi}}\exp(-\frac{u^2}{2}) K(u)=2π 1exp(2u2)则非参数的Nadaraya-Watson核回归可化简为 f ( x ) = ∑ i = 1 n exp ⁡ ( − 1 2 ( x − x i ) 2 ) ∑ j = 1 n exp ⁡ ( − 1 2 ( x − x j ) 2 ) y i = ∑ i = 1 n softmax ( − 1 2 ( x − x i ) 2 ) y i f(x)=\sum_{i=1}^n \frac{\exp(-\frac12(x-x_i)^2)}{\sum\limits_{j=1}^n \exp(-\frac12(x-x_j)^2)}y_i=\sum_{i=1}^n \text{softmax}(-\frac12(x-x_i)^2)y_i f(x)=i=1nj=1nexp(21(xxj)2)exp(21(xxi)2)yi=i=1nsoftmax(21(xxi)2)yi

1.3 带参数注意力池化

非参数的Nadaraya-Watson核回归具有一致性(Consistency)的优点: 如果有足够的数据,此模型会收敛到最优结果。在此基础上引入可以学习的 w w w ,如下所示 f ( x ) = ∑ i = 1 n softmax ( − 1 2 ( ( x − x i ) w ) 2 ) y i f(x)=\sum_{i=1}^n \text{softmax}(-\frac12((x-x_i)w)^2)y_i f(x)=i=1nsoftmax(21((xxi)w)2)yi


2 注意力评分函数

上述高斯核指数部分可以视为注意力评分函数(Attention Scoring Function),简称评分函数,是询问和键的相似度。注意力权重是分数的softmax结果。

在这里插入图片描述

2.1 拓展到高维度

设询问 q ∈ R q \mathbf{q} \in \mathbb{R}^q qRq ,键值对 ( k 1 , v 1 ) , ⋯   , ( k m , v m ) (\mathbf{k}_1,\mathbf{v}_1),\cdots,(\mathbf{k}_m,\mathbf{v}_m) (k1,v1),,(km,vm) ,其中 k i ∈ R k , v i ∈ R v \mathbf{k}_i\in \mathbb{R}^k,\mathbf{v}_i\in \mathbb{R}^v kiRk,viRv ,则注意力池化函数 f f f 表示为 f ( q , ( k 1 , v 1 ) , ⋯   , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i ∈ R v α ( q , k i ) = softmax ( a ( q , k i ) ) = exp ⁡ ( a ( q , k i ) ) ∑ j = 1 m exp ⁡ ( a ( q , k j ) ) ∈ R f(\mathbf{q},(\mathbf{k}_1,\mathbf{v}_1),\cdots,(\mathbf{k}_m,\mathbf{v}_m))=\sum_{i=1}^m \alpha(\mathbf{q},\mathbf{k}_i)\mathbf{v}_i \in \mathbb{R}^v \\ \alpha(\mathbf{q},\mathbf{k}_i)=\text{softmax}(a(\mathbf{q},\mathbf{k}_i))=\frac{\exp(a(\mathbf{q},\mathbf{k}_i))}{\sum\limits_{j=1}^{m}\exp(a(\mathbf{q},\mathbf{k}_j))} \in \mathbb{R} f(q,(k1,v1),,(km,vm))=i=1mα(q,ki)viRvα(q,ki)=softmax(a(q,ki))=j=1mexp(a(q,kj))exp(a(q,ki))R其中 a ( q , k i ) a(\mathbf{q},\mathbf{k}_i) a(q,ki) 为评分函数。

2.2 加性注意力

当询问和键是不同长度的矢量时,可以使用加性注意力(Additive Attention)作为评分函数。设询问 q ∈ R q \mathbf{q} \in \mathbb{R}^q qRq 和键 k i ∈ R k \mathbf{k}_i\in \mathbb{R}^k kiRk ,可学习的参数为 w v ∈ R h , W k ∈ R h × k , W q ∈ R h × q \mathbf{w}_v\in \mathbb{R}^h,\mathbf{W}_k \in \mathbb{R}^{h\times k},\mathbf{W}_q \in \mathbb{R}^{h\times q} wvRh,WkRh×k,WqRh×q,则加性注意力的评分函数为 a ( q , k i ) = w v T tanh ⁡ ( W q q + W k k i ) ∈ R a(\mathbf{q},\mathbf{k}_i)=\mathbf{w}_v^\text{T}\tanh(\mathbf{W}_q\mathbf{q}+\mathbf{W}_k\mathbf{k}_i) \in \mathbb{R} a(q,ki)=wvTtanh(Wqq+Wkki)R等价于将键与值合并放入一个隐藏大小为 h h h、输出大小为 1 1 1 的单隐藏层MLP。

2.3 缩放点积注意力

若询问和键都是同样的长度 d d d ,则可使用缩放点积注意力(Scaled Dot-product Attention)。设 q , k i ∈ R d \mathbf{q},\mathbf{k}_i \in \mathbb{R}^d q,kiRd ,则评分函数为 a ( q , k i ) = ⟨ q , k i ⟩ d a(\mathbf{q},\mathbf{k}_i)=\frac{\left \langle \mathbf{q},\mathbf{k}_i \right \rangle }{\sqrt{d}} a(q,ki)=d q,ki通常从小批量的角度来考虑提高效率:设有 n n n 个查询和 m m m 个键值对,其中查询和键的长度为 d d d ,值的长度为 v v v ,则查询 Q ∈ R n × d \mathbf{Q}\in \mathbb{R}^{n\times d} QRn×d 、键 K ∈ R m × d \mathbf{K}\in \mathbb{R}^{m\times d} KRm×d 和值 V ∈ R m × v \mathbf{V}\in \mathbb{R}^{m\times v} VRm×v 的缩放点积注意力为 f = softmax ( a ( Q , K ) ) V ∈ R n × v a ( Q , K ) = Q K T d ∈ R n × m f=\text{softmax}(a(\mathbf{Q},\mathbf{K}))\mathbf{V} \in \mathbb{R}^{n\times v} \\ a(\mathbf{Q},\mathbf{K})=\frac{\mathbf{Q}\mathbf{K}^\text{T}}{\sqrt{d}} \in \mathbb{R}^{n\times m} f=softmax(a(Q,K))VRn×va(Q,K)=d QKTRn×m可见此处直接将询问和键做内积。


3 自注意力

当查询、键和值来自同一组输入时称为自注意力(Self-attention)或内部注意力(Intra-attention)。

3.1 基本概念

给定序列 x 1 , ⋯   , x n , ∀ x i ∈ R d \mathbf{x}_1,\cdots,\mathbf{x}_n,\forall \mathbf{x}_i \in \mathbb{R}^d x1,,xn,xiRd自注意力池化层 x i \mathbf{x}_i xi 当做键、值、询问来对序列抽取特征得到 y 1 , ⋯   , y n \mathbf{y}_1,\cdots,\mathbf{y}_n y1,,yn ,其中 y i = f ( x i , ( x 1 , x 1 ) , ⋯   , ( x n , x n ) ) ∈ R d \mathbf{y}_i=f(\mathbf{x}_i,(\mathbf{x}_1,\mathbf{x}_1),\cdots,(\mathbf{x}_n,\mathbf{x}_n)) \in \mathbb{R}^d yi=f(xi,(x1,x1),,(xn,xn))Rd

在这里插入图片描述

自注意力完全并行,最长序列为1,但对长序列计算复杂度高

在这里插入图片描述

3.2 位置编码

跟CNN/RNN不同,自注意力并没有记录位置信息。
位置编码(Positional Encoding)在输入表示中加入位置信息,使得自注意力能够记忆位置信息。

设输入 X ∈ R n × d \mathbf{X}\in\mathbb{R}^{n\times d} XRn×d 为长度 n n n 的序列,则使用位置编码矩阵 P ∈ R n × d \mathbf{P}\in\mathbb{R}^{n\times d} PRn×d 来输出 X + P \mathbf{X}+\mathbf{P} X+P 作为自编码输入,其中 P \mathbf{P} P 的元素如下计算 p i , 2 j = sin ⁡ ( i 1000 0 2 j d ) ,   p i , 2 j + 1 = cos ⁡ ( i 1000 0 2 j d ) p_{i,2j}=\sin(\frac{i}{10000^{\frac{2j}{d}}}),\ p_{i,2j+1}=\cos(\frac{i}{10000^{\frac{2j}d}}) pi,2j=sin(10000d2ji), pi,2j+1=cos(10000d2ji)

在这里插入图片描述

3.3 绝对、相对位置信息

在这里插入图片描述
观察上图的二进制编码可知,每个数字、每两个数字和每四个数字上的比特值在第一个最低位、第二个最低位和第三个最低位上分别交替。

在二进制表示中,较高比特位的交替频率低于较低比特位, 与下面的热图所示相似,只是位置编码通过使用三角函数在编码维度上降低频率。 由于输出是浮点数,因此此类连续表示比二进制表示法更节省空间。

在这里插入图片描述

对于任何确定的位置偏移 δ \delta δ,位置 i + δ i+\delta i+δ 处的位置编码可以线性投影位置 i i i 处的位置编码来表示。令 ω i = 1 1000 0 2 j d \omega_i=\frac{1}{10000^{\frac{2j}{d}}} ωi=10000d2j1 ,则 [ cos ⁡ ( δ ω j ) sin ⁡ ( δ ω j ) − sin ⁡ ( δ ω j ) cos ⁡ ( δ ω j ) ] [ p i , 2 j p i , 2 j + 1 ] = [ 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} p_{i+\delta,2j} \\ p_{i+\delta,2j+1} \end{bmatrix} [cos(δωj)sin(δωj)sin(δωj)cos(δωj)][pi,2jpi,2j+1]=[pi+δ,2jpi+δ,2j+1]易知左边的投影矩阵 i i i 无关。


4 Transformer

原文:Attention Is All You Need

Transformer模型完全基于注意力机制,没有任何卷积层或循环神经网络层,基于编码器-解码器架构来处理序列对。

4.1 总体架构

Transformer的编码器和解码器是基于自注意力的模块叠加而成的,源(输入)序列和目标(输出)序列的嵌入(Embedding)表示将加上位置编码,再分别输入到编码器和解码器中。

所有子层之间使用残差链接。

在这里插入图片描述

4.2 多头自注意力

多头自注意力(Multi-head Self-attention)对同一键、值、询问,希望抽取不同的信息,例如短距离关系和长距离关系。使用 h h h 个独立的注意力池化,合并各个(Head)的输出得到最终输出。

设询问 q ∈ R d q \mathbf{q}\in \mathbb{R}^{d_q} qRdq ,键 k ∈ R d k \mathbf{k}\in \mathbb{R}^{d_k} kRdk ,值 v ∈ R d v \mathbf{v}\in \mathbb{R}^{d_v} vRdv ,头 i i i 的可学习参数 W i ( q ) ∈ R p q × d q , W i ( k ) ∈ R p k × d k , W i ( v ) ∈ R p v × d v \mathbf{W}_i^{(q)}\in \mathbb{R}^{p_q\times d_q},\mathbf{W}_i^{(k)}\in \mathbb{R}^{p_k\times d_k},\mathbf{W}_i^{(v)}\in \mathbb{R}^{p_v\times d_v} Wi(q)Rpq×dq,Wi(k)Rpk×dk,Wi(v)Rpv×dv ,则头 i i i 的输出为 h i = f ( W i ( q ) q , ( W i ( k ) k , ( W i ( v ) v ) ∈ R p v \mathbf{h}_i=f(\mathbf{W}_i^{(q)}\mathbf{q},(\mathbf{W}_i^{(k)}\mathbf{k},(\mathbf{W}_i^{(v)}\mathbf{v}) \in \mathbb{R}^{p_v} hi=f(Wi(q)q,(Wi(k)k,(Wi(v)v)Rpv输出的可学习参数 W o ∈ R p o × h p v \mathbf{W}_o\in\mathbb{R}^{p_o\times hp_v} WoRpo×hpv ,则多头注意力的输出为 W o [ h 1 ⋮ h h ] ∈ R p o \mathbf{W}_o\begin{bmatrix} \mathbf{h}_1 \\ \vdots \\ \mathbf{h}_h \end{bmatrix} \in \mathbb{R}^{p_o} Wo h1hh Rpo

在这里插入图片描述

有掩码的多头注意力:解码器对序列中一个元素输出时,不应该考虑该元素之后的元素,因此可通过掩码来实现。即计算 x i \mathbf{x}_i xi输出时,假装当前序列长度为 i i i

4.3 基于位置的前馈网络

基于位置的前馈网络(Positionwise Feed-forward Network)将输入形状由 ( b , n , d ) (b,n,d) (b,n,d) 变换成 ( b n , d ) (bn,d) (bn,d) ,输出形状由 ( b n , d ) (bn,d) (bn,d) 变化回 ( b , n , d ) (b,n,d) (b,n,d) 。等价于两层 1 × 1 1\times 1 1×1 卷积层,即全连接层。

4.4 层规范化

批量规范化对每个特征/通道(列)里元素进行归一化,不适合序列长度会变的NLP应用。
层规范化(Layer Normalization)对每个样本(行)里的元素进行归一化。

在这里插入图片描述

4.5 信息传递与输出预测

编码器到解码器的信息传递:编码器中的输出 y 1 , ⋯   , y n \mathbf{y}_1,\cdots,\mathbf{y}_n y1,,yn 作为解码中第 i i i 个Transformer块中多头注意力的键和值,其询问来自目标序列。这意味着编码器和解码器中块的个数和输出维度都是一样的。

预测:预测第 t + 1 t+1 t+1 个输出时,解码器中输入前 t t t 个预测值,在自注意力中作为键和值,其第 t t t 个还同时作为询问。

在这里插入图片描述

  • 66
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Akira37

💰unneeded

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

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

打赏作者

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

抵扣说明:

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

余额充值