一文读懂注意力机制

最近在对小样本相关文献,对于注意力机制不是太了解,通过了解后,就想写一篇总结一下..

先给大家讲个小故事助助兴吧。🤭

一对情侣A和B下班后,

A问B:“今天吃什么鸭?”

B:“红烧肉,西红柿炒蛋”

A对B说:“家里没有肉和西红柿了,去菜市场买点肉和菜吧”

两人一同前往菜市场买菜,菜市场环境特别嘈杂。两个人一起到肉摊这里买点肉,肉有点贵,B就开启降价模式,A觉得B肯定能讲下来,就去其他的摊位转转。B降价成功后,发现A不在身边后,对菜市场进行了一番扫视后,仅此一眼便可寻到你。看见了A在水果摊附近,便径直走去。B对A轻喊,A转过头对B笑了笑。

当B对整个菜市场进行扫视时,忽略的周围的环境,脑海中只聚焦于A的身影。仅此一眼便可定位到她所在位置。这个有意识的现象被称为---聚焦注意力

显著注意力是指由外界环境无意识引起的注意力。比如你正在学习,突然门外邻居正在吵架,打断了你学习时的注意力

注意力机制:指的是在某一时刻将注意力集中到某件事,而忽略周围其他的一切事物。

如今,视觉注意力机制便是人类视觉所特有的大脑信息处理机制。人类通过快速扫描全局信息,只关注于目标信息,便对该目标信息投入更多的资源,来获取有关于目标信息的更多细节,从而忽略周围的其他信息。而深度学习中的注意力机制和人类的视觉注意力机制类似,都是从大量的信息中提取对当前目标信息更加细节的信息。

深度学习中的注意力机制依附于Encoder-Decoder框架下,该框架场景应用广泛。

 

 上图是文本处理的Encoder-Decoder框架。简单理解为Encoder-Decoder相当于一个翻译者。对于一个句子,我们希望输入句子Source=<x_1,x_2,x_3....x_n>,通过Encoder-Decoder框架生成目标句子Target=<y_1,y_2,y_3....y_n>.其中,Source和Target可以来自同一个语言,也可以是不同的语言。Encoder就是编码器,将Source通过非线性变化转化为中间语义信息C:

                                                        C=F\left ( x_1,x_2,x_3,....x_n \right )

Decoder就是解码器,将输入信息Source+前一时刻的历史信息获得目标信息

                                                         y_i=g(C,y_1,y_2....y_i-1)

注意力机制

        对上面提到的Encoder-Decoder框架并未体现注意力模型.我们称为"注意力不集中",因为中间的语义信息C是不变的,就是说输入句子中的任意单词对生成目标单词的影响力都是相同的.相当于你在表达一个观点时,没有侧重点.但当输入信息很长时,语义信息用语义向量表示,模型内部出现混乱,就会丢失很多细节信息.为解决该问题引入注意力机制

原理:

  •  通过打分函数s(q_i,h_i),获得输入信息h_i的注意力分配概率分布\alpha _i

                                [\alpha _1,\alpha _2...\alpha _i]=softmax([s(q_1,h_1),s(q_2,h_2)...s(q_i,h_i)])

     查询向量 q (这个向量往往和你做的任务有关),   打分函数s(q_i,h_i)是一个标量,将前一时刻的输出状态q_ih_i上的关注程度.通过softmax对结果进行归一化后,便得到查询向量q在各个输入h_i上的注意力分布\alpha =[\alpha _1,\alpha _2...\alpha _n].注意力分布和输入信息一一对应.

  • 获取语义信息C_i.由于注意力分布的加入,通过加权和获得当前时刻的语义信息C

                                                        C_i=\sum_{i=1}^{n}\alpha _ih_i

  •  输出目标信息

                                                        y_i=(C_i,y_1,y_2....y_{i-1})

