attention与self attention的区别

1 什么是注意力机制?

当我们观察某件事物/景色的时候,往往会先简单看下周围环境,然后将重点放在某一重要部分。深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,也是从众多信息中选择出对当前任务目标更关键的信息。下图形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标,很明显对于下图所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。

2 从encoder和decode说起

encoder-decode框架在自然语言处理任务中常常出现,可以把它看作将语句1生成语句2的通用模型。常见结构如下:

我们给定 x = x 1 , x 2 , x 3 , . . . , x n x = {x_1, x_2, x_3, ..., x_n} x=x1,x2,x3,...,xn,期望通过encoder-decoder模型生成 y = y 1 , y 2 , . . . , y m y = {y_1, y_2, ..., y_m} y=y1,y2,...,ym,Encoder顾名思义就是对输入语句进行编码,将输入语句通过非线性变换转化为中间语义 C = F ( x 1 , x 2 , . . . , x n ) = F ( x ) C = F(x_1, x_2, ..., x_n) = F(x) C=F(x1,x2,...,xn)=F(x)表示,对于解码器Decoder来说,其任务是根据输入语句的中间语义表示 C C C和之前已经生成的历史信息 y 1 , y 2 , . . . , y i − 1 y_1, y_2, ..., y_{i-1} y1,y2,...,yi1来生成 i i i时刻要生成的单词 y i y_i yi。每个 y i y_i yi都依次按照上述流程产生,这就是encoder-decoder讲语句1转成语句2的过程。

3 Attention

3.1 attention思想

上面展示的encoder-decoder框架是没有体现出注意力机制的。

y 1 = f ( C ) y_1 = f(C) y1=f(C)

y 2 = f ( C , y 1 ) y_2 = f(C, y_1) y2=f(C,y1)

y 3 = f ( C , y 1 , y 2 ) y_3 = f(C, y_1, y_2) y3=f(C,y1,y2)

其中 f f f是decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入语句的语义编码 C C C都是一样的。而语义编码 C C C由输入语句的每个单词经过encoder编码产生,也就是说不论是生成哪个单词, y 1 , y 2 , . . . y_1,y_2, ... y1,y2,...,其实输入语句中任意单词对生成某个目标单词 y i y_i yi来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。

输出语句中的每个单词都应该学会其对应的源语句中单词的注意力分配概率信息。这意味着在生成每个单词 y i y_i yi的时候,原先都是相同的中间语义表示 C C C会被替换成根据当前生成单词而不断变化的 C i C_i Ci。理解Attention模型的关键就是这里,即由固定的中间语义表示 C C C换成了根据当前输出单词来调整成加入注意力模型的变化的 C i C_i Ci。增加了注意力模型的encoder-decoder框架理解起来如下图所示。

即生成目标语句的过程成了下面的形式:

y 1 = f 1 ( C 1 ) y_1 = f_1(C_1) y1=f1(C1)

y 2 = f 2 ( C 2 , y 1 ) y_2 = f_2(C_2, y_1) y2=f2(C2,y1)

y 3 = f 3 ( C 3 , y 1 , y 2 ) y_3 = f_3(C_3, y_1, y_2) y3=f3(C3,y1,y2)

上述内容就是经典的Attention模型的基本思想,那么怎么理解Attention模型的物理含义呢?一般在自然语言处理应用里会把Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,这是非常有道理的。目标语句生成的每个单词对应输入语句单词的概率分布可以理解为输入语句单词和这个目标生成单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。

3.2 attention

attention 计算分3个步骤:

第一步: query 和 key 进行相似度计算,得到权值.计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值

第二步:将权值进行归一化,得到直接可用的权重

第三步:将权重和 value 进行加权求和

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ⋅ V ) Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}}·V) Attention(Q,K,V)=softmax(dk QKTV)

3.3 self attention

它指的不是输入语句和输出语句之间的Attention机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制,Q=K=V。通过自己与自己的attention来自动捕获token和token之间的关联。下面有一个可视化的例子

4 优点

参数少。模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

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

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

参考

  • https://zhuanlan.zhihu.com/p/91839581
  • http://www.sniper97.cn/index.php/note/deep-learning/note-deep-learning/3850/
  • https://www.zhihu.com/question/68482809/answer/264632289

欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

算法工程师面试那些事儿

猜你喜欢

转载自blog.csdn.net/qq_40006058/article/details/121070373