attention与self-attention

因为seq2seq模型容易遗忘掉部分信息,引入attention模型,它可以大幅度提高seq2eq模型

下图横轴是输入得句子长度,纵轴是模型评价值,BLEU越高说明翻译越准确,可以看到,当字数很长时,翻译得准确率就会降低

self-attention 

优点:

在attention的机制下,decoder每次更新状态时都会看一眼encoder的所有状态向量避免遗忘,attention还会告诉decoder应该关注哪一个状态(这也是名字的由来)

缺电:
计算量非常大

attention原理:

在encoder输入完最后一个状态向量hm时,decoder与attention会同时开始工作,计算s0与每一个状态h1h2....hm的相关性,用公式(下图给出)计算,结果记为ai 

有m个状态向量,计算出m个ai ,每一个ai在0-1之间,a1+a2+.....ai = 1

【插播一下】计算ai 过程:

第一种:

将hi 与s0做内积,得到更高维向量与矩阵W相乘,结果是一个向量,将该向量送入tanh函数,得到新向量每一个值在[-1 ,1],再将结果乘向量V,(W和V都是参数),最后a1...am送入softmax函数得到的向量中每个值>0,所有和仍为1

第二种(Transformer):

用Wk 和 Wq对两个输入向量hi,s0做线性变换(Wk和Wq是函数中的参数)

k向量有m个,ai也有m个

每个Ki 向量都是矩阵的列,最后得到的【a1,a2....am】就是下图的向量,向量中的每个元素都在0-1之间且相加和为1

  

 

 

上述两种任选一种计算出a1a2....am共m个权重值,然后利用公式(下图)得到context vector,

每一个c0c1....都对应一个s0s1.....,

 

 decoder读入向量x1' ,再将状态更新为s1,更新用下图公式

 因为c0=a1h1+a2h2+....amhm,所以c0知道x1,x2....xm的所有信息,所以decoder的s1依赖于c0,

PS:每一轮算出来了的a1a2....am是不一样的,不能被重复使用

下一轮的s2由 s1c1决定,如下图公式

 s2算出来后需要计算c2 ,首先需要s2与encoder中h1h2...hm相关性(用上面提到的公式),计算出新的权重a1,a2....am,然后根据公式c2=a1h1+a2h2+...amhm得到c2

下图中的线用来表示相关性,越粗越相关,a值越大

attention: 两个RNN网络

self-attention:  一个RNN网络

                     ( self-attention并不局限于seq2seq,它可以用在所有的RNN上)

self-attention原理

初始h0=c0=0,新状态h1依赖于c0和x1,由于h0=0, 所以c1=h1

 计算h2

 

下一步计算a2, 根据这个公式可算出a1和a2

开始计算c2(见下图公式),由于h0=0,之后的计算中我们自动忽略它

然后一直重复上述步骤:计算hi---->计算ai---->计算ci

 

 

直到全部计算完


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值