本文是深度学习总结系列的第四篇,本文的主要内容是对循环神经网络进行介绍。
本系列传送门:https://www.jianshu.com/nb/17592740
本文的主要内容包括:
- 语言模型
- 循环神经网络
2.1 单个RNN单元
2.2 RNN基础架构 - Vanilla RNN的问题及改进
3.1 梯度消失和梯度爆炸
3.2 LSTM
3.3 GRU
3.4 训练问题 - RNN变种
1. 语言模型
语言模型通过提供句子中各个词的概率分布预测下一个词,N-gram通过统计不同N-grams的频率,使用它们来计算下一个词,这样模型需要保存所有可能的N-grams的数量,模型大小为n的指数级。

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

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

LM的评价指标
混乱度
OOV的解决:
用预训练的语料集
char-level
random vector
glove word2vec加统计信息
fasttext subword level
不同上下文下同一个词的embedding理应不同
为解决语言模型中参数爆炸问题,RNN基于时序平稳性的假设提出了参数共享的方案,据此,RNN可以基本实现对序列数据的有效处理,这一发展过程可总结为RNN的两大特性:
一是,类似于卷积神经网络的空间局部依赖假设,RNN基于时序的局部依赖假设(Local Dependency Assumption)保留了序列的时序信息。

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

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

和通常concat:

上图中的自循环实际表示:

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

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

Deep RNN
not deep in time
问题:
时序依赖性弱 仅rnn
误差累积 对于所有序列问题的学习
Deep RNN
n-gram RNN

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

Seq2seq 使用scheduled sample来解决shift in training and test
同构 参数共享
异构 attention
RNN训练
-
反向传播缩短Truncate
BPTT compute expensive

- 字符级RNN简易语言模型的112行python实现Minimal character-level language model
网友评论