举例:输入:I love you 输出:我爱你

        I:        \alpha _1=softmax (s(q_1,h_1))=0.6

                  \alpha _2=softmax (s(q_1,h_2))=0.2

                  \alpha _3=softmax (s(q_1,h_3))=0.2

  love:       \alpha _1=softmax (s(q_2,h_1))=0.1

                 \alpha _2=softmax (s(q_2,h_2))=0.7

                 \alpha _3=softmax (s(q_2,h_3))=0.2 

  you:        \alpha _1=softmax (s(q_3,h_1))=0.3

                 \alpha _2=softmax (s(q_3,h_2))=0.2

                 \alpha _3=softmax (s(q_3,h_3))=0.5

C_1=0.6\times h_1+0.2\times h_2+0.2\times h_3\Rightarrow y_1=g(C_1)=我

C_2=0.1\times h_1+0.7\times h_2+0.2\times h_3\Rightarrow y_2=g(C_2,y_1)=我爱

C_3=0.3\times h_1+0.2\times h_2+0.5\times h_3\Rightarrow y_3=g(C_3,y_1,y_2)=我爱你

打分函数s可以通过一下方式计算:

 参数W、U和v 均是可学习的参数矩阵或向量,D为输入向量的维度.

加性模型:

        ​​​​​​​        s(h,q)=v^Ttanh(Wh+Uq).

                引入可学习参数,将查询向量q和原始输入映射到不同的向量空间进行计算打分.

点积模型:

        ​​​​​​​        s(h,q)=h^Tq.

                当输入维度较高时,点积模式存在较大的方差,捯饬softmax函数梯度较小.相对于加性模型,点积模型具有更好的计算效率

缩放点积模型:

        ​​​​​​​        s(h,q)=\frac{h^Tq}{\sqrt{D}}

                通过一个平方根项来平滑分数数值,相关平滑最终的注意力分布

双线性模型:

        ​​​​​​​        s(h,q)=h^TWq

                重塑为 s(h_i,q)=h^TWq=h^T(U^TV)q=(Uh)^T(Vq) ,即分别对查询向量 q 和原始 Z输入向量 h进行线性变换之后,再计算点积。相比点积模型,双线性模型在计算相似度时引入了非对称性。

注意力机制的变体:

  1. 硬性注意力机制:根据注意力分布选择输入变量中的一个作为输出.选择方式如下
  • 选择注意力分布中分数最大的哪一项所对应的输入向量作为Attention机制的输出
  • 对注意力分布进行随机采样,将采样后的结果作为Attention机制的输出

     注意:硬性注意力通过两种选择方式,使得最终的损失函数和注意力分布之间不可导,无法通过反         向传播训练模型.硬性注意力需借助于强化学习进行训练

     2. 键值对注意力机制

        输入信息为键值对的形式(K, V)=[(k_1, v_1),(k_2 , v_2),.. . , (k_n, v_n)] 注意力权值\alpha _i

                                         C_i= \sum_{i=1}^{n}\alpha _1\cdot v_i

     3. 多头注意力机制

思想:利用多个查询向量Q=[q_1,q_2,...q_m],并行的从输入信息(K, V)=[(k_1, v_1),(k_2 , v_2),.. . , (k_n, v_n)] 中选取多组信息.查询向量q关注不同部分的输入信息.(从不同的角度分析当前的输入信息)

 

 

     4.  自注意力机制

自注意力机制中,针对查询向量q可通过输入信息本身生成,不在选择前一时刻的查询向量.模型让输入信息自己决定输入信息的那部分信息为重要信息.

自注意力机制采用查询-键-值(Query-Key-Value)模式.

 输入信息在不同的空间表达后,通过计算h1为例,计算相应的注意力机制的输出向量,代表模型应重点关注的内容

步骤:

计算输入信息映射到空间Q,K,V的信息

Q=HW_q=[q_1,q_2,...q_n] 

K=HW_k=[k_1,k_2,...k_n]

V=HW_v=[v_1,v_2,...v_n]

计算每个位置的注意力权重,并对其结果求加权和.对打分函数采用缩放点积模式计算

 通过矩阵计算,获得所有位置的注意力输出向量

参考博客:

一文读懂注意力机制 - 知乎 (zhihu.com) 

注意力机制(Attention mechanism)基本原理详解及应用 - Jerry_Jin - 博客园 (cnblogs.com)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值