Seq2Seq模型与注意力机制
Seq2Seq模型
基本原理
- 核心思想:将一个作为输入的序列映射为一个作为输出的序列
- 编码输入
- 解码输出

- 解码第一步,解码器进入编码器的最终状态,生成第一个输出
- 以后解码器读入上一步的输出,生成当前步输出
- 组成部件:
- Encoder
- Decoder
- 连接两者的固定大小的State Vector
解码方法
- 最核心部分,大部分的改进
- 贪心法
- 选取一种度量标准后,在当前状态下选择最佳的一个结果,直到结束
- 计算代价低
- 局部最优解
- 选取一种度量标准后,在当前状态下选择最佳的一个结果,直到结束
- 集束搜索(Beam Search)
- 启发式算法
- 保存beam size个当前较佳选择,决定了计算量,8~12最佳
- 解码时每一步根据保存的结果选择下一步扩展和排序,选择前beam size个保存
- 循环迭代,直到结束。选择最佳结果输出
- 改进
- 堆叠RNN
- Dropout机制
- 与编码器之间建立残差连接
- 注意力机制
- 记忆网络
注意力机制
Seq2Seq模型中的注意力机制
- 在实际发现,随着输入序列增长,模型性能发生显著下降
- 小技巧
- 将源语言句子逆序输入,或者重复输入两遍,得到一定的性能提升
- 解码时当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了
- 引入注意力机制解决上述问题:
- 解码时,每一个输出词都依赖于前一个隐状态以及输入序列每一个对应的隐状态
\[s_i = f(s_{i-1}, y_{i-1},c_i)\]
\[p(y_i|y_1,\cdots,y_{i-1})=g(y_{i-1},s_i,c_i)\]
其中,\(y\)是输出词,\(s\)是当前隐状态,\(f,g\)是非线性变换,通常为神经网络 - 语境向量\(c_i\)是输入序列全部隐状态\(h_1,\cdots,h_T\)的加权和
\[c_i=\sum \limits_{j=1}^T a_{ij}h_j \]
\[a_{ij} = \frac{\exp(e_{ij})}{\sum_k \exp(e_{ij})} \]
\[e_{ij}=a(s_{i-1},h_j) \] - 神经网络\(a\)将上一个输出序列隐状态\(s_{i-1}\)和输入序列隐状态\(h_j\)作为输入,计算出一个\(x_j,y_i\)对齐的值\(e_{ij}\)
- 考虑每个输入词与当前输出词的对齐关系,对齐越好的词,会有更大权重,对当前输出影响更大
- 双向循环神经网络
- 单方向:\(h_i\)只包含了\(x_0\)到\(x_i\)的信息,\(a_{ij}\)丢失了\(x_i\)后面的信息
双方向:第\(i\)个输入词对应的隐状态包括了\(\overrightarrow{h}_i\)和\(\overleftarrow{h}_i\),前者编码了\(x_0\)到\(x_i\)的信息,后者编码了\(x_i\)及之后的信息,防止信息丢失

- 解码时,每一个输出词都依赖于前一个隐状态以及输入序列每一个对应的隐状态
常见Attention形式
本质:一个查询(query)到一系列(键key-值value)对的映射

- 计算过程
- 将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等
- 使用一个softmax函数对这些权重进行归一化
- 权重和相应的键值value进行加权求和得到最后的attention

Seq2Seq模型与注意力机制的更多相关文章
- 深度学习教程 | Seq2Seq序列模型和注意力机制
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/35 本文地址:http://www.showmeai.tech/article-det ...
- 深度学习之seq2seq模型以及Attention机制
RNN,LSTM,seq2seq等模型广泛用于自然语言处理以及回归预测,本期详解seq2seq模型以及attention机制的原理以及在回归预测方向的运用. 1. seq2seq模型介绍 seq2se ...
- 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第三周 序列模型和注意力机制(Sequence models & Attention mechanism)-课程笔记
第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 3.1 序列结构的各种序列(Various sequence to sequence ...
- Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutor ...
- DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制
一.基础模型 假设要翻译下面这句话: "简将要在9月访问中国" 正确的翻译结果应该是: "Jane is visiting China in September" ...
- ng-深度学习-课程笔记-17: 序列模型和注意力机制(Week3)
1 基础模型(Basic models) 一个机器翻译的例子,比如把法语翻译成英语,如何构建一个神经网络来解决这个问题呢? 首先用RNN构建一个encoder,对法语进行编码,得到一系列特征 然后用R ...
- Coursera Deep Learning笔记 序列模型(三)Sequence models & Attention mechanism(序列模型和注意力机制)
参考 1. 基础模型(Basic Model) Sequence to sequence模型(Seq2Seq) 从机器翻译到语音识别方面都有着广泛的应用. 举例: 该机器翻译问题,可以使用" ...
- DLNg第三周:序列模型和注意力机制
1.基础模型 将法语翻译为英语,分为编码和解码阶段,将一个序列变为另一个序列.即序列对序列模型. 从图中识别出物体的状态,将图片转换为文字. 先使用CNN处理图片,再使用RNN将其转换为语言描述. 2 ...
- NLP教程(6) - 神经机器翻译、seq2seq与注意力机制
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- Elasticsearch 索引文档的增删改查
利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...
- exam9.3
# 用 户 名 公园 计划 抽卡 总分 19 859乔屹 100 03:15:05 40 03:14:01 140 03:15:05 emm 怎么讲 T2我把自己优化掉了40分 优 ...
- P4556 雨天的尾巴 线段树合并
使用线段树合并,每个节点维护一棵权值线段树,下标为救济粮种类,区间维护数量最多的救济粮编号(下标).所以每个节点答案即为\(tre[rot[x]]\). 然后运用树上点的差分思想,对于分发路径\(u, ...
- [转]OpenMP中几个容易混淆的函数(线程数量/线程ID/线程最大数)以及并行区域线程数量的确定
说明:这部分内容比较基础,主要是分析几个容易混淆的OpenMP函数,加以理解. (1)并行区域数量的确定: 在这里,先回顾一下OpenMP的parallel并行区域线程数量的确定,对于一个并行区域,有 ...
- 实验1C语言开发环境使用和数据类型、运算符、表达式
# include <stdio.h> int main() { char ch; printf("输入一个字符:\n"); scanf("%c", ...
- jmeter+ant+jenkins构建自动化测试
背景目的: 持续更新.... 参考文档:https://blog.csdn.net/cherish0123/article/details/79339732
- 提高十连测day3
提高十连测day3 A 我们可以枚举两个 $ 1 $ 之间的相隔距离,然后计算形如 $ 00100100 \cdots $ 的串在原串中最⻓⼦序列匹配即可,复杂度 $ O(n^2) $ .寻找 $ S ...
- Linux--系统调优
建议看看:https://www.cnblogs.com/yinzhengjie/p/9994207.html 一.关闭swap交换分区 Linux swapoff命令用于关闭系统交换区(swap a ...
- d3.js之树形折叠树
1.效果 children和_children 2.技术分解 2.1折叠函数 // (1) 递归调用,有子孙的就把children(显示)给_children(不显示)暂存,便于折叠, functio ...
- Centos7使用python3连接inception报错解决办法
inception支持mysqldb库但不支持pymysql库,无奈mysqldb库不兼容py3,直接使用pymysql 连接inception报错如下: ValueError: invalid li ...