Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

预备知识:

    RNN:循环神经网络

    处理序列化数据,一般用于多输入多输出,数据之间存在关联性

    U:输入层到隐藏层的权重矩阵

    V:隐藏层到输出层的权重矩阵

    W:隐藏层S不仅仅取决于当前这次的的输入x,还取决于上一次隐藏层的值St-1,权重矩阵W就是隐藏层上一次的值作为这一次输入的权重。

用公式表示如下:

    Ot=g(V*St)

    St=f(U*Xt+W*St-1)

    在处理序列化数据时,当序列数据比较长时,RNN展开的层次就会越来越深,这会导致长期依赖问题,而长期依赖便会导致梯度消失与梯度爆炸问题。

    问题出现的原因是在反向传播更新权值矩阵求偏导的过程中,有些权值对时间t依赖很重,同时激活函数又较小,所以t无穷大时会导致梯度为0

    因此,我们提出了LSTM(长短时记忆网络)来解决这个问题,这个后面再具体说明。

文章具体原理:

    本文提出一个神经网络模型RNN-Encoder-Decoder,他的作用一般是用在SNT中,作为机器翻译的一部分。

    RNN-Encoder-Decoder:

    对于单层RNN来说,输入为x={x1,x2,….xt},在某时刻的隐藏单元,h(t)=f(h(t-1),xt),f为激励函数,一般为sigmod或tanh,同时注意最后会经过一个softmax层,输出概率。

    而在本文中,整体的结构图为:

 

    从这个结构图中我们可以看出来RNN-Encoder-Decoder 分为两部分,Encoder的作用是编码,也就是将输入序列{x1,x2…..xt}生成一个中间编码向量,然后再利用这个中间编码向量输入到Decoder中,生成输出序列,这就可以实现n-m的效果,因为对于SMT系统来说,输入序列长度和输出序列长度一般是不同的。

    具体实现方面,我们分为train和predict,在train时,输入为<x1,x2….xt>和<y1,y2,…yt>两个序列数组。将<x1,x2….xt>输入到encoder中,并不输出值,而是最后输出一个C隐藏量表示整体的输入序列(这个地方便是前面可能会出现的长时记忆问题,可以通过LSTM进行改进)。对于Decoder来说,隐藏变量ht取决于encoder中的C,上一级的隐藏变量ht-1以及yt-1(这个地方yt-1在train阶段输入的为训练集中的y,在predict阶段为上一级输入的y)h(t)=f(h(t-1),yt-1,c),同样,最终输出yt,并由softmax转为Pt。

    注意:我们注意一件事,我们在decoder阶段输出的y是一个句子序列的特征向量,而这个特征向量与word2vec类似,都是单词或句子的特征表示。同时,y经过softmax后得到词的概率向量,也就是整个句子中每个词的one-hot概率表示,然后我们利用这个表示,计算损失,从而进行优化。

GRU:

    实际上这篇文章最大的贡献是提出了GRU,说起GRU,我们必须先提LSTM。

    LSTM解决了梯度消失的问题,可以处理长序列数据。

    原始RNN的隐藏层只有一个状态,即h,我们再增加一个c,用来保存长期状态,称为单元状态,结构图如下图所示:

    我们用输入数据以及三套W,b计算出三个值,并经一个sigmod激活函数转化为0-1的值,作为一种门控状态,从而选择性记忆一些数据。

    本文提出的GRU相比于LSTM来说,计算更加简单,却能达到和LSTM相似的结果,效率更高。

   

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值