1. 什么是Attention机制

在“编码器—解码器(seq2seq)”⼀节⾥,解码器在各个时间步依赖相同的背景变量来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。

现在,让我们再次思考那⼀节提到的翻译例⼦:输⼊为英语序列“They”“are”“watching”“.”,输出为法语序列“Ils”“regardent”“.”。不难想到,解码器在⽣成输出序列中的每⼀个词时可能只需利⽤输⼊序列某⼀部分的信息。例如,在输出序列的时间步1,解码器可以主要依赖“They”“are”的信息来⽣成“Ils”,在时间步2则主要使⽤来⾃“watching”的编码信息⽣成“regardent”,最后在时间步3则直接映射句号“.”。这看上去就像是在解码器的每⼀时间步对输⼊序列中不同时间步的表征或编码信息分配不同的注意⼒⼀样。这也是注意⼒机制的由来。

仍然以循环神经⽹络为例,注意⼒机制通过对编码器所有时间步的隐藏状态做加权平均来得到背景变量。解码器在每⼀时间步调整这些权重,即注意⼒权重,从而能够在不同时间步分别关注输⼊序列中的不同部分并编码进相应时间步的背景变量。

在注意⼒机制中,解码器的每⼀时间步将使⽤可变的背景变量。记 ct′ 是解码器在时间步 t′ 的背景变量,那么解码器在该时间步的隐藏状态可以改写为:

st′=g(yt′−1,ct′,st′−1)s_{t^{′}}=g(y_{t^{′}-1},c_{t^{′}},s_{t^{′}-1})st′​=g(yt′−1​,ct′​,st′−1​)

这⾥的关键是如何计算背景变量 ct′ 和如何利⽤它来更新隐藏状态 st′。下⾯将分别描述这两个关键点。

2. 计算背景变量

我们先描述第⼀个关键点,即计算背景变量。下图描绘了注意⼒机制如何为解码器在时间步 2 计算背景变量。

  1. 函数 a 根据解码器在时间步 1 的隐藏状态和编码器在各个时间步的隐藏状态计算softmax运算的输⼊。
  2. softmax运算输出概率分布并对编码器各个时间步的隐藏状态做加权平均,从而得到背景变量。

令编码器在时间步t的隐藏状态为 ht,且总时间步数为 T。那么解码器在时间步 t′ 的背景变量为所有编码器隐藏状态的加权平均:

ct′=∑t=1Tαt′thtc_{t^{′}}=\sum_{t=1}^{T}\alpha_{t^{′}t}h_tct′​=t=1∑T​αt′t​ht​

矢量化计算背景变量

我们还可以对注意⼒机制采⽤更⾼效的⽮量化计算。我们先定义,在上⾯的例⼦中,查询项为解码器的隐藏状态,键项和值项均为编码器的隐藏状态。

⼴义上,注意⼒机制的输⼊包括查询项以及⼀⼀对应的键项和值项,其中值项是需要加权平均的⼀组项。在加权平均中,值项的权重来⾃查询项以及与该值项对应的键项的计算。

让我们考虑⼀个常⻅的简单情形,即编码器和解码器的隐藏单元个数均为 h,且函数 a(s,h)=sTha(s,h)=s^Tha(s,h)=sTh。假设我们希望根据解码器单个隐藏状态 st′−1 和编码器所有隐藏状态 ht, t = 1, . . . , T来计算背景向量 ct′ 。我们可以将查询项矩阵 Q 设为 st′−1Ts_{t^{′}-1}^Tst′−1T​,并令键项矩阵 K 和值项矩阵 V 相同且第 t ⾏均为 htTh_t^ThtT​。此时,我们只需要通过⽮量化计算:

softmax(QKT)Vsoftmax(QK^T)Vsoftmax(QKT)V

即可算出转置后的背景向量 ct′Tc_{t^{′}}^Tct′T​。当查询项矩阵 Q 的⾏数为 n 时,上式将得到 n ⾏的输出矩阵。输出矩阵与查询项矩阵在相同⾏上⼀⼀对应。

3. 更新隐藏状态

