深度学习学习笔记:attention模型理论学习

深度学习中的attention model在序列学习任务上具有巨大的提升作用,可以有效提高序列对序列的自然方式下的系统表现。看了一段时间的自然语言处理的理论文章,在这里简单记录下我对attention机制和应用方面的理解。

事实上,attention model也应用在图像领域,在人脑的观测机制中,当观察一个图像时,虽然可以看到图像的全部内容,但是在深入仔细观察时,其实聚焦的就只有很小区域,这个时候主要关注在这一小块图像上,也就是说这个时候对整幅图的关注并不是均衡的,是有一定的权重区分的。attention model在图像方向的核心思想也是如此。

在讲attention之前,稍微科普一下encoder-decoder模型,毕竟基于encoder-decoder模型改造的attention modelattention model是非常成功的。

encoder-decoder模型

encoder-decoder模型简单来说就是编码-解码模型,主要用于解决seq2seq类问题,即给定一个字符串序列后,希望得到与之对应的另一个字符串序列,比如常见的翻译系统和问答系统等等。
深度学习学习笔记:attention模型理论学习
借助这个encoder-decoder框图,我们可以很清晰的看出他的运行机制:编码——>存储——>解码
计算机读取源Sequence,形成对应记忆(对应Context),计算机经过计算,转变成输出。
计算机读入的过程叫做Encoder,即将输入的东西变成计算机的记忆(Context),,然后再根据这个Context,转化成结果输出,这个输出过程叫做Decoder。
看上去十分方便,但是这个框架有一个明显的缺陷,整个编码-解码过程共享一个单独不变的语义编码C
简单解释一下:
输入句子X=(X1,X2,…Xm)
输出句子Y=(Y1,Y2,…Yn)
中间语义C=F(X1,X2,…Xm)。
那么对Y的输出就是如下
Y1=F( C )
Y2=F(C,Y1)
Y3=F(C,Y1,Y2)
这样,无论生多少Y,中间的语义C都是不变的,这种模型对于句子的语义分析是有很多问题的
1.语义向量无法完全表示整个序列的信息
2.先输入的内容携带的信息会被后输入的信息覆盖
3.无法体现前几个单词对当前单词的影响

这些问题怎么解决呢,就要讲到这篇文章的主题了,attention模型

attention model框图

深度学习学习笔记:attention模型理论学习
与之前encoder-decoder框图相比
输入句子X=(X1,X2,…Xm)
输出句子Y=(Y1,Y2,…Yn)
中间语义C=F(X1,X2,…Xm)。
那么对Y的输出变成了
Y1=F1(C1)
Y2=F1(C2,Y1)
Y3=F1(C3,Y1,Y2)

下面根据上面Attention Model的内容拆解开来讲讲

深度学习学习笔记:attention模型理论学习
**Encoder层:**采用了双向的RNN网络,最后隐层的输出是两个向量的拼接 ht=[←ht,→ht] 。
Attention:
深度学习学习笔记:attention模型理论学习
深度学习学习笔记:attention模型理论学习
在上面公式中 hj 是Encoder层的隐层第 j 时刻的输出,si−1 是Decoder层第 i−1 时刻隐层的输出。可以发现在计算 ci 的模型实际上是一个线性模型,而且 ci 事实上是Encoder层中各时刻隐层的输出的加权平均值。
**Decoder层:**采用了单向的RNN模型,第 i 时刻的隐层的输出是 si 。第 i 时刻的输出和 si,yi−1,ci 有关
因此引入Attention 机制,在机器翻译中,模型会自己去学得在不同时刻不同的权重系数 aij 。

根据Attention的计算区域,可以分成以下几种:
Soft Attention:对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。
Hard Attention:直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。
Local Attention:其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。

attention model Task情况分析

attention model仅仅是一种机制思想,可以应用到各种各样的任务处理,列举下我看过资料中的 attention model应用情况。

  • 长文本任务:
    长文本本身所携带的信息量比较大,可能会带来信息过载问题,很多任务可能只需要用到其中一些关键信息(比如文本分类)
  • 机器翻译:encoder用于对原信息建模,decoder用于生成输出信息,attention用于连接原信息和输出信息,在每一步翻译的时候关注不同的原信息
  • 图文互搜:encoder对图片建模,decoder生成相关文本,在decoder生成每个词的时候,用attention机制来关注图片的不同部分

当然,attention model的一些细致的应用和模型优化没有全部了解,只是单纯在处理seq2seq问答问题时产生了问题,所以对attention model相关内容进行了学习。

。。。。持续更新中

参考资料: