1. 从embedding到Encoder-Decoder

1.1 Embedding

embedding可以把文字和图像转为向量(k维的浮点数特征向量)。
比如我们输入的句子长度为7,词典大小为100,把每一个整数转为2维小数的embedding直观代码如下:

from keras.models import Sequential
from keras.layers import Embedding
model = Sequential()
model.add(Embedding(100,2, input_length=7))#输入维,输出维
data = np.array([[0,2,0,1,1,0,0],[0,1,1,2,1,0,0],[0,1,12,1,15,0,1]])
model.predict(data) # 输入维度(3,7)整型,输出维度(3,7,2)浮点类型

图片同样可以做embedding,我们要把N∗N∗256N*N*256NN256(前两个是尺寸,最后是灰度)的图像用N/16∗N/16∗1000N/16*N/16*1000N/16N/161000来表示,将每16个像素点看做一个像素块,则像素块为1616256的整数,要将其映射为1000维的浮点数。
embedding网络是[16∗16∗256,1000][16*16*256,1000][1616256,1000]的浮点数矩阵,每一行的1000维数据就是每个块的embedding表示。

1.2 Encoder-Decoder 结构

Encoder-Decoder指的是如下的模型:

关于基本Encoder-Decoder,有2点需要说明:
1)不论输入和输出的长度是什么,中间的「向量 c」 长度都是固定的(这也是它的缺陷,下文会详细说明)
根据不同的任务可以选择不同的编码器和解码器(可以是一个 RNN ,但通常是其变种 LSTM 或者 GRU )
2)只要是符合上面的框架,都可以统称为 Encoder-Decoder 模型。说到 Encoder-Decoder 模型就经常提到一个名词—— Seq2Seq。

Seq2Seq(是 Sequence-to-sequence 的缩写),就如字面意思,输入一个序列,输出另一个序列。这种结构最重要的地方在于输入序列和输出序列的长度是可变的。Seq2Seq(强调目的)不特指具体方法,满足「输入序列、输出序列」的目的,都可以统称为 Seq2Seq 模型。常见的应用有:机器翻译、对话机器人、诗词生成、代码补全、文章摘要(文本 - 文本)。Encoder-Decoder是Seq2Seq的一种,即中间有个固定长度的向量C:

2 Attention

2.1 attention机制

Encoder-Decoder 当输入信息太长时,会丢失掉一些信息(编码长度优先,在编码时进行了压缩,因此丢失信息是必然的)。Attention 机制就是为了解决「信息过长,信息丢失」的问题,简单来说,Attention 模型的特点是 Encoder 不再将整个输入序列编码为固定长度的「中间向量 C」 ,而是编码成一个向量的序列。
引入了attention的Encoder-Decoder模型如下图,简单来说就是:不断输入X(代号K),不断计算C(注意力),不断decode成Y(代号Q)

我们来看例子,输入X为kono eiga ga kirai(この映画が嫌い),其中日语的语序和英语是不一样的。

这里的注意力数组是用hate和日语原文乘积得到的。注意力集中在第一个单词kono,也就是说I hate 后面紧接着的this对应的起始是kono这个词。
我们来看下计算注意力数据的方法。其输入是待翻译的特征向量KKK(key vectors),一个当前输出的特征向量QiQ_iQi(query vectors),计算函数为ai=F(Qi,K)a_i=F(Q_i,K)ai=F(Qi,K)。如果q、k维度相同,可以直接用点乘:a=qTka=q^Tka=qTk;若维度不同,可以再加个学习参数矩阵W: a=qTWka=q^TWka=qTWk。此外,最好做一个归一化:a=qTk/∣k∣a=q^Tk/\sqrt{|k|}a=qTk/k

2.2 Self-attention机制

如果Q和K相同,则称为self-attention机制。一般的词嵌入模块学习的是单词之间的关系,而self-attention模块学习了单词在句子上下文环境中的关系(transformer中甚至还显式的加上了位置编码)。注意和Attention机制区分开,在Attention中我们有一对对的训练数据,而self-attention没有。
换种方式说明:假设我们得到了一段输入文本,并且从文本中的单词嵌入 W 开始。我们需要找到一种 Embedding 方法来度量同一文本中其他单词嵌入相对于 W 的重要度,并合并它们的信息来创建更新的嵌入W’。
具体做法是:自注意力机制会将 Embedding 输入文本中的每个单词线性投影到三个不同的空间中(这些矩阵在训练过程中需要学习),从而产生三种新的表示形式:即查询query、键key和值value。这些新的嵌入将用于获得一个得分,该得分将代表 W 和每个Wn 之间的依赖性(如果 W 依赖于 W’,则结果为绝对值很高的正数,如果 W 与W’不相关,则结果为绝对值很高的负值)。这个分数将被用来组合来自不同 Wn 单词嵌入的信息,为单词 W 的值v创建更新的嵌入e。

用矩阵形式,直观表达如下:


注意到这些新向量的维度比输入词向量的维度要小(512–>64),并不是必须要小的,是为了让多头attention的计算更稳定。

