Attention

参考:
https://www.leiphone.com/category/yanxishe/8tDpwklrKubaecTa.html
https://www.cnblogs.com/ydcode/p/11038064.html
https://www.jianshu.com/p/d7f50cc5560e
https://zhuanlan.zhihu.com/p/37601161

Seq2Seq
在这里插入图片描述
问题:Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。也就是说句子太长的时候就不太行。而且在翻译的时候,比如英文翻译成中文,每个中文字符的得出其实是综合的参考了原来英文句子里面每个单词,也就是上下文信息。而不是一个单词一个单词的直译。而且翻译出每个中文汉字的时候,参考英文句子里面的单词都会有侧重点。

带attention的ser2seq
C是什么来的:
在这里插入图片描述
这个a就是attention系数。j表示encoder有j个隐藏层结果hj,i=1时,也就是我要翻译出第1个汉字时,原来编码里面j个隐藏层hj分别对当前汉字H1的翻译结果的重要性是多少。加权求和之后就是Ci。
这个a怎么求?
在这里插入图片描述
其中,ℎ𝑖 表示 Encoder 的隐藏层,𝐹(ℎ𝑗,𝐻𝑖) 表示编码时的隐藏层与解码时的隐藏层的匹配匹配程度的打分函数。

在这里插入图片描述
很多图都用到了这个Q、K、V结构来装逼。其实也没啥。在自然语言任务中,往往 Key 和 Value 是相同的。所谓的查询,查的是啥呢?查的是概率,就是上面提到的aij,怎么查呢?就是一个函数F(Hi,h0…hJ),经过函数F,然后softmax就得到了a0…aj。F的设置很多论文都不同。不过最常用的就是求点积,没错,就这么简单。查出了a0…aj之后再跟V加权求和,但是其实V就是K。

参考知乎里面的解释:
Addressing):Source可以看作存储器内存储的内容,元素由地址Key和值Value组成,当前有个Key=Query的查询,目的是取出存储器中对应的Value值,即Attention数值。通过Query和存储器内元素Key的地址进行相似性比较来寻址,之所以说是软寻址,指的不像一般寻址只从存储内容里面找出一条内容,而是可能从每个Key地址都会取出内容,取出内容的重要性根据Query和Key的相似性来决定,之后对Value进行加权求和,这样就可以取出最终的Value值,也即Attention值。所以不少研究人员将Attention机制看作软寻址的一种特例,这也是非常有道理的。
这也是一种理解方式吧。
在这里插入图片描述
至于self-attention,就是指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已。
以前的Q是decoder的Hi与encoder的h0…hJ,经过函数F(Hi,h0…hJ),然后softmax得到a0…aj,self-attention就是encoder的hj与encoder的h0…hJ,经过函数F(Hi,h0…hJ),然后softmax得到a0…aj。仅此而已。

不过,还有一点不同的就是Q、K、V是原始输入X(比如embedding向量),与矩阵相乘得到的。
在这里插入图片描述
这里的Wq、Wk、Wv其实可以理解为DNN里面的隐藏层权重,就只是一个随机初始化的矩阵的。后面会经过梯度下降来自动学习、调整。

multi-head self-attention:
在这里插入图片描述
其实就是把上面的self-attention重复多次,但是每次的矩阵Wq、Wk、Wv都会重新初始化,得到n个Z矩阵,然后加权求和。同样的,W0也是随机初始化的矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值