现在我们描述第⼆个关键点,即更新隐藏状态。以⻔控循环单元为例,在解码器中我们可以对⻔控循环单元(GRU)中⻔控循环单元的设计稍作修改,从而变换上⼀时间步 t′−1 的输出 yt′−1、隐藏状态 st′−1 和当前时间步t′ 的含注意⼒机制的背景变量 ct′。解码器在时间步: math:t’ 的隐藏状态为:

st′=zt′⊙st′−1+(1−zt′)⊙s~t′s_{t^{′}}=z_{t^{′}}⊙s_{t^{′}-1}+(1-z_{t^{′}})⊙\tilde{s}_{t^{′}}st′​=zt′​⊙st′−1​+(1−zt′​)⊙s~t′​

其中的重置⻔、更新⻔和候选隐藏状态分别为:

rt′=σ(Wyryt′−1+Wsrst′−1+Wcrct′+br)r_{t^{′}}=\sigma(W_{yr}y_{t^{′}-1}+W_{sr}s_{t^{′}-1}+W_{cr}c_{t^{′}}+b_r)rt′​=σ(Wyr​yt′−1​+Wsr​st′−1​+Wcr​ct′​+br​)

zt′=σ(Wyzyt′−1+Wszst′−1+Wczct′+bz)z_{t^{′}}=\sigma(W_{yz}y_{t^{′}-1}+W_{sz}s_{t^{′}-1}+W_{cz}c_{t^{′}}+b_z)zt′​=σ(Wyz​yt′−1​+Wsz​st′−1​+Wcz​ct′​+bz​)

s~t′=tanh(Wysyt′−1+Wss(st′−1⊙rt′)+Wcsct′+bs)\tilde{s}_{t^{′}}=tanh(W_{ys}y_{t^{′}-1}+W_{ss}(s_{t^{′}-1}⊙r_{t^{′}})+W_{cs}c_{t^{′}}+b_s)s~t′​=tanh(Wys​yt′−1​+Wss​(st′−1​⊙rt′​)+Wcs​ct′​+bs​)

其中含下标的 W 和 b 分别为⻔控循环单元的权重参数和偏差参数。

4. 发展

本质上,注意⼒机制能够为表征中较有价值的部分分配较多的计算资源。这个有趣的想法⾃提出后得到了快速发展,特别是启发了依靠注意⼒机制来编码输⼊序列并解码出输出序列的变换器(Transformer)模型的设计。变换器抛弃了卷积神经⽹络和循环神经⽹络的架构。它在计算效率上⽐基于循环神经⽹络的编码器—解码器模型通常更具明显优势。含注意⼒机制的变换器的编码结构在后来的BERT预训练模型中得以应⽤并令后者⼤放异彩:微调后的模型在多达11项⾃然语⾔处理任务中取得了当时最先进的结果。不久后,同样是基于变换器设计的GPT-2模型于新收集的语料数据集预训练后,在7个未参与训练的语⾔模型数据集上均取得了当时最先进的结果。除了⾃然语⾔处理领域,注意⼒机制还被⼴泛⽤于图像分类、⾃动图像描述、唇语解读以及语⾳识别。

5. 代码实现

注意力模型实现中英文机器翻译

  1. 数据预处理

    首先先下载本目录的数据和代码,并执行 datautil.py,生成中、英文字典。

  2. 执行 train.ipynb,训练时间会比较长。

  3. 测试模型,运行test.py文件。

【机器学习通俗易懂系列文章】

6. 参考文献

动手学深度学习


作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

欢迎大家加入讨论!共同完善此项目!群号:【541954936】

