注意力机制(Attention)

注意力机制

想要理解注意力机制,先看一下Encoder RNN(Seq2Seq Model)是怎么一回事。Seq2Seq Model中有一个编码器也就是下面这张图所展示的,比如要将一段英文翻译成中文,编码器就是将每一个词向量 X i Xi Xi进行矩阵变换,变换之后的结果为 h i hi hi,编码器将这些词向量的特征汇聚到最后一个状态 h m hm hm上,也就是说经过 E n c o d e r Encoder Encoder 编码器之后,我们得到的只有 h m hm hm ,之前的 h 都会舍去。
在这里插入图片描述

我们再来看解码器,它像我们文本生成器一样,把我们刚才得到的信息,逐字逐句的翻译成中文。但是它也有缺陷,如果输入句子太长,那么编码器会忘掉一些特征,导致解码的时候会对应不上。
在这里插入图片描述
为了解决遗忘问题,注意力机制在2015年横空出世,我们来看看注意力机制是怎么改进的。
参考我们人类对于遗忘是怎么处理的,如果不重要的事情,我们会忘掉它,那当然没关系,如果事情很重要,我们会额外注意它,然后把这件事记住。
那么电脑怎么衡量一个事情或者是特征重要不重要呢?这里呢,就提出了一个相关性的公式。它是计算 S o So So 与每一个输出 h i hi hi的相关性,那么会得出m个权重 α \alpha α .
在这里插入图片描述

在这里插入图片描述
接下来我们看一下每一个权重 α \alpha α具体是怎么算的。权重计算的方法有很多,我们只看应用最广泛的 transformer 是怎么计算的。如下图所示,计算权重的步骤总共3步。
1 用两个矩阵分别对 h , So 做线性变换,并分别记为 k i k_i ki , q 0 q_0 q0
2 然后将得到的 k i k_i ki , q 0 q_0 q0 相乘
3 将得到的值做softmax,得到 α i \alpha_i αi,总共m个值。
在这里插入图片描述
到这里我们的相关性就计算完成了,那么计算出这么多的相关性,我们必须把它使用起来,刚才讲到 s o s_o so 作为解码器的时候会遗忘一些特征,那么这时候如果我们将相关性与特征做一个线性加和,再当作解码器的输入,是不是就不会产生遗忘的问题了。我们将这样的线性相加得出的结果称为Context vector,简称 c 0 c_0 c0,它具体计算公式如下:
在这里插入图片描述

接下来我们看解码是怎么回事。
经过刚才的一顿操作我们得到了 s 0 s_0 s0 c 0 c_0 c0 ,那么 s 1 s_1 s1 该怎么计算呢?具体公式如下:
在这里插入图片描述

在这里插入图片描述
我们得到了新的状态 s 1 s_1 s1,那么怎么得到 c 1 c_1 c1 呢?和刚才得到 c 0 c_0 c0 的思路类似(相关性与 h i h_i hi 的加权平均),那么 c 1 c_1 c1 的值,也得是相关性与 h i h_i hi加权平均,只不过这时候的相关性是 s 1 s_1 s1 h i h_i hi的相关性,具体公式如下:
在这里插入图片描述
计算完 s 1 s_1 s1 h i h_i hi的相关性之后,我们就能得出 c 1 c_1 c1 的值了。
在这里插入图片描述
同理我们将 s 1 s_1 s1 h i h_i hi x 1 , x_1^, x1, ,做一次变换,就能得到 s 2 s_2 s2 ,变换公式如下:
在这里插入图片描述
c 2 c_2 c2的值,得是 s 2 s_2 s2 h i h_i hi 得出的相关性与 h i h_i hi的加权平均。如下图:
在这里插入图片描述
同理:
在这里插入图片描述
最后计算出所有的值:
在这里插入图片描述
权重大的我们用深线表示,也意味着我们只关注那些与我们相关的特征。
在这里插入图片描述

以上这就是注意力机制的原理。小白一枚,希望各位大佬指出当中某些不正确的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值