Skip to content

各种注意力总结

📅 发表于 2018/03/25
🔄 更新于 2018/03/25
👁️ 次访问
📝 0 字
0 分钟
自然语言处理
#Attention
#论文笔记

一切都应该尽可能简单,但不能过于简单。

本文主要是总结:注意力机制、注意力机制的变体、论文中常见的注意力

注意力机制系统介绍

问题背景

计算能力不足

神经网络有很强的能力。但是对于复杂任务,需要大量的输入信息和复杂的计算流程。计算机的计算能力是神经网络的一个瓶颈。

减少计算复杂度

常见的:局部连接、权值共享、汇聚操作。

但仍然需要:尽量少增加模型复杂度(参数),来提高模型的表达能力

简单文本分类可以使用单向量表达文本

只需要一些关键信息即可,所以一个向量足以表达一篇文章,可以用来分类。

阅读理解需要所有的语义

文章比较长时,一个RNN很难反应出文章的所有语义信息

对于阅读理解任务来说,编码时并不知道会遇到什么问题。这些问题可能会涉及到文章的所有信息点,如果丢失任意一个信息就可能导致无法正确回答问题。

网络容量与参数成正比

神经网络中可以存储的信息称为网络容量。 存储的多,参数也就越多,网络也就越复杂。 LSTM就是一个存储和计算单元。

注意力和记忆力解决信息过载问题

输入的信息太多(信息过载问题),但不能同时处理这些信息。只能选择重要的信息进行计算,同时用额外空间进行信息存储。

  • 信息选择:聚焦式自上而下地选择重要信息,过滤掉无关的信息。注意力机制
  • 外部记忆 : 优化神经网络的记忆结构,使用额外的外部记忆,来提高网络的存储信息的容量。 **记忆力机制 **

比如,一篇文章,一个问题。答案只与几个句子相关。所以只需把相关的片段挑选出来交给后续的神经网络来处理,而不需要把所有的文章内容都给到神经网络。

注意力

注意力机制Attention Mechanism解决信息过载的一种资源分配方案,把计算资源分配给更重要的任务

注意力:人脑可以有意或无意地从大量的输入信息中,选择小部分有用信息来重点处理,并忽略其它信息

聚焦式注意力

自上而下有意识的注意力。有预定目的、依赖任务、主动有意识聚焦于某一对象注意力

一般注意力值聚焦式注意力。聚焦式注意力会根据环境、情景或任务的不同而选择不同的信息。

显著性注意力

自下而上无意识的注意力。由外界刺激驱动的注意力,无需主动干预,也和任务无关。如Max PoolingGating

鸡尾酒效应

鸡尾酒效应可以理解这两种注意力。 在吵闹的酒会上

  • 噪音很多,依然可以听到朋友谈话的内容
  • 没有关注背景声音,但是突然有人叫自己(重要信息),依然会马上注意到

普通注意力机制

把目前的最大汇聚Max Pooling和门控Gating 近似地看做自下而上的基于显著性的注意力机制。

为了节省资源,选择重要的信息给到后续的神经网络进行计算,而不需要把所有的内容都给到后面的神经网络。

输入N个信息

X1:N=[x1,,xN], 问题q。 要从X中选择一些和任务相关的信息输入给神经网络。

计算注意力分布

αi : 选择第i个信息的概率,也称为注意力分布z表示被选择信息的索引位置

αi=p(z=iX,q)=softmax(s(xi,q))=exp(s(xi,q))j=1Nexp(s(xj,q))

NMT里面三种score打分函数 :

