zl程序教程

您现在的位置是:首页 >  其它

当前栏目

注意力机制

机制 注意力
2023-09-27 14:23:05 时间

为什么要引入注意力机制?

  • 计算能力的限制

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

  • 优化算法的限制

虽然局部连接,权重共享以及池化等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络(RNN)中的长距离依赖问题,信息“记忆”能力并不高。

因此,人们参照人脑处理信息过载的方式 ,例如注意力机制可以提高神经网络处理信息的能力。

关于人脑处理信息:
对于一张图片,我们人眼对整张图片不会全面观察,只会观察集中的一部分 ,然后再依次向外逐渐发散观察;对于几行字,加入我们要对这几行字进行翻译,如果是机器,它就会全面的进行扫描,而这增大了任务难度或者说降低了效果,参照我们人类的习惯,我们将会对几行字,逐行进行观察 ,这就可以有效的优化我们的机器模型。

JsYfYT.png

注意力机制有哪些?

当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。按照认知神经学中的注意力,可以总体上分为两类:

  1. 聚焦式(focus)注意力 :自上而下的有意识的注意力,主动注意–是指有预定目的的、依赖任务的、主动有意识的聚焦于某一对象的注意力;
  2. 显著性(saliency-based)注意力 :自下而上的有意识的注意力,被动注意–基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将最大池化和门控(gating)机制 来近似看作是自下而上的基于显著性的注意力机制。

在人工神经网络中,注意力机制一般就特指聚焦式注意力

无注意力机制

普通的Encoder-Decoder(seq2seq) 结构:(基于RNN

JsDuTJ.jpg
  • x 是输入序列
  • Encoder 是编码器;Decoder 是解码器
  • 语义编码C是对输入的高度概括,是输入的核心总结
  • y 是输出

其概括形式:

JsrCnO.jpg

在这个过程当中,我们的语义编码使用的是相同的值。那么,所有的预测输出 y 1 y_{1} y1 y 2 y_{2} y2 y 3 y_{3} y3 …都完全依赖于同一个语义编码C来决定,真的科学吗?

注意力机制

以机器翻译为例:

JsybB8.png
  • 在翻译“汤姆”时,原句中的三个词对其贡献度不同,关联度最高的应该是“Tom”。同样,于“追逐”关联度最高的是“chase”,与“杰瑞”关联度最高的是“Jerry”。
  • 在C中,所有词的对应权重是相同 的。并且固定编码C能表示的信息有限 ,尤其是在长句子中。
  • 提出注意力机制 ,使得在翻译时不同词时,注意到各个词的贡献(相关性)。
Js6TPJ.jpg

很明显,这里我们就会冒出一个问题:权重如何计算?

JsgocR.jpg
  • 在计算中,如果 h 1 h_{1} h1 H 1 H_{1} H1 的相似度值越大,那么赋予的权值越大。

在赋予权值之前,我们需要用Softmax 进行归一化处理

例子

Tom chase Jerry => 汤姆 追逐 杰瑞

假设汤姆对应的隐藏层向量:[10,5,10]

Js2BVK.jpg
import numpy as np

tom_init = np.array([10,5,10])
tom_hidden = np.array([5,0,1])
chase_hidden = np.array([0,1,1])
jerry_hidden = np.array([1,1,0])


print("score:")
print(np.multiply(tom_init, tom_hidden))
print(np.multiply(tom_init, chase_hidden))
print(np.multiply(tom_init, jerry_hidden))

在翻译“汤姆”时的注意力权重分布矩阵为:[3.15,0.3,0.75]

总结

注意力机制就是通过学习得到一个权重分布,再把这个权重分布施加到原来的特征上面。以获取更多所需要关注目标的细节信息,而抑制其他无用信息。是一种资源分配方式。

参考

动画图解Attention机制