[Deep Learning] 循环神经网络 RNN

本文是深度学习总结系列的第四篇,本文的主要内容是对循环神经网络进行介绍。
本系列传送门:https://www.jianshu.com/nb/17592740

本文的主要内容包括:

  1. 语言模型
  2. 循环神经网络
    2.1 单个RNN单元
    2.2 RNN基础架构
  3. Vanilla RNN的问题及改进
    3.1 梯度消失和梯度爆炸
    3.2 LSTM
    3.3 GRU
    3.4 训练问题
  4. RNN变种

1. 语言模型

语言模型通过提供句子中各个词的概率分布预测下一个词,N-gram通过统计不同N-grams的频率,使用它们来计算下一个词,这样模型需要保存所有可能的N-grams的数量,模型大小为n的指数级。

[Deep Learning] 循环神经网络 RNN_第1张图片
4-gram

传统的N-gram统计模型最大问题是在预测使用时无法处理新出现的词,这一问题神经网络可以解决。然而,如果简单地使用基础的MLP,输入句子序列预测接下来一个词,则会丢失句子序列的时序依赖,且输入维度只能是固定维度。
[Deep Learning] 循环神经网络 RNN_第2张图片
MLP

为解决上述问题,可以对基础的MLP稍作改进,使用n-gram MLP,例如下图的2-gram MLP,这一模型不限制输入序列的维度,也可以保留句子的序列信息,然而n-gram中所能保留的序列依赖信息依然是固定且有限的(取决于n的选择),且模型大小受n-gram size的影响会导致参数爆炸。
[Deep Learning] 循环神经网络 RNN_第3张图片
2-gram MLP

LM的评价指标
混乱度

OOV的解决:
用预训练的语料集
char-level
random vector

glove word2vec加统计信息
fasttext subword level

不同上下文下同一个词的embedding理应不同

为解决语言模型中参数爆炸问题,RNN基于时序平稳性的假设提出了参数共享的方案,据此,RNN可以基本实现对序列数据的有效处理,这一发展过程可总结为RNN的两大特性:
一是,类似于卷积神经网络的空间局部依赖假设,RNN基于时序的局部依赖假设(Local Dependency Assumption)保留了序列的时序信息。


[Deep Learning] 循环神经网络 RNN_第4张图片
Local Dependency

二是,上述基于时序平稳性假设(Temporal Stationarity Assumption)的参数共享机制:输入序列不同时序数据间的参数共享,而非不同隐层间的参数共享。


[Deep Learning] 循环神经网络 RNN_第5张图片
Param Sharing
2. 循环神经网络
2.1 单个RNN单元

对于单个节点,RNN增加了之前节点状态的信息(时序局部依赖),由隐藏的向量h表示。RNN使用tanh激活函数(也可以使用relu),值得注意的是根据参数每个时间戳使用的都是相同的激活函数函数和参数集W,U,V。

[Deep Learning] 循环神经网络 RNN_第6张图片
单个RNN节点结构

和通常concat:
[Deep Learning] 循环神经网络 RNN_第7张图片
x_t和h_t-1通常concat

上图中的自循环实际表示:
[Deep Learning] 循环神经网络 RNN_第8张图片
基本结构

2.2 RNN基础架构

神经网络的输入输出可能面对多对一(情绪分析)、一对多(图像释义)、多对多(机器翻译、帧水平视频分类)等情形或需要对非序列数据进行时序处理,这些都属于RNN架构的基本范畴。


[Deep Learning] 循环神经网络 RNN_第9张图片
RNN基础结构

下面以最通用的Many-to-Many进行说明:
RNN的通常初始化为零,输入数据使用One-hot编码。对于变长的序列,多余的位置使用padding置0

[Deep Learning] 循环神经网络 RNN_第10张图片
RNN计算图

Deep RNN
not deep in time

问题:
时序依赖性弱 仅rnn
误差累积 对于所有序列问题的学习

Deep RNN
n-gram RNN

[Deep Learning] 循环神经网络 RNN_第11张图片
image.png

Beam search

Seq2Seq模型实际即多对一(编码器)和一对多(解码器)RNN模型的结合。


[Deep Learning] 循环神经网络 RNN_第12张图片
Sequence2Sequence

Seq2seq 使用scheduled sample来解决shift in training and test
同构 参数共享
异构 attention

RNN训练
  • 反向传播缩短Truncate


    [Deep Learning] 循环神经网络 RNN_第13张图片
    BPTT compute expensive
[Deep Learning] 循环神经网络 RNN_第14张图片
分块反向传播
  • 字符级RNN简易语言模型的112行python实现Minimal character-level language model
4. RNN变种

你可能感兴趣的:([Deep Learning] 循环神经网络 RNN)