欢迎光临 x-algo
关注算法在工业界应用
Hi, 这是一个关注大数据算法在工业界应用的网站

从LSTM到Seq2Seq

LSTM(Long Short Term Memory)

由于传统的RNN在进行几次链式法则求导后梯度会指数级缩小(如图),导致传播几层后出现梯度消失,无法处理“长期依赖”问题。国外学者刻意设计了一种RNN的变体来克服这个问题,即LSTM。

3

基本的LSTM结构如图:

4

(1) 输入门 \(i_{t}\) :控制当前输入和前一步输出进入新的cell的信息量;

(2) 忘记门 \(f_{t}\) :决定哪些信息需要舍弃;

(3) cell状态更新 \(c_{t}\) :计算下一个时间戳的状态使用经过们处理的前一状态和输入;

(4) 输出门 \(o_{t}\) :计算cell的输出;

(5) 最终LSTM的输出 \(y_{t}\) :使用一个对当前状态的softmax变换进行重变换。

根据上图,设输入序列 \(x=(x_{1},...,x_{T})\) ,输出序列 \(y=(y_{1},...,y_{T})\) ,我们可以得到以上每步的计算公式:

\(i{_{t}}=\sigma (W{_{ix}}x_{t}+W{_{im}}m_{t-1}+W_{ic}c_{t-1}+b_{i})\)    (1)

\(f{_{t}}=\sigma (W{_{fx}}x_{t}+W{_{fm}}m_{t-1}+W_{fc}c_{t-1}+b_{f})\)    (2)

\(c{_{t}}=f_{t}\odot c_{t-1}+i_{t}\odot g(W{_{cx}}x_{t}+W{_{cm}}m_{t-1}+b_{c})\)    (3)

\(o_{t}=\sigma (W_{ox}x_{t}+W_{om}m_{t-1}+W_{oc}c_{t}+b_{o})\)    (4)

\(m_{t}=o_{t}\odot h(c_{t})\)    (5)

\(y_{t}=\phi (W_{ym}m_{t}+b_{y})\)    (6)

其中 \(W\) 代表各个权重矩阵,如 \(W_{ix}\) 是输入门到输出的权重矩阵, \(b\) 代表偏置向量,如 \(b_{i}\) 是输入门的偏置向量, \(\sigma\) 是sigmoid函数,i,f,o,c分别代表输入门,忘记门,输出门以及cell状态更新向量,m是与i,f,o,c具有相同大小的输出向量,☉代表点乘,g和h分别为cell的输入输出激活函数,一般为tanh,Φ代表最终的LSTM输出激活函数,一般为softmax。

以上是标准LSTM结构的表达式,图3的结构中还有一层“recurrent projection layer”,则公式(6)可由公式(7)和公式(8)替代:(参考:Long Short-Term Memory Recurrent Neural Network Architectures for Large Scale Acoustic Modeling)

\(r_{t}=W_{rm}m_{t}\)    (7)

\(y_{t}=\phi (W_{yr}r_{t}+b_{y})\)    (8)

Encoder-Decoder

对于一些NLP任务,比如聊天机器人、机器翻译、自动文摘等,传统的方法都是从候选集中选出答案,这对候选集的完善程度要求很高。随着近年来深度学习的发展,国内外学者将深度学习技术应用于NLG(Nature Language Generation,自然语言生成)和NLU(Nature Language Understanding, 自然语言理解),并取得了一些成果。Encoer-Decoder是近两年来在NLG和NLU方面应用较多的方法。然而,由于语言本身的复杂性,目前还没有一种模型能真正解决NLG和NLU问题。

Encoder-Decoder的基本结构如图所示:

QQ截图20170109101654

上图是一个已经在时间维度上展开(unroll)的Encoder-Decoder模型,其输入序列是”ABC”,输出序列是”WXYZ”,其中”<EOS>”是句子结束符。该模型由两个RNN组成:第1个RNN接受输入序列”ABC”并在读取到<EOS>时终止接受输入,并输出一个向量作为”ABC”这个输入项链的语义表示向量,此过程称为”Encoder”;第二个RNN接受第一个RNN产生的输入序列的语义向量,并且每个时刻t输出词的概率都与前t-1时刻的输出有关。

其中v是encoder过程产生的语义向量。

(1)  Encoder

Encoder过程很简单,直接使用RNN(一般用LSTM)进行语义向量生成:

\(h_{t}=f(x_{t},h_{t-1})\)

\(c=\phi({h_{1},...,h_{T}})\)

其中f是非线性激活函数, \(h_{t-1}\) 是上一隐节点输出, \(x_{t}\) 是当前时刻的输入。向量c通常为RNN中的最后一个隐节点(h, Hidden state),或者是多个隐节点的加权和。

(2) Decoder

该模型的decoder过程是使用另一个RNN通过当前隐状态 \(h_{t}\) 来预测当前的输出符号 \(y_{t}\) ,这里的 \(h_{t}\)\(y_{t}\) 都与其前一个隐状态和输出有关:

\(h_{t}=f(h_{t-1},y_{t-1},c)\)

\(P(y_{t}|y_{t-1},...,y_{1},c)=g(h_{t},y_{t-1},c)\)

Attention Mechanism

Encoder-Decoder模型对于目标句子Y中每个单词的生成过程如下:

\(y_{1}=f(c)\)

\(y_{2}=f(c,y_{1})\)

\(y_{3}=f(c,y_{1},y_{2})\)

其中f是decoder的非线性变换函数,由此可知,不论生成哪个单词,使用的语义向量都是c,而语义向量c是由句子X的每个单词经过Encoder编码而成的,也就意味着句子X中的单词对生成任意目标单词的影响力是相同的。Attention Model会对输入序列X的不同单词分配不同的概率,如下图所示:

2

此时目标单词生成过程如下:

\(y_{1}=f(c1)\)

\(y_{2}=f(c2,y_{1})\)

\(y_{3}=f(c3,y_{1},y_{2})\)

其中c(i)对应输入序列X不同单词的概率分布,其计算公式为:

\(c_{i}=\sum _{i=1}^{n}\alpha _{ij}h_{j}\)

其中n为输入序列的长度, \(h_{j}\) 是第j时刻的隐状态,而权重 \(\alpha_{ij}\) 用如下公式计算:

\(\alpha _{ij}=\frac{exp(e_{ij})}{\sum _{k=1}^{n}exp(e_{ik})}\)

这里:

\(e_{ij}=a(s_{i-1},h_{j})\)

a是一种对齐模型, \(s_{i-1}\) 是decoder过程的前一个隐状态的输出, \(h_{j}\) 是encoder过程的当前第j个隐状态。

参考文献:

Sequence to Sequence Learning with Neural Networks

A Neural Conversational Model

Neural Machine Translation by Jointly Learning to Align and Translate

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

http://suriyadeepan.github.io/2016-06-28-easy-seq2seq/

http://blog.csdn.net/malefactor/article/details/50550211

http://blog.csdn.net/malefactor/article/details/50583474

 

未经允许不得转载:大数据算法 » 从LSTM到Seq2Seq

评论 抢沙发

*

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

关注大数据算法在工业界应用

本站的GitHub关于本站