Attention机制的精要总结,附:中英文机器翻译的实现!相关推荐

  1. Attention机制的总结笔记

    人类的视觉注意力 Attention机制借鉴了人类的视觉注意力机制.视觉注意力机制是人类视觉所特有的大脑信号处理机制.人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦 ...

  2. 基于attention机制的中英文机器翻译

    前言 为了准备3月中旬的复试,今天回顾整理一下大三下学期做的机器学习课程设计,当时做的是基于attention机制的中英文机器翻译.参考的资料是pytorch官网的英法文间的机器翻译.pytorch参 ...

  3. 通道注意力机制_即插即用,Triplet Attention机制让Channel和Spatial交互更加丰富(附开源代码)...

    ↑ 点击蓝字 关注极市平台作者丨ChaucerG来源丨AI人工智能初学者编辑丨极市平台 极市导读 本文介绍了一种新的注意力机制--Triplet Attention,它通过使用Triplet Bran ...

  4. 「NLP」 聊聊NLP中的attention机制

    https://www.toutiao.com/i6716536091681227267/ 本篇介绍在NLP中各项任务及模型中引入相当广泛的Attention机制.在Transformer中,最重要的 ...

  5. 【NLP】 聊聊NLP中的attention机制

    本篇介绍在NLP中各项任务及模型中引入相当广泛的Attention机制.在Transformer中,最重要的特点也是Attention.首先详细介绍其由来,然后具体介绍了其编解码结构的引入和原理,最后 ...

  6. 【TensorFlow实战笔记】对于TED(en-zh)数据集进行Seq2Seq模型实战,以及对应的Attention机制(tf保存模型读取模型)

    个人公众号 AI蜗牛车 作者是南京985AI硕士,CSDN博客专家,研究方向主要是时空序列预测和时间序列数据挖掘,获国家奖学金,校十佳大学生,省优秀毕业生,阿里天池时空序列比赛rank3.公众号致力于 ...

  7. 深度学习——attention机制

    一.序列编码 目前主流的处理序列问题像机器翻译,文档摘要,对话系统,QA等都是encoder和decoder框架, 编码器:从单词序列到句子表示 解码器:从句子表示转化为单词序列分布 1.第一个基本的 ...

  8. Attention机制理解笔记(空间注意力+通道注意力+CBAM+BAM)

    Attention机制理解笔记 声明 Attention分类(主要SA和CA) spitial attention channel attention SA + CA(spitial attentio ...

  9. seq2seq与Attention机制

    学习目标 目标 掌握seq2seq模型特点 掌握集束搜索方式 掌握BLEU评估方法 掌握Attention机制 应用 应用Keras实现seq2seq对日期格式的翻译 4.3.1 seq2seq se ...

最新文章

  1. 皮一皮:男生的求生欲,以及神回复...
  2. 【java8中的时间操作】java8中获取月的最后一天或者总天数,JDK8 LocalDate AP
  3. chrome js 读取文件夹_使用JavaScript遍历本地文件夹的文件
  4. Android系统移植与驱动开发概述
  5. jzoj1751-Span(每日C组)【并查集,贪心】
  6. PyQt5笔记(06) -- 菜单
  7. Linux 用户操作
  8. spring-data-jpa动态条件查询
  9. 如何使用CineMatch的伪色指南功能来帮助评估图像
  10. 集成融云没有ipc进程的天坑
  11. Java 集合系列Stack详细介绍(源码解析)和使用示例
  12. JS中的!=、== 、!==、=== 的用法和区别
  13. python中的写入文件
  14. 函数发生器输出电压值会与设定值不同
  15. Liunx学习笔记--基本网络设定(测试内容)
  16. 服务器保密系统,泛微OA系统secWall保密方案之一:服务器端部署
  17. html标签的记忆巧法,小学记忆单词的方法
  18. 传奇手游开服教程:怎么开传奇手游?开传奇手游需要准备什么?
  19. 安装报错:TypeError: _classify_installed_files() got an unexpected keyword argument ‘cmake_install_dir‘
  20. 700+页机器学习笔记pdf下载

热门文章

  1. 名帖337 张旭 草书《古诗四帖》
  2. 计算机系大二学期计划范文,大二学期学习计划范文
  3. iOS 几种常用的 crash log 崩溃信息调试方法. (转载)
  4. 草根创业,这三大坑千万别踩
  5. parker派克柱塞泵PV046R1K1T1NUDM
  6. Java 帝国之Java bean上
  7. Leetcode-数据结构-118. 杨辉三角
  8. 将excel中的一个工作表按照某列拆分成多个sheet工作表
  9. echarts 柱状图数字在顶部显示
  10. 柱状图标签在柱的上方怎么进行展示