一、RNN

RNN适合应用于序列,变长的句子。

1.引入

CNN参数共享 rnn共享参数_CNN参数共享

z为线性变化,a为激活函数

2.函数近似语言模型*(近似定理)

CNN参数共享 rnn共享参数_CNN参数共享_02


CNN参数共享 rnn共享参数_CNN参数共享_03

前馈的输入的长度是有限的依赖问题,FNN太宽(也就是0/1就可以构成一个windows,但不会这么做)

引入RNN能更好的学习有历史依赖关系的情况*(序列有前后依赖关系)

CNN参数共享 rnn共享参数_CNN参数共享_04

3.RNN

CNN参数共享 rnn共享参数_神经网络_05

U和W是共享的,也就是在更新的时候是不变化的。

输出的时候也是用同一个V。(实际应用中可以调整,实际应用最好共享)

求 U,V,W参数:用反向传播算法(几乎处处连续可微,因为relu在0不可微)

CNN参数共享 rnn共享参数_CNN参数共享_06


CNN参数共享 rnn共享参数_CNN参数共享_07

4.Back-propagation For Recurrent Nets

在实际应用中,会线性RNN的长度。

4.1 BPTT计算梯度

把计算RNN的过程展开为一个前馈神经网络,再用前馈神经网络的方式求解参数。

所有的梯度都得保存。

CNN参数共享 rnn共享参数_激活函数_08

关于参数V(只用到了在计算h(t)的时候)

CNN参数共享 rnn共享参数_神经网络_09

参数W和U

CNN参数共享 rnn共享参数_神经网络_10

4.2 RTRL计算梯度(NLP用的少)

Real-time Recurrent Learning(RTRL),最后求出来的梯度是一样的。

在前向传播的时候,维护一个额外的变量,同时保存梯度。实时性.

没有人专门研究RTRL和BPTT谁好.

CNN参数共享 rnn共享参数_激活函数_11

4.3 为什么不建立一个无限长的序列

RNN在应用的时候,会限制其长度.RNN长的时候很难优化,会有梯度为0或者梯度爆炸.(连乘)

CNN参数共享 rnn共享参数_依赖关系_12

偏导数都是小于1的

CNN参数共享 rnn共享参数_CNN参数共享_13

解决:Dropout
Mark一些h(t)
https://medium.com/@bingobee01/a-review-of-dropout-as-applied-to-rnns-72e79ecd5b7b

CNN参数共享 rnn共享参数_依赖关系_14


CNN参数共享 rnn共享参数_依赖关系_15


CNN参数共享 rnn共享参数_CNN参数共享_16

二、LSTM(Long Short-term Memory)

LSTM接着RNN,自动学习了Marks,在哪个位置更新h,哪个位置不更新(不参与梯度计算)。

防止了梯度消失。

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

CNN参数共享 rnn共享参数_激活函数_17

1.Naïve RNN vs LSTM

CNN参数共享 rnn共享参数_神经网络_18


CNN参数共享 rnn共享参数_依赖关系_19

2.LSTM具体介绍

2.1 Core Idea of the LSTM: Gate

根据C去决定是否更新当前状态要不要使用t去更新当前的隐状态

CNN参数共享 rnn共享参数_神经网络_20

2.2 Forget Gate

用遗忘门忘记一些东西,去为更新C_t做准备(要不要更新C和h)。Sigmoid的激活函数(输出在0-1之间,偏向于0更想忘掉一些东西,偏向于1更像记住)

CNN参数共享 rnn共享参数_神经网络_21

2.3 input Gate

CNN参数共享 rnn共享参数_依赖关系_22


更新C_t

CNN参数共享 rnn共享参数_CNN参数共享_23

2.4 Output Gate

Output对c进行了选择

CNN参数共享 rnn共享参数_神经网络_24

总的:最后我们会把h_t和C_t拼接起来继续输出。(C和h的维度是一样的)

CNN参数共享 rnn共享参数_激活函数_25

3. LSTM变种

add peephole

CNN参数共享 rnn共享参数_CNN参数共享_26

Forget while input:忘多少记多少

CNN参数共享 rnn共享参数_激活函数_27

4. GUR:LSTM最流行的变种

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

效果类似,速度更快

CNN参数共享 rnn共享参数_激活函数_28

5.Bi-LSTM

LSTM可视化:Visualizing and Understanding Neural models in nlp

LSTMVis:A Tools for Visual Analysis of hidden state Dynamics in Recurrent Neural Networks

CNN参数共享 rnn共享参数_激活函数_29

三、Applications

3.1 递归神经网络(recursive neural networks)

未解决问题:怎么决定融合的顺序?(贪心?)

CNN参数共享 rnn共享参数_CNN参数共享_30

3.2 Stacked RNN(堆叠式的RNN)

多个隐状态h_t,m_t,n_t(参数多,计算慢,但能力更强)

1-5层

CNN参数共享 rnn共享参数_依赖关系_31

3.3 双向RNN

同时拥有左右的信息。可并行计算。

CNN参数共享 rnn共享参数_依赖关系_32


CNN参数共享 rnn共享参数_CNN参数共享_33


CNN参数共享 rnn共享参数_激活函数_34


CNN参数共享 rnn共享参数_CNN参数共享_35


CNN参数共享 rnn共享参数_CNN参数共享_36


CNN参数共享 rnn共享参数_依赖关系_37


CNN参数共享 rnn共享参数_激活函数_38