情感分类——self-Attention

  • 本文为前文:Attention机制的延伸篇。
  • self-attenion对应的视频个人推荐李宏毅讲解的版本。偏向于求解,但是讲的非常nice。
  • 首先,个人先做一个自己理解的比喻:attention其实可以看作一个有目标性的提取信息的过程,上一篇中的attention是根据target有选择性的提取source中的信息,那self-attention,其实就是自己提取自己的信息呗。
  • 那按照这个很抽象的思路,我自己提取自己信息时,依据是什么?attention好歹有一个target的隐藏层给我做相似性比较,用于提取,这里我们要怎么做?带着这样的疑问,我们开篇。

宏观角度

  • Self Attention也经常被称为intra Attention(内部Attention),在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间。
  • 而Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。所以具体形式就不需要详解了。
  • 在涉及self-attention计算前,我们总得先宏观分析一波它吧
  • 如果是常规的Target不等于Source情形下的注意力计算,其物理含义正如前文所讲,比如对于机器翻译来说,本质上是目标语单词和源语单词之间的一种单词对齐机制。
  • 那么如果是Self Attention机制,一个很自然的问题是:通过Self Attention到底学到了哪些规律或者抽取出了哪些特征呢?或者说引入Self Attention有什么增益或者好处呢?
  • 所以我们将目光放到:self-attention的好处上!
  • 在这里,我们不考虑计算的细节,我们先宏观想象,我们 input: 一个句子, 经过self-attention层后,其out-put出来的vector有什么优点?

在这里插入图片描述

  • 如果你熟悉RNN(循环神经网络),回忆一下它是如何维持隐藏层的。RNN会将它已经处理过的前面的所有单词/向量的表示与它正在处理的当前单词/向量结合起来。而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。
  • 也就是优点一:输出的每一个单词的vector都看到了全局信息。同时,也解决了长距离依赖学习的问题。
  • 在并行方面,Attention 和 CNN 一样不依赖于前一时刻的计算,可以很好的并行,优于 RNN。
  • 也就是优点二:容易并行化。
  • 每一层的复杂度,如果输入序列 n 小于表示维度 d 的话,每一层的时间复杂度 Self-Attention 是比较有优势的。
  • 也就是优点三:self-attention的复杂度不高(我前面有篇关于讨论cnn,rnnn,transfoermer的笔记,跟这个是对应的)
  • 最后,我们定位一下self-attention: 特征提取利器,当然,看作编码器也可以。

微观角度

  • 上面讨论了self-attention的优点,但是它是如何计算的我们还没有介绍,现在,我们将所有精力放在,self-attention这个网络层内部是如何计算的?
  • 李宏毅讲解的版本对这里进行了很细致的推导,建议观看。当然老师这里讲了transformer,sefl-attention包在里面而已。本文先暂时不对transformer做说明,我们只关注它的计算。

明确Q,K,V

  • 前文attention里没有对这三个进行明确说明,这里补充一下:

很形象的可视化

在这里插入图片描述

  • 在计算 Attention 时主要分为三步,第一步是将 query 和每个 key 进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;然后第二步一般是使用一个 softmax 函数对这些权重进行归一化;最后将权重和相应的键值 value 进行加权求和得到最后的 Attention。

  • 补充:目前在 NLP 研究中,key 和 value 常常都是同一个,即 key=value,当然这个特例我们这里只是提一下,我们还是认为两者不等。

  • 对应于前文,简单来说就是:

  • Q, K用于计算相似度。

  • 计算的相似度(又可以叫做权重)乘于 V的到最后结果。

计算开始

  • 个人认为视频笔记放上来比较好,所以以这种方式呈现

  • 第一步:计算: q,k,v,a,计算方式见图。

在这里插入图片描述

  • 第二步:计算a1 对应输出位置的 self-attention 的权重

在这里插入图片描述

  • 我希望你还记得我上面对K,Q,V的解释。

  • similary(q1,ki) , i = 1,2,3,4

  • similary这里用的是点积。

  • 注意细节: 为什么除以根号d?

  • 因为点积是相乘求和,维度越大,相应数值越大。我们要保证去除维度的影响。

  • 第三步:数值变概率(权重结果进入softmax)

在这里插入图片描述

  • 第四步:第一个输出最后结果b1

在这里插入图片描述

  • 剩下的以此类推即可

矩阵并行化

  • 其实上面已经介绍完了,但是上面的步骤我们可以用矩阵乘法代替,这样做的原因是什么?

  • GPU可以加速矩阵乘法

  • 第一步:计算 k,q,v,a

在这里插入图片描述

  • 第二步:计算权重

在这里插入图片描述

在这里插入图片描述

  • 第三步:softmax化

在这里插入图片描述

  • 第三步:得到最后结果

在这里插入图片描述

最最后,整个换一种形式再看一下

在这里插入图片描述

END

  • 视频里面当然也有很多其他内容,但都不属于本篇,以后写入专门的transformer内

本篇完!

参考

[ 1 ]深度学习中的注意力模型(2017版)
[ 2 ]BERT大火却不懂Transformer?读这一篇就够了
[ 3 ]自然语言处理中的自注意力机制(Self-Attention Mechanism)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值