RNN系列

一、RNN

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

1.引入

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

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


前馈的输入的长度是有限的依赖问题,FNN太宽(也就是0/1就可以构成一个windows,但不会这么做)
引入RNN能更好的学习有历史依赖关系的情况*(序列有前后依赖关系)

3.RNN

U和W是共享的,也就是在更新的时候是不变化的。
输出的时候也是用同一个V。(实际应用中可以调整,实际应用最好共享)
求 U,V,W参数:用反向传播算法(几乎处处连续可微,因为relu在0不可微)

4.Back-propagation For Recurrent Nets

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

4.1 BPTT计算梯度

把计算RNN的过程展开为一个前馈神经网络,再用前馈神经网络的方式求解参数。
所有的梯度都得保存。

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

参数W和U

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

Real-time Recurrent Learning(RTRL),最后求出来的梯度是一样的。
在前向传播的时候,维护一个额外的变量,同时保存梯度。实时性.
没有人专门研究RTRL和BPTT谁好.

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

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

偏导数都是小于1的

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



二、LSTM(Long Short-term Memory)

LSTM接着RNN,自动学习了Marks,在哪个位置更新h,哪个位置不更新(不参与梯度计算)。
防止了梯度消失。
https://colah.github.io/posts/2015-08-Understanding-LSTMs/

1.Naïve RNN vs LSTM


2.LSTM具体介绍

2.1 Core Idea of the LSTM: Gate

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

2.2 Forget Gate

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

2.3 input Gate


更新C_t

2.4 Output Gate

Output对c进行了选择

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

3. LSTM变种

add peephole

Forget while input:忘多少记多少

4. GUR:LSTM最流行的变种

Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation
效果类似,速度更快

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

三、Applications

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

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

3.2 Stacked RNN(堆叠式的RNN)

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

3.3 双向RNN

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






posted @ 2020-12-26 15:21  TOWERB  阅读(170)  评论(0编辑  收藏  举报