带Attention机制的Seq2Seq框架梳理
来源:互联网 发布:淘宝店更换类目影响 编辑:程序博客网 时间:2024/06/04 01:24
借着与同事组内分享的机会,根据论文Neural Machine Translation By Jointly Learning to Align and Translate把带Attention机制的Seq2Seq框架Encoder与Decoder部分的流程图画了一下,公式梳理了一遍。
Bi-RNN Encoder
Encoder的流程如上图所示,最终的输出结果是每个时刻的hidden_state
其中的GRU使用的双向的,正向部分的公式如下
反向的同上,最终的
Attention-Decoder
Attention Decoder的流程图如上图所示,与参考论文中不同的一点是,我把hidden_state之后Dense_layer之前的maxout layer去掉了,因为看到google Seq2Seq的实现中也没有maxout layer,与朋友讨论的结果是可能maxout layer会增加更多的计算量。还有就是最后的softmax直接变成argmax了。
上图中拿掉右边方框内的的Attention机制就是一个基本的decoder,基本的decoder与encoder的交互仅在decoder初始的hidden_state上,如将encoder中反向RNN最终的输出状态
Attention 机制也就是注意力机制,也称为对齐模型(alignment model), 在翻译阶段, 准备生成每个新的词的时候, 这个机制可以将注意力集中在输入的某个或某几个词上,重点关注这几个词, 可以想象成是将他们与待生成的新词进行对齐,使得翻译更精准。
整个decoding的过程可以拆分为以下几个部分
一、 离散的词ID转换为词向量
与Encoder 中的这个步骤是一样的, 只不过embedding矩阵与Encoder的可能不一样,比如翻译源语言与目标语言需要使用不同的embbedding矩阵,但是如文本摘或是文本风格改写这种就可以使用同一个embedding矩阵。
二、 由encoder的输出结合decoder的prev_hidden_state生成energy
prev_hidden_state为
其中
三、 由energy 到概率
使用attention的目的,是希望得到一个context向量,因此需要将
使用softmax求得概率 , 公式如下
四、context 向量合成
得到对输入序列每一时刻的权值
五、prev_hidden_state, 词向量, context向量通过GRU单元生成下一时刻hidden_state
decoder本质是一个GRU单元,与GRU不同的在于融合了由attention机制产生的context向量。在decoding的场景,只能用单向的RNN,因为后续时刻的结果在当前时刻是未知的。
将decoder在时刻
其中
六、 使用全连接层将hidden_state映射为vocabulary size的向量
生成的hidden_state已经包含了待生成的词的信息了,但是要生成具体的词,我们还需要知道目标语言中每个词的条件概率
- 带Attention机制的Seq2Seq框架梳理
- seq2seq以及Attention机制
- 图解RNN、RNN变体、Seq2Seq、Attention机制
- seq2seq里的 attention机制 的 原理 及 代码 及 个人理解
- 完全图解RNN、RNN变体、Seq2Seq、Attention机制
- Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
- Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
- Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
- attention 机制
- Attention机制
- attention机制
- QA(二):利用Attention机制,带着问题阅读
- 加入attention机制的image caption问题
- 深度学习-->NLP-->Seq2Seq Learning(Encoder-Decoder,Beam Search,Attention)
- attention机制 深入理解
- attention 机制入门
- attention 机制入门
- attention机制详解
- Centos 7 中部署ASP.NET Core网站问题记录
- Linuxc语言复习篇指针(-)
- Maven的Tomcat插件的使用
- LintCoder python 小白2-骰子求和
- PagerSlidingTabStrip源码分析
- 带Attention机制的Seq2Seq框架梳理
- 石子归并问题
- 直方图最大矩形面积--c/c++
- Android之自定义Button控件
- Java中声明变量的八进制与十六进制
- 第四天-Java继承
- CentOS 7装mysql
- python网络数据采集读书笔记0
- 大话PCIe:设备枚举