Attention mechanism --学习笔记

版权声明:转载请声明转自Juanlyjack https://blog.csdn.net/m0_38088359/article/details/83959007

学习自:
(1)注意力机制
(2)什么是自注意力机制?

0、注意力机制

在seq2seq的模型里面,解码器在各个时间步都依赖相同的背景变量/向量来获取输入序列信息,当编码器为循环神经网络时,背景变量来着它最终时间步的隐藏状态。

但显然,举个例子,若要对不同语言进行翻译,我们在解码器生成输出序列中的每个词可能仅需要利用输入序列中的某一部分信息,也就是应该对每个时间步的编码信息分配不同的注意力。

回忆起seq2seq中,解码器的时间步t‘的隐藏状态是:
在这里插入图片描述
其中括号里面的参数分别对应如下:
上一时间步t’-1的输出yt’-1的 特征 表示、任一时间步使用的相同的背景向量C、上一时间步的隐藏状态。

在注意力机制中,变化的就是背景向量要改写成Ct’,则解码器在时间步t’的隐藏层函数变成如下:
在这里插入图片描述
其中关键在于背景变量的设计。

1、背景变量Ct’设计

以解码器在时间步2的背景向量计算为例,函数 a 根据解码器在时间步 1 的隐藏状态和编码器在各个时间步的隐藏状态计算 softmax 运算的输入。Softmax 运算输出概率分布并对编码器各个时间步的隐藏状态做加权平均,从而得到背景变量。

如下图所示:
在这里插入图片描述

总结就是:
令编码器在时间步t的隐藏状态为ht,且总时间步数为T,则解码器在时间步t’的背景向量为所有编码器隐藏状态的加权平均:
在这里插入图片描述

在给定t’时,权重αt’t在t=1,2…,T的值是一个概率分布,为了得到概率分布,使用softmax运算,实际也是一个加权平均
在这里插入图片描述

而问题在于这里又多了一个变量et’t,这里的et’t同时取决于解码器的时间步t’和编码器的时间步t。此处以解码器在时间步t’-1的隐藏状态St’-1与编码器在时间步t的隐藏状态ht作为输入,通过函数a计算et’t:
在这里插入图片描述

所谓注意力机制其实都是在研究函数a的设计。
第一篇讨论注意力机制的论文当中a函数的设计是:
在这里插入图片描述

因此引入了三个模型参数(向量)v,Ws,Wh,是模型需要学习的参数。

在双正切激活函数括号里的是两个projection相加,相加的结果是一个向量,再经过激活函数非线性化,得到的结果与对应的参数v(向量)点乘,得到一个标量值et’t。

当然如果两个输入向量St’-1与ht长度相同,简单的可以直接计算他们内积得到一个标量值:
在这里插入图片描述

2、矢量化计算

广义上,注意力机制有以下三个输入项:
查询项:解码器的隐藏状态
键项和值项:编码器的隐藏状态

考虑一个简单情形,编码器和解码器的隐藏单元个数均为h,且函数:
在这里插入图片描述
在这里插入图片描述

3、更新隐藏状态

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_38088359/article/details/83959007
今日推荐