score(ht,h¯s)={htTh¯sdothtTWah¯sgeneralvaTtanh(Wa[ht;h¯s])concat

加性模型

s(xi,q)=vTtanh(Wxi+Uq)

点击模型

s(xi,q)=xiTq

计算注意力

Soft Attention 是对所有的信息进行加权求和。Hard Attention是选择最大信息的那一个。

使用软性注意力选择机制,对输入信息编码为,实际上也是一个期望。

attn(X,q)=i=1Nαixi=Ezp(zX,q)[X]

应用与优点

传统机器翻译Encoder-Decoder的缺点:

  • 编码向量容量瓶颈问题:所有信息都需要保存在编码向量中
  • 长距离依赖问题:长距离信息传递时,信息会丢失

注意力机制和PyTorch实现机器翻译

注意力机制直接从源语言信息中选择相关的信息作为辅助,有下面几个好处:

  • 解码过程中每一步都直接访问源语言所有位置上的信息。无需让所有信息都通过编码向量进行传递。
  • 缩短了信息的传递距离。源语言的信息可以直接传递到解码过程中的每一步

图像描述生成

注意力机制变体

多头注意力

Multi-head Attention利用多个查询q1:M=q1,,qM来并行地从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。比如Attention Is All You Need

硬性注意力

硬性注意力是只关注到一个位置上

  • 选取最高概率的输入信息
  • 在注意力分布上随机采样

缺点:loss与注意力分布之间的函数关系不可导,无法使用反向传播训练。一般使用软性注意力。

需要:硬性注意力需要强化学习来进行训练。

键值对注意力

输入信息:键值对(Key, Value)。 Key用来计算注意力分布αi,值用来生成选择的信息。

attn((K,V),q)=i=1Nαivi=i=1Nexp(s(ki,q))j=1Nexp(s(kj,q))vi

结构化注意力

普通注意力是在输入信息上的一个多项分布,是一个扁平结构。

如果输入信息,本身就有层次化的结构,词、句子、段落、篇章等不同粒度的层次。这时用层次化的注意力来进行更好的信息选择。

也可以使用一种图模型,来构建更加复杂的结构化注意力分布。

指针网络

前面的都是计算注意力对信息进行筛选:计算注意力分布,利用分布对信息进行加权平均。

指针网络pointer network是一种序列到序列的模型,用来指出相关信息的位置。也就是只做第一步。

输入: X1:n=[x1,,xn]

输出:c1:m=c1,c2,,cm,ci[1,n], 输出是序列的下标。如输入123,输出312

条件概率

p(c1:mx1:n)=i=1mp(cic1:i1,x1:n)i=1mp(cixc1,,xci1x1:n)p(cic1:i1,x1:n)=softmax(si,j)

第i步时,每个输入向量的得分(未归一化的注意力分布):

si,j=vTtanh(Wxj+Uei)

其中向量ei是第i个时刻,RNN对xc1,,xci1x1:n 的编码。

各种注意力计算模型

注意力的本质

kd维的特征向量hi(i[1,k]),想要整合这k个特征向量的信息。得到一个向量h,一般也是d维。

  • 简单粗暴:对k个向量求平均。当然不合理啦。
  • 加权平均:h=i=1kαihi合理

所以最重要的就是合理地求出αi,根据所关心的对象q(可能是自身)去计算注意力分布

  • 针对每个hi, 计算出一个得分sihiq越相关,得分越高。
  • αi=softmax(si)
si=score(hi,q)

打分函数的计算:(NMT里面三种score打分函数 )

  • Local-based Attention ,没有外部的关注对象,自己关注自己。
  • General Attention, 有外部的关注对象,直接乘积,全连接层。
  • Concatenation-based Attention, 有关注的对象,先concat或相加再过连接层。

Local-based

没有外部的信息,每个向量的得分与自己相关,与外部无关

比如:Where is the football?wherefootball在句子中起总结性作用。Attention只与句子中的每个词有关。

一个句子,有多个词,多个向量。通过自己计算注意力分布,再对这些词的注意力进行加权求和,则可以得到这个句子的最终表达。

si=f(hi)=a(WThi+b)h=i=1nsihi

a是激活函数sigmoid, tanh, relu, maxouty=x(无激活函数)。

1 一个得分简单求法

A Context-Aware Attention Network For Interactive Question Answering

利用自己计算注意力分布

γj=softmax(vTgjq)

利用新的注意力分布去计算最终的attention向量

u=Wchj=1Nγjgjq+bcq

2 两个得分合并为一个得分

Dynamic Attention Deep Model for Article Recommendation by Learning Human Editors’ Demonstration

计算两个得分

λmtM=wmtMo+bmtM,λtT=wtTo+btT

权值合并,求注意力分布:

pt=softmax(αλmtM+(1α)λtT)

3 论文图片

CAN for QA

Dynamic Attention

General Attention

有外部的信息,hiq进行乘积得分。 机器翻译的应用

score(hi,q)=hiTWq

Concatenation-based

要关注的外部对象是ht, 可以随时间变化,也可以一直不变(question)。

si=f(hi,ht)=vTa(W1hi+W2ht+b)

1 多个元素组成Attention

Attentive Collaborative Filtering Multimedia Recommendation with Item- and Component-Level Attention_sigir17

Item-Level Attention。可以看到需要加什么Attention,直接向公式里面一加就可以了。

a(i,l)=w1Tϕ(W1uui+W1vvl+W1ppl+W1xx¯l+b1)+c1α(i,l)=exp(a(i,l))nR(i)exp(a(i,n))

多层Attention

m个句子,每个句子有k个词语。

Word-level Attention

每个句子,有k个词语,每个词语一个词向量,使用Local-based Attention , 可以得到这个句子的向量表达si

Sentence-level Attention

m个句子,每个句子是一个句子向量si。 可以再次Attention,得到文档的向量表达d, 也可以得到每个句子的权值αi

得到这些信息之后,再具体问题具体分析。

1. 文章摘要生成

Leveraging Contextual Sentence Relations for Extractive Summarization Using a Neural Attention Model_SIGIR2017

输入一篇文档,输出它的摘要。

  • 第一层:Local-based Attention, 生成每个句子的vector
  • 第二层:当前句子作为中心,2n+1个句子。输入RNN(不明白)。将中心句子作为attention,来编码上下文。通过上下文对中心句子进行打分。作为该句子对整个文本的重要性

CAN的实时问答

A Context-Aware Attention Network For Interactive Question Answering

第一层Attention

对句子过GRU,每一时刻的output作为词的编码。再使用Local-Attention对这些词,得到问句的表达u

第二层Attention

由于上下文有多个句子。

首先,对一个句子进行过GRU,得到每一时刻单词的语义信息αt, 然后利用Concat-Attention对这些单词计算,得到这句话的语义信息yt

再把当前句子的语义信息给到句子的GRU

第三次Attention

经过GRU,得到每个句子的表达st。 再使用Concat-Attention来得到每个句子的注意力分配βt, 然后加权求和得到 整个Context的表达m

输出

结合m,u通过GRU去生成答案

  • Period Symbol :是正确答案,直接输出
  • Question Mask: 输出是一个问题,要继续问用户相应的信息

用户重新给了反馈之后,对所有词汇信息使用simple attention mechanism, 即平均加权,所有的贡献都是一样的。得到反馈的向量表达f

使用新的反馈向量和原始的问句向量,结合,重新生成新的context的语义表达m。 最终得到新的m,u 去重新回答。

r=tanh(Wrff+br(f))βt=softmax(uTst+rTst)
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025