CS224N笔记——机器翻译和GRU以及LSTM

目录

复习

使用RNN的机器翻译

GRU

LSTM


  • 复习

Word2Vec:J_{t}(\theta )=log\sigma (u_{o}^{T}v_{c})+\sum_{j\sim P(w)}^{ }[log\sigma (-u_{j}^{T}v_{c})]

Glove:J(\theta )=\frac{1}{2}\sum_{i,j=1}^{W}f(P_{ij})(u_{i}^{T}v_{j}-logP_{ij})^{2}

Nnet&Max-margin:s=U^{T}f(Wx+b)J=max(0,1-s+s_{c})

Multilayer Nnet&Backprop:\delta ^{(l)}=((W^{(l)})^{T}\delta ^{(l+1)})\circ {f}'(z^{(l)})\frac{\partial }{\partial W^{(l)}}E_{R}=\delta ^{(l+1)}(a^{(l)})^{T}+\lambda W^{(l)}

RNN:h_{t}=\sigma (W^{hh}h_{t-1}+W^{(hx)}x_{t})\widehat{y_{t}}=softmax(W^{(S)}h_{t})

Cross Entropy:J^{(t)}(\theta )=-\sum_{j=1}^{|V|}y_{t,j}log\widehat{y}_{t,j}

Mini-batch SGD:\theta ^{new}=\theta ^{old}-\alpha \bigtriangledown _{\theta }J_{t:t+B}(\theta )

  • 使用RNN的机器翻译

CS224N笔记——机器翻译和GRU以及LSTM_第1张图片

红圈所示特征表示必须能捕捉整个原文短语的语义,但是RNN无法记住太久之前的事情,大概五六个单词就到极限了。所以这不是个实用的模型。

在这个最简单的模型中,

Encoder是:

h_{t}=\phi (h_{t-1},x_{t})=f(W^{(hh)}h_{t-1}+W^{(hx)}x_{t})

Decoder是:

h_{t}=\phi (h_{t-1})=f(W^{(hh)}h_{t-1})

y_{t}=softmax(W^{(S)}h_{t})

最小化所有训练实例上的交叉熵误差:

max_{\theta }\frac{1}{N}\sum_{n=1}^{N}logp_{\theta }(y^{(n)}|x^{(n)})

softmax分类器中必须有个代表句子终止的“单词”,不然模型会无休止地输出下去。

但神经网络机器翻译模型没有这么简单,必须加一些拓展。

1.编码器和解码器训练不同的权值矩阵

CS224N笔记——机器翻译和GRU以及LSTM_第2张图片

红蓝代表不同的权值。

2.decoder中的隐藏层的输入来自3个方面:

  • 前一个时刻的隐藏层
  • encoder的最后一个隐藏层(c=h_{T})
  • 前一个预测结果\widehat{y}_{t-1}

decoder变为:h_{D,t}=\phi _{D}(h_{t-1},c,y_{t-1})

CS224N笔记——机器翻译和GRU以及LSTM_第3张图片

可以辅助训练softmax的权值矩阵,防止模型重复生成同一个单词。

上图还有一个复杂版本,表达的是同一个意思:

CS224N笔记——机器翻译和GRU以及LSTM_第4张图片

带黑点的表示离散的向量表示,否则表示连续的向量空间。

3.使用深层RNN或双向RNN

CS224N笔记——机器翻译和GRU以及LSTM_第5张图片

4.不再用A B C→X Y作为训练实例,而是逆转原文词序:C B A→X Y

因为A更可能翻译为X,而梯度消失导致A无法影响输出,倒过来A离输出近一些。逆转词序不会带来“语法语义上的改变”,因为模型学习的就是如何从逆序的原文翻译顺序的译文。但相应的,C就离Y更远了。

  • GRU

引入Gated Recurrent Units (GRU),这种单元可以让模型学习何时遗忘从而将记忆保持很久、允许误差根据输入的不同而不同。

标准的RNN直接计算隐藏层:

h_{t}=f(W^{(hh)}h_{t-1}+W^{(hx)}x_{t})

GRU先根据当前输入的词向量和隐藏层计算一个update gate(另一个层):

z_{t}=\sigma (W^{(z)}x_{t}+U^{(z)}h_{t-1})

利用相同的方法不同的权值计算reset gate

r_{t}=\sigma (W^{(r)}x_{t}+U^{(r)}h_{t-1})

然后利用reset gate计算新的记忆:

\widetilde{h}_{t}=tanh(Wx_{t}+r_{t}\circ Uh_{t-1})

这里的意思是,之前的记忆由reset gate控制,如果reset gate元素都是0,则遗忘之前的事情。

而update gate的作用是调节最后的更新,到底时刻t的记忆多少来自之前,多少来自当前:

h_{t}=z_{t}\circ h_{t-1}+(1-z_{t})\circ \widetilde{h}_{t}

如果z_{t}是单位向量的话,则隐藏层只是复制前一个时刻的隐藏层,梯度不发生变化(衰减)。

把上述公式写在一起非常直观:

CS224N笔记——机器翻译和GRU以及LSTM_第6张图片

示意图:

CS224N笔记——机器翻译和GRU以及LSTM_第7张图片

上图中,虚线代表某个gate的调节作用。隐藏层取决于上一个时刻的隐藏层和新的记忆,而update gate负责调节它们的比例,reset gate和输入共同决定新的记忆。

  • LSTM

CS224N笔记——机器翻译和GRU以及LSTM_第8张图片

LSTM的计算可以分为如下步骤:

  1. New memory generation 与GRU的New memory generation类似。使用当前词语x_{t}和之前的隐状态h_{t-1}来生成新的记忆\widetilde{c}_{t}。于是新记忆里面就包含了当前词语x^{(t)}的属性。
  2. Input Gate 使用当前词语和之前的隐状态决定当前词语是否值得保留来gate新记忆,这个“是否”是通过i_{t}来体现的。
  3. Forget Gate 与input gate类似,只不过它不是用来衡量输入单词的有用与否,而是衡量过去的记忆对计算当前记忆有用与否。它接受输入单词和上一刻的隐状态产生输出f_{t}
  4. Final memory generation 根据forget gate的建议f_{t}来遗忘过去的记忆c_{t-1}。类似地,根据input gate的建议i_{t}来gate新的记忆\widetilde{c}_{t},然后把两者加起来得到最终记忆c_{t}
  5. Output/Exposure Gate 这是GRU中不显式存在的门,用处是将最终记忆与隐状态分离开来。记忆c_{t}中的信息不是全部都需要存放到隐状态中,隐状态是个很重要的使用很频繁的东西,LSTM中每个gate都需要隐状态的参与。Output Gate产生o_{t},用来gate记忆的tanh激活值。

CS224N笔记——机器翻译和GRU以及LSTM_第9张图片

用于机器翻译

输入原文序列,将最后一个时刻的隐藏层向量PCA降维后可视化:

CS224N笔记——机器翻译和GRU以及LSTM_第10张图片

发现无论词序如何,意义相同的句子在向量空间中更接近。

进一步改进:更多门

CS224N笔记——机器翻译和GRU以及LSTM_第11张图片

你可能感兴趣的:(NLP,CS224N)