神经网络的注意力机制(Attention)

1 注意力的简介

注意力机制也称为:“神经网络的注意力”,或者更简单的:“注意力”。

人脑在工作时,其实是由一定的注意力的,比如我们在浏览器上搜索时,大部分的注意力都集中在搜索结果的左上角,这说明大脑在处理信号的时候是有一定权重划分的,而注意力机制的提出正是模仿了大脑的这种特性。

神经网络的注意力就是说,神经网络具有将注意力集中到一部分输入(或特征)的能力。

(1)为什么引入注意力机制呢?

  • 计算能力的限制:目前计算能力依然是限制神经网络发展的瓶颈,当输入的信息过多时,模型也会变得更复杂,通过引入注意力,可以减少处理的信息量,从而减小需要的计算资源。
  • 优化算法的限制:虽然局部连接、权重共享以及 pooling 等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长序列输入,信息“记忆”能力并不高。

(2)注意力机制的分类

注意力机制一般分为两种:

  • 聚焦式(Focus)注意力:是一种自上而下的有意识的注意力,“主动注意” 是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
  • 显著性(Saliency-Based)注意力:是一种自下而上的无意识的注意力,“被动注意” 是基于显著性的注意力,是由外界刺激驱动的注意,不需要主动干预,也和任务无关;池化(Max Pooling)门控(Gating) 可以近似地看作是自下而上的基于显著性的注意力机制。

2 注意力机制的流程

注意力机制一般可以分为三步:一是信息输入;二是计算注意力分布;三是根据计算的注意力分布来对输入信息进行处理。

令:

  • x ∈ R d x\in R^d xRd 为输入向量
  • X = [ x 1 , x 2 , ⋯   , x N ] X=[x_1, x_2, \cdots, x_N] X=[x1,x2,,xN] N N N 个输入样本
  • q ∈ R k q\in R^k qRk 为查询向量或特征向量
  • z ∈ [ 1 , N ] z\in[1,N] z[1,N] 为注意力变量,表示被选择信息的位置,比如 z = i z=i z=i 表示选择了第 i i i 个输入向量

3 不同形式的注意力

3.1 软性注意力(Soft Attention)

软性注意力(Soft Attention)是指在选择信息的时候,不是从 N N N 个信息中只选择1个,而是计算 N N N 个输入信息的加权平均,再输入到神经网络中计算。

(1)计算注意力分布 α i \alpha_i αi

在给定 q q q X X X 下,选择第 i i i 个输入向量的概率 α i \alpha_i αi 为:

α i = p ( z = i ∥ X , q ) = s o f t m a x ( s ( x i , q ) ) = e x p ( s ( x i , q ) ) ∑ j = 1 N e x p ( s ( x i , q ) ) \begin{aligned} \alpha_i &= p(z=i\| X,q)\\ & = softmax(s(x_i,q)) \\ & = \frac{exp(s(x_i,q))}{\sum_{j=1}^N exp(s(x_i,q))} \end{aligned} αi=p(z=iX,q)=softmax(s(xi,q))=j=1Nexp(s(xi,q))exp(s(xi,q))

其中:

  • α i \alpha_i αi 称为是注意力分布
  • s ( x i , q ) s(x_i,q) s(xi,q) 是注意力打分函数

常见的注意力打分函数 s ( x i , q ) s(x_i,q) s(xi,q) 包括:

  • 加性模型: s ( x i , q ) = v T tanh ⁡ ( W x i + U q ) s(x_i,q)=v^T \tanh (Wx_i+Uq) s(xi,q)=vTtanh(Wxi+Uq) W , U W,U W,U 为可学习的网络参数
  • 点积模型: s ( x i , q ) = x i T q s(x_i,q)=x_i^Tq s(xi,q)=xiTq
  • 缩放点模型: s ( x i , q ) = x i T q d s(x_i,q)=\frac{x_i^Tq}{\sqrt{d}} s(xi,q)=d xiTq d d d 为输入向量的维度
  • 双线性模型: s ( x i , q ) = x i T W q s(x_i,q)=x_i^TWq s(xi,q)=xiTWq W W W 为可学习的网络参数

(2)加权平均

注意力分布 α i \alpha_i αi 可以解释为给定查询 q q q 时,第 i i i 个输入向量关注的程度,软性注意力选择机制是对它们进行汇总:

a t t ( X , q ) = ∑ i = 1 N α i x i = E z ∼ p ( z ∣ X , p ) [ x ] \begin{aligned} att(X,q) &= \sum_{i=1}^N \alpha_ix_i \\ & = E_{z\sim p(z|X,p)}[x] \end{aligned} att(X,q)=i=1Nαixi=Ezp(zX,p)[x]

3.2 硬性注意力(Hard Attention)

硬性注意力(Hard Attention)是指只选择输入序列某一个位置上的信息

硬性注意力有两种实现方式:

(1)选取最高概率的输入信息

a t t ( X , q ) = x j ,   w h e r e    j = a r g max ⁡ i = 1 N α i att(X,q) = x_j, \ where \ \ j =arg \max_{i=1}^N \alpha_i att(X,q)=xj, where  j=argi=1maxNαi

(2)另一种硬性注意力是通过在注意力分布式上随机采样的方式实现

硬性注意力的缺点:

硬性注意力基于最大采样或者随机采样的方式选择信息,导致最终的损失函数与注意力分布之间的函数关系不可导,因此无法在反向传播时进行训练。

3.3 键值对注意力

比如我们使用键值对 key-value pair 的格式来表示输入信息,其中键用来计算注意力分布 α i \alpha_i αi,值用来计算聚合信息,比如 Self Attention。

( K , V ) = [ ( k 1 , v 1 ) , ⋯   , ( k N , v N ) ] (K,V)=[(k_1,v_1),\cdots,(k_N,v_N)] (K,V)=[(k1,v1),,(kN,vN)] 来表示 N N N 组输入信息,给定任务相关的查询向量 q q q 时,注意力函数为:

a t t ( X , q ) = ∑ i = 1 N α i x i = ∑ i = 1 N e x p ( s ( k i , q ) ) ∑ j e x p ( s ( k i , q ) ) v i \begin{aligned} att(X,q) &= \sum_{i=1}^N \alpha_ix_i \\ & = \sum_{i=1}^N \frac{exp(s(k_i,q))}{\sum_j exp(s(k_i,q))}v_i \end{aligned} att(X,q)=i=1Nαixi=i=1Njexp(s(ki,q))exp(s(ki,q))vi

显然,当 K = V K=V K=V 时,键值对就等价于普通的注意力机制

3.4 多头注意力(Multi-Head Attention)

多头注意力是利用多个查询 Q = [ q 1 , q 2 , ⋯   , q M ] Q=[q_1,q_2,\cdots,q_M] Q=[q1,q2,,qM],来平行地计算从输入信息中选取多组信息。每个注意力关注输入信息的不同部分。

a t t ( ( K , V ) , Q ) = a t t ( ( K , V ) , q 1 ) ⨁ ⋯ ⨁ a t t ( ( K , V ) , q M ) att((K,V),Q)=att((K,V),q_1) \bigoplus \cdots \bigoplus att((K,V),q_M) att((K,V),Q)=att((K,V),q1)att((K,V),qM)

其中, ⨁ \bigoplus 表示向量的拼接。

【参考】

  • https://zhuanlan.zhihu.com/p/53682800
  • http://akosiorek.github.io/ml/2017/10/14/visual-attention.html
  • 24
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值