RNN编码器-解码器
读 Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation
论文的主要贡献
提出了一个新的神经网络模型叫做 RNN编码-解码器 ,该模型包含两个RNN,分别位于编码器和解码器中,编码器中的RNN负责将变长的输入序列映射到一个固定长度的向量中,解码器中的RNN则负责将向量映射到一个变长的输出序列中。定性的来讲,这个模型可以学习语言短语的有意义的的语义和句法表示。
提出了一个新的LSTM变体GRU。GRU到现在都非常受欢迎。
RNN Encoder-Decoder
图 1 RNN Encoder-Decoder 模型
图1就是本篇论文所提出的一个新的深度学习模型,叫做 RNN编码器解码器 ,编码器和解码器分别包含一个RNN,图1展示的是RNN展开之后的情况。
编码器
图 2 RNN Encoder
图2 编码器部分标注出了隐藏层状态,用 ht\mathbf{h}_tht 表示,其更新公式为:
ht=f(ht−1,xt)(1)\mathbf{h}_t = f(\mathbf{h}_{t-1},x_t) \tag{1} ht=f(ht−1,xt)(1)
公式(1)说明当前时刻的隐藏层状态 hth_tht 是由上一时刻的状态 ht−1h_{t-1}ht−1 和当前时刻的输入 xtx_txt 共同决定的。 fff 是一个函数,可以是一个简单的逻辑函数,比如sigmoid函数,也可以是一个复杂的函数,比如LSTM。这篇论文中 fff 用的是作者提出的一个新的结构,叫做GRU,后面会讲。
图2 中 C 是中间语义表示。
可以是各个时刻隐层输出的汇总:
C=g(h1,h2,...,hT)(2)C = g(\mathbf{h}_1,\mathbf{h}_2,...,\mathbf{h}_T) \tag{2} C=g(h1,h2,...,hT)(2)
也可以是最后一层隐层的输出:
C=hT(3)C = \mathbf{h}_T \tag{3} C=hT(3)
在本篇论文中作者是将隐层的最后输出作为语义表示 C 。由于编码器用的是RNN的结构,每一个循环中的信息都会流到下一个循环中,因此中间语义表示 C 理论上包含了输入序列的所有信息。
解码器
图 3 RNN Decoder
图3 标注出了解码器的隐藏层状态,为了防止跟编码器部分混淆,我们用 st\mathbf{s}_tst 表示。从图中可以看出,隐藏层的状态更新,不仅跟上一时刻的输出 st−1\mathbf{s}_{t-1}st−1 和当前时刻的输入 c\mathbf{c}c 有关系,还跟上一时刻的输出 yt−1y_{t-1}yt−1 有关:
st=f(st−1,yt−1,c)(4)\mathbf{s}_t = f(\mathbf{s}_{t-1},y_{t-1},\mathbf{c}) \tag{4} st=f(st−1,yt−1,c)(4)
之后我们就可以计算模型的输出预测了:
P(yt∣yt−1,yt−2,...,y1,c)=g(st,yt−1,c)(5)P(y_t|y_{t-1},y_{t-2},...,y_1, \mathbf{c})=g(\mathbf{s}_t,y_{t-1}, \mathbf{c}) \tag{5} P(yt∣yt−1,yt−2,...,y1,c)=g(st,yt−1,c)(5)
其中 ggg 函数一般为softmax函数。
训练
maxθ1N∑n=1Nlogpθ(yn∣xn)(6)\underset{\theta}{\mathrm{max}} \frac{1}{N}\sum_{n=1}^Nlogp_{{\theta}}(\mathbf{y}_n|\mathbf{x}_n) \tag{6} θmaxN1n=1∑Nlogpθ(yn∣xn)(6)
这个公式就是我们训练的目标函数,目的是最大化这个条件对数似然函数。其中 θ{\theta}θ 是模型的参数,(xn,yn)(\mathbf{x}_n, \mathbf{y}_n)(xn,yn) 代表输入输出句子对
GRU
图4 论文中提到的 Hidden Activation,后来被称为GRU
图4 就是本篇论文中作者提出的隐藏层激活函数,后来被称为GRU(Gate Recurrent Unit)。
先来看一下GRU各个状态是如何更新的:
hjt=zjhjt−1+(1−zj)h~jt(7)h_j^t = z_jh_j^{t-1}+(1-z_j)\widetilde{h}_j^t \tag{7} hjt=zjhjt−1+(1−zj)hjt(7)
h~jt=ϕ([Wx]j+[U(r⊙ht−1)]j)(8)\widetilde{h}_j^t=\phi \Big([W\mathbf{x}]_j + [U \big(\mathbf{r} \odot \mathbf{h}_{t-1} \big)]_j \Big) \tag{8} hjt=ϕ([Wx]j+[U(r⊙ht−1)]j)(8)
zj=σ([Wzx]j+[Uzht−1]j)(9)z_j=\sigma \Big( [W_z\mathbf{x}]_j + [U_z\mathbf{h}_{t-1}]_j \Big) \tag{9} zj=σ([Wzx]j+[Uzht−1]j)(9)
rj=σ([Wrx]j+[Urht−1]j)(10)r_j = \sigma \Big( [W_r\mathbf{x}]_j + [U_r\mathbf{h}_{t-1}]_j \Big) \tag{10} rj=σ([Wrx]j+[Urht−1]j)(10)
其中, [.]j[.]_j[.]j 代表向量的第 j 个元素。也就是说公式(7)-(10)是以单个元素为例进行计算的。 ⊙\odot⊙ 表示将两个形状相同的矩阵对应元素相乘。 [.]+[.][.]+[.][.]+[.] 代表将两个向量进行拼接,不是对应元素相加。x\mathbf{x}x 和 ht−1\mathbf{h}_{t-1}ht−1 分别代表输入和上一层的隐藏状态。 W∗W_*W∗ 和 U∗U_*U∗ 代表 权重矩阵, ∗*∗ 代表r、z或空。σ\sigmaσ 代表sigmoid函数。图中的 z 和 r 分别代表更新门和重置门。
如果重置门被设置为0,那么先前的隐藏层状态就会被强制遗忘,然后用当前的输入进行重置。这使得隐藏层状态可以有效的丢 弃跟未来没有任何关系的信息,从而使信息表达更为紧凑。
而更新门则是用来控制先前的隐藏层状态会携带多少信息到当前状态。
上面这两条可以结合公式(7)来理解,公式(7)左侧表示更新门携带的信息,右侧表示遗忘门携带的信息。
上面的图都是作者原始论文中的图,我稍微加了些辅助线帮助理解,但是整个模型可能还不是特别容易理解。所以又从网上找了后人改进的图:
图源: 动手学深度学习
图5
图源:直观理解LSTM(长短时记忆网络)
图6
可以自己结合公式跟上面这个图进行对应理解。
完!
RNN编码器-解码器相关推荐
- 【Seq2Seq】使用 RNN 编码器-解码器学习短语表示以进行统计机器翻译
- 深度学习入门(六十四)循环神经网络——编码器-解码器架构
深度学习入门(六十四)循环神经网络--编码器-解码器架构 前言 循环神经网络--编码器-解码器架构 课件 重新考察CNN 重新考察RNN 编码器-解码器架构 总结 教材 1 编码器 2 解码器 3 合 ...
- Encoder-Decoder -编码器解码器架构(RNN循环神经网络)
文章目录 编码器-解码器架构 编码器 解码器 合并编码器和解码器 小结 编码器-解码器架构 正如我们之前所讨论的,机器翻译是序列转换模型的一个核心问题,其输入和输出都是长度可变的序列. 为了处理这种类 ...
- 【神经网络】MLP 编码器-解码器 注意力机制 残差连接
[1] 多层感知机(MLP) 最典型的MLP包括包括三层:输入层.隐层和输出层,MLP神经网络不同层之间是全连接的(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接). 由 ...
- 【深度学习】图文并茂!用Keras LSTM构建编码器-解码器模型
作者 | Nechu BM 编译 | VK 来源 | Towards Data Science 基础知识:了解本文之前最好拥有关于循环神经网络(RNN)和编解码器的知识. 本文是关于如何使用Pytho ...
- 机器学习中的编码器-解码器结构哲学
其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 本文PD ...
- 机器翻译 MXNet(使用含注意力机制的编码器—解码器,即 Encoder编码器-Decoder解码器框架 + Attention注意力机制)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- 编码器-解码器(seq2seq)
文章目录 1.编码器解码器架构 1.1.概念 1.2.代码 1.2.1.编码器(Encoder) 1.2.2.解码器(Decoder) 1.2.3.合并编码器和解码器 2.seq2seq模型 2.1. ...
- 使用基于注意力的编码器-解码器实现医学图像描述
来源:DeepHub IMBA 本文约8000字,建议阅读10+分钟 本文为你介绍使用计算机视觉和自然语言处理来为X 射线的图像生成文本描述. 什么是图像描述 图像描述是生成图像文本描述的过程.它使用 ...
最新文章
- 音效摸鱼还不够爽?试试IDE里打几盘魂斗罗?
- 一键添加JAVA环境变量
- python特性、属性以及私有化
- linux之父子进程的输出
- vs中四点画矩形的算法_中考热点,初高中衔接之倒角利器四点共圆
- Python学习笔记之列表(四)
- linux+PATH
- [BZOJ] 3301: [USACO2011 Feb] Cow Line
- 九.类的进化(魔法方法、特性和迭代器)
- python怎么更改背景颜色_python中绘图时怎么改背景颜色?
- 【无标题】2022施工员-设备方向-岗位技能(施工员)考试题模拟考试题库及模拟考试
- matlab打不开怎么办,matlab打不开_matlab打不开怎么办 matleb打不开的修复方法
- 传输层常见的协议及端口
- 动态规划求解金矿问题
- 谢谢版主整理的好材料,,妈妈再也不用担心的我的unity
- linux 关闭桌面特效,[多图] Ubuntu 中开启3D桌面特效与设置方法
- CAN 错误帧和原理
- SSM项目tomcat启动失败-Multiple Contexts have a path of “/ssm-crud“
- Hive Sql中六种面试题型总结
- 算力智库2021隐私计算论坛圆满落幕,隐私计算落地会长出怎样的新商业模式?