下面是个例子:对“Thinking Matchines”这句话,对“Thinking”(pos#1)计算attention 分值。我们需要计算每个词与“Thinking”的评估分,这个分决定着编码“Thinking”时(某个固定位置时),每个输入词需要集中多少关注度。
这个分通过“Thing”对应query-vector与所有词的key-vec依次做点积得到。所以当我们处理位置#1时,第一个分值是q1和k1的点积,第二个分值是q1和k2的点积。除以8,这样梯度会更稳定。然后加上softmax操作,归一化分值使得全为正数且加和为1。将softmax分值与value-vec按位相乘。保留关注词的value值,削弱非相关词的value值。将所有加权向量加和,产生该位置的self-attention的输出结果。

下图是一个self-attention的可视化例子:

用来做训练的一个编码器-解码器如图:

2.3 图像/视频的自注意力机制和交叉注意力机制

为了统一图像和视频,我们把图像用3维数据表示(宽、高、帧)。对于图像X∈Rh×w×sX\in R^{h\times w\times s}XRh×w×s上的任意一个点(i,j,k)(i,j,k)(i,j,k),

其中N是点(i,j,k)(i,j,k)(i,j,k)的临近区域(相当于加了位置编码)。

交叉注意力机制有两个输入X和C,其中C用来计算N,其他都相同。我们可以把两者简单加起来作为解码器:

深度学习系列25:注意力机制相关推荐

  1. 深度学习中的注意力机制(三)

    作者 | 蘑菇先生 来源 | NewBeeNLP原创出品 深度学习Attenion小综述系列: 深度学习中的注意力机制(一) 深度学习中的注意力机制(二) 目前深度学习中热点之一就是注意力机制(Att ...

  2. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  3. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attenion小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的 ...

  4. 深度学习中的注意力机制(二)

    作者 | 蘑菇先生 来源 | NewBeeNLP 目前深度学习中热点之一就是注意力机制(Attention Mechanisms).Attention源于人类视觉系统,当人类观察外界事物的时候,一般不 ...

  5. 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记  前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...

  6. 注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用

    1 深度学习中的注意力机制 https://mp.weixin.qq.com/s?__biz=MzA4Mzc0NjkwNA==&mid=2650783542&idx=1&sn= ...

  7. 【动手深度学习-笔记】注意力机制(一)注意力机制框架

    生物学中的注意力提示 非自主性提示: 在没有主观意识的干预下,眼睛会不自觉地注意到环境中比较突出和显眼的物体. 比如我们自然会注意到一堆黑球中的一个白球,马路上最酷的跑车等. 自主性提示: 在主观意识 ...

  8. 深度学习中的注意力机制汇总

    什么是注意力机制 视觉注意力机制是人类视觉所特有的一种大脑信号处理机制,而深度 学习中的注意力机制正是借鉴了人类视觉的注意力思维方式.一般来说, 人类在观察外界环境时会迅速的扫描全景,然后根据大脑信号 ...

  9. 深度学习中的注意力机制(2017版)

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ 张俊林 (本文2017年发表于<程序员>杂志7月刊) (想更系统的学习深度学习知识?请参考:深度学习枕边书) 如果 ...

  10. 【动手深度学习-笔记】注意力机制(四)自注意力、交叉注意力和位置编码

    文章目录 自注意力(Self-Attention) 例子 Self-Attention vs Convolution Self-Attention vs RNN 交叉注意力(Cross Attenti ...

最新文章

  1. CVPR 2020 Oral | 旷视研究院提出Circle Loss,革新深度特征学习范式
  2. Codeforces Round #599A~D题解
  3. OpenCV Python教程(2、图像元素的访问、通道分离与合并)
  4. pycharm调试远程服务器代码
  5. 人气TOP|当红炸子鸡「小明机器人」,出道走花路啦
  6. 如何交到一个女朋友?
  7. PHP中extract()函数的定义和用法
  8. 2021-09-18牛客SQL32,SQL33,SQL35,SQL36,SQL37,SQL38,SQL40
  9. hihocoder第196周
  10. 向中级程序员转变的10个建议
  11. Contexts for mac(程序快速调用工具)
  12. 巧用 Cowrie 部署 SSH 蜜罐,让黑客攻击无处遁形!
  13. python基础----Day06
  14. eact源码解析7.Fiber架构
  15. DATEADD的用法
  16. COMP252, Winter 2022. Jan 13, 2022. Due Jan 20, 2022, 4pm.
  17. 流氓软件卸载与避免的一些方法
  18. iOS 快速接入腾讯虚拟人特效 Avatar
  19. linux解压压缩包分卷
  20. Accurately Say CocaCola!

热门文章

  1. 技术经理成长复盘-发现团队的瓶颈
  2. C/C++ fabs 函数 - C语言零基础入门教程
  3. 数据分析方法(3)之AARRR模型
  4. JUnit测试提示 java.lang.Exception: No public static parameters method on class
  5. 《树莓派项目实战》第五节 使用Nokia 5110液晶屏显示Hello World
  6. vue构建项目对接口的调用封装
  7. Flume或Kafka和Elasticsearch整合
  8. 文献阅读-GNC----IEEE Robotics and Automation Letters (RA-L), 2020.
  9. 中东多国与卡塔尔断交或为黑客入侵所致? FBI协助调查
  10. js 中出现 invalid date问题