(十四)RNN(Recurrent Neural Network)

 

RNN主要是对序列进行记忆化处理

  • 把隐藏层的输出会存入内存中
  • 内存会作为隐藏层的另一个输入
  • RNN会考虑输入序列的顺序

1.RNN示例

一个简单的示例

deep RNN

两种不同的网络架构

  • Elman Network:存储隐藏层的输出
  • Jordan Network:存储最后的输出

双向RNN

2.Long Short-term Memory(LSTM)

  • Input Gate,Output Gate,Forget Gate是通过训练得到的

2.1 LSTM计算过程

  • 4个输入都是不一样的

2.2 RNN LSTM

  • 先对输$x^t$ 进行变换,得到四个不同的向量$z^f,z^i,z,z^o$,分别作为LSTM的四个输入
  • $c^{t-1}$代表控制cell的值

3.RNN的训练

3.1 Loss Function

  • 序列中每个元素输入到RNN的输出和参考向量(Reference Vector)的交叉熵(Cross Entrpy)之和

3.2 Backpropagation through time(BPTT)

使用梯度下降方法进行训练

3.3 训练很难

  • RNN的error surface(loss function 对参数的变化)在某些地方非常平坦,在某些地方又非常陡峭
  • 会导致训练时loss 剧烈震荡
  • 有时梯度非常大,会导致参数更新异常
  • 这是因为相同的权值在不同的时间点会被反复使用

3.4 解决办法

(1) 设置阈值

设置梯度值的阈值,限制求解的梯度保持在阈值以下

(2) 使用LSTM

  • 可以解决梯度消失的问题,学习率设置很小
  • 不是所有时间点的memory都会覆盖掉
  • memory和input的值是相加的

(3) Gated Recurrent Unit(GRU)

  • 旧的不去,新的不来
  • input gate打开时,forget gate就会自动关闭

(4)单位阵初始化权值

使用一般的RNN,用单位矩阵初始化隐藏层转移的权值,使用ReLU作为激活函数,效果很好

4. RNN的应用

4.1 Many to One

输入是一个词汇序列,输出仅仅为一个向量

  • 语义分析(Sentiment Analysis)
  • 关键词提取(Key Term Extraction)

4.2 Many to Many

输入和输出均为系列,但输出更短

  • 语音辨识(Speech Recognition)

4.3 Many to Many(No Limitation)

  • 机器翻译(machine Translation)

4.4 其他应用

  • Syntatic parsing(句法分析)

5. RNN VS Structured Learning

5.1 Structured Learning

HMM,CRF,Structured Perceptron/SVM