前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Attention机制总结

Attention机制总结

作者头像
微风、掠过
发布2019-03-04 16:48:03
3K0
发布2019-03-04 16:48:03
举报

Attention:

感兴趣区域ROI和定位机制。

每一步只关注特定小区域,抽取区域表征信息,再整合到之前的步骤所积累的信息中。

Soft attention: 以概率进行加权输入到下一层;

Hard attention: 选取一个输入到下一层。

策略梯度的强化学习技术 使得训练定位小框位置变得可能,在每次探索中,如果分类模块能正确预测,给与正反馈,强化对这个位置的选择,反之则给负反馈。

一瞥模块:接收一个位置的二维向量作为输入 画出小框提取特征再结合位置信息 得到中间向量z。

循环模块:接收中间向量z 包含2层RNN,下层主要积累识别的信息 上层主要预测位置。

发射模块:上层RNN输出的累积位置信息(隐层的高维向量)映射成二维位置向量,并进行高斯采样。

分类模块:根据下层 RNN的输出向量进行预测。

上下文模块:解决第一步往哪儿看的问题 接收整张图怓 输出初始状态向量作为上层RNN的初始输入得到第一个glimpse的位置

将输入分解成序列化的 同时学习 where and what的思想就是attention的核心

在序列到序列的模型中(sequence2sequence):

Attention机制是连接编码层和解码层的一个通道。由于我们在编码(encoder)过程中保留每个RNN单元的隐藏状态(hidden state)得到(h1……hN)。而后对于解码(decoder)过程中每一个timestep,因为有此时decoder的输入和上一步隐藏状态的输出,计算得到当前步的隐藏状态。假设第t步的隐藏状态为St(当前输入和上一步隐藏状态)。

在每个第t步利用St和每个编码过程中的隐藏状态hi进行dot点积得到attention score,也称为相似度或影响得分。即每个编码过程的隐藏状态对当前的输出St的一个贡献度。计算公式如下:(此处按照斯坦福大学教材上用st和hi计算,原始论文为st-1)。

之后用softmax将attention-score转换为概率分布。按照概率分布将隐藏状态转换成加权和。公式如下:

上下文(attention)向量c计算公式

由此得到上下文向量c(或者是注意力向量)。

最后将注意力向量ct和decoder的t时刻的隐藏状态St并联起来,继续之后步骤。

其图示如下:

原文图示

原文阐述

Attention的通用定义如下:

给定一组向量集合values,以及查询向量query,我们根据query向量去计算values加权和,即成为attention机制。

attention的重点即为求这个集合values中每个value的权值。我们也称attention的机制叫做query的输出关注了(考虑到了)原文的不同部分。

如seq2seq模型中,St是后面的query向量,而编码过程的隐藏状态hi是values。其就是根据某些规则(或额外信息query)从向量表达集合values中抽取特定的向量进行加权组合的方法,只要从部分向量里用了加权和,计算使用了attention机制。

如何改进或创新attention机制:

1.在向量加权和上做文章。

2.在匹配度的计算方式上做文章。

针对向量计算方式的变体:

soft / global / dynamic (都是soft attention)

hard

local attention(半软半硬attention)

静态attention

强制前向attention

soft / global / dynamic (都是soft attention)

是求概率分布,就是对于任意一个单词或者values都给出概率,attention得分经过softmax后权值用aph表示,把attention向量用ct表示。

hard attention

一般用在图像中 只选中一个区域,只选1个,其余为0。

local attention(半软半硬attention)

先选中一个区域,然后在其中的各个小部分生成概率分布。

论文:Effective Approaches to Attention-based Neural Machine Translation

在这个模型中,对于是时刻t的每一个目标词汇,模型首先产生一个对齐的位置 pt(aligned position),context vector 由编码器中一个集合的隐藏层状态计算得到,编码器中的隐藏层包含在窗口[pt-D,pt+D]中,D的大小通过经验选择。

上式之中,大S指的是源句子的长度,Wp和vp是指的模型的参数,通过训练得到,为了支持pt附近的对齐点,设置一个围绕pt的高斯分布,其中小s是在以pt为中心的窗口中的整数,pt是一个在[0,S]之间的实数。小Sigma σ 一般取窗口大小的一半。

静态attention

对输出句子共用一个St。一般在BiLstm首位hidden state输出拼接起来作为St(图中为u)。

针对attention-score计算的变体:

三种计算score的方法公式

第一个,s和hi的维数要一样。

第二个W矩阵是训练得到的参数,维度是d2 x d1,d2是s的hidden state输出维数,d1是hi的hidden state维数,也就是两者可以不同维度。

最后就是上面提到的additive attention,是对两种hidden state 分别再训练矩阵然后激活过后再乘以一个参数向量变成一个得分。

其中,W1 = d3xd1,W2 = d3xd2,v = d3x1 ,d1,d2,d3分别为h,s,v的维数,属于超参数。

Self- attention

在没有额外信息下,仍然可以允许向量values使用self attention来处理自己,从句子中提取需要关注的信息。

  1. 以当前的隐藏状态去计算和前面的隐藏状态的得分,作为当前隐藏单元的attention score,例如

第一种计算方法

2.以当前状态本身去计算得分作为当前单元attention score,这种方式更常见,也更简单,例如:

第二种计算方法

key-values attention

即将hi 隐藏状态拆分成两部分一部分是key(i) 一部分是values(i)然后只针对key部分计算attention的权值,然后加权使用values部分的值进行加权求和。

key-values计算公式

Multi-head attention:

首先,google先定义了一下attention的计算,也是定义出key,value,query三个元素(在seq2seq里面,query是st,key和value都是hi)在self 里面,query 是当前要计算的hi,k和v仍然一样,是其他单元的hidden state。在key value attention里面key和value则是分开了的。

然后除以了一下根号dk,为了让内积不至于太大(太大的话softmax后就非0即1了,不够“soft”了)

这里我们不妨假设,Q是

维,K是image.png维,v是

维,忽略归一化和softmax的话就是三个矩阵相乘,得到的是ndv的矩阵。我们可以说,通过这么一个attention层,就将一个

的序列****Q****,提取信息编码成

的序列了。*

Wi用来先在算attention对三个矩阵做不同的矩阵变换映射一下,变成nxdk’,mxdk’,mxdv’维度。

最后做并联,有点类似于inception 里面多个卷积核的feature map并联的感觉。附:多核卷积示意图。

多核卷积示意图

部分内容参考CSDN:https://blog.csdn.net/hahajinbu/article/details/81940355

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.02.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Attention:
  • 在序列到序列的模型中(sequence2sequence):
  • Attention的通用定义如下:
    • 如何改进或创新attention机制:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档