当前位置 博文首页 > Yunlord的博客:神经网络到底在关注哪里?注意力机制与Transform

    Yunlord的博客:神经网络到底在关注哪里?注意力机制与Transform

    作者:[db:作者] 时间:2021-09-11 10:49

    目录

    一、注意力机制介绍

    1.浅谈注意力

    2.注意力机制类别

    二、计算机视觉中的注意力机制

    1.看图说话

    2.存在的问题

    3.加入注意力机制

    三、序列模型中的注意力机制

    1.Seq2Seq的一些问题?

    2.Seq2Seq加入注意力机制

    四、自注意力机制与Transformer

    1.自注意力机制介绍

    2. 自注意力机制细节

    3.位置编码

    总结


    一、注意力机制介绍

    1.浅谈注意力

    注意力是人类学习中必不可少的要素,比如说我们去阅读一个文章,或者试着去理解一本书中作者想表达的意思,我们通常在阅读过程中会把注意力放在比较重要的环节上,而不是去把每个细节都会一一记住。人的记忆是有限的,抓重点的学习方式往往会得到事半功倍的效果。

    那既然注意力这么重要,我们有没有办法把它用在AI应用中呢?答案是有的,那就是注意力机制。

    注意力机制在过去几年取得了飞速的发展,而且已经成为很多应用的标配。把注意力机制放到神经网络中,其实就是让机器学习选择性地去学习,同时知道如何把注意力放在更重要的事情上,比如对于一段文字来讲,理解其含义可能只需要把重点放在几个核心的单词上。

    2.注意力机制的重要性

    在Attention诞生之前,已经有CNN和RNN及其变体模型了,那为什么还要引入attention机制?主要有两个方面的原因,如下:

    (1)计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。

    (2)优化算法的限制:LSTM只能在一定程度上缓解RNN中的长距离依赖问题,且信息“记忆”能力并不高

    注意力机制在不同应用下的使用也大同小异。对于图片来讲,注意力需要放到某一个区域上; 对于文本来讲,注意力需要放在某几个单词上; 另外,这里所讲的自注意力机制跟传统的注意力机制有所不一样,能够更有效地解决梯度,并行化的问题。

    二、计算机视觉中的注意力机制

    1.看图说话

    看图说话是指,根据给定的图片生成一段文本描述,这个描述就是对于图片的理解。 实际上,这个问题可以理解为把一个图片转换成文本,图片理解这块可采用CNN模型,文本生成模块可采用LSTM模块。

    2.存在的问题

    可以看到看图说话时,生成的文本依赖于全部图像的词向量,实际上并不需要这样,因为每一个文本其实对应图片的某一部分。

    基于以上的问题,我们想把注意力机制加入到模型当中。对于看图说话,一个核心思想:对于每一个生成的单词实际上我们只需要关注图片中某一个模块就可以了。那这种注意力如何获取的?一种简单的操作方式是,把图片分成多个区域,然后学出针对于每个区域的权重。

    3.加入注意力机制

    可以看到加入注意力机制后,还可以提升模型的解释性,也就是说生成文本的时候能够关注到其对应的图像区域是否正确。

    三、序列模型中的注意力机制

    seq2seq根据字面意思来看就是序列到序列,再具体点就是输入一个序列(可以是一句话,一个图片等)输出另一个序列。的用途有很多,比如机器翻译,写诗,作曲,看图写文字等等用途很广泛。

    1.Seq2Seq的一些问题?

    由上图可知,虽然自然语言处理任务中引入了LSTM等一系列改进模型,但依然会因为长期依赖带来梯度消失问题,而且由于编码器最终学习生成一个向量,用这个向量来表示之前的一系列文本,这会使得该向量学习表示起来十分困难。

    所以seq2seq存在以下两个问题:

    1. 梯度消失问题。
    2. 瓶颈问题。?

    所以我们可以将注意力机制引入到seq2seq。

    2.Seq2Seq加入注意力机制

    这些黄色的深浅代表当翻译每个词的注意力的分配。

    Encoder用的是是双向RNN,当RNN单元循环回来的时候都会有一个输出给了你将要翻译的词对应的attend,而此时肯定是它的最下方的词应该是注意力最集中的,所以它对应的权重肯定是最大的。

    这里的权重分配公式为:

    e_{ij}=a(s_{i-1},h_j)

    从最上面下来的是s_{i-1},h_{j}是第j个Encoder隐层出来的记忆单元。

    所有的分打出来后,要做下归一化:

    a_{ij}=\frac{exp(e_{ij})}{\sum_{k=1}^{T}exp(e_{ik})}

    这个跟Softmax差不多。

    然后对他们进行求和传送给c_{i}

    c_i=\sum_{k=1}^{Tx}a_{ij}h_j

    这个注意力机制大大提高了机器翻译的能力当然也包括其他的领域。

    四、自注意力机制与Transformer

    1.自注意力机制介绍

    self attention是注意力机制中的一种,也是transformer中的重要组成部分。

    自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。

    自注意力机制在文本中的应用,主要是通过计算单词间的互相影响,来解决长距离依赖问题。

    自注意力机制的计算过程:

    1.将输入单词转化成嵌入向量;

    2.根据嵌入向量得到q,k,v三个向量;

    3.为每个向量计算一个score:score =q . k ;

    4.为了梯度的稳定,Transformer使用了score归一化,即除以?\sqrt{dk}

    5.对score施以softmax激活函数;

    6.softmax点乘Value值v,得到加权的每个输入向量的评分v;

    7.相加之后得到最终的输出结果z :z=??v。

    2. 自注意力机制细节

    对于一段文本来讲,自注意力机制可以计算每两个单词之间的关系,并根据这个关系来理解单词在上下文中的意思。通过上述可视化方式,我们也可以观察到这种关系。另外,这种方式的一个缺点在于复杂度会比较高,特别是对于很长的文本。

    3.位置编码

    在文本中,单词之间是有顺序的,但上面提到的self-attention并没有把位置信息考虑了进来,只是计算了每两个单词之间的关系。那我们又如何把位置信息融合到模型当中呢?在Transformer中,我们在输入端额外地加入了位置向量。


    总结

    注意力机制的优点

    1.参数少:相比于 CNN、RNN ,其复杂度更小,参数也更少。所以对算力的要求也就更小。

    2.速度快:Attention 解决了 RNN及其变体模型 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

    3.效果好:在Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

    本文是从零开始学NLP系列文章第十四篇,希望小伙伴们多多支持,互相交流。


    参考:

    贪心学院nlp

    基于注意力机制的seq2seq网络

    cs