[关闭]
@songying 2019-03-13T11:11:59.000000Z 字数 2551 阅读 950

深度学习: 循环神经网络

deep-learning


1. 处理文本数据时,RNN与前馈神经网络的区别

卷积神经网络对文本数据建模时, 输入变长的字符串或单词串,然后通过滑动窗口加池化的方式将原先的输入转化为一个固定长度的向量表示,这样做可以捕捉到文本中的一些局部特征,但两个单词之间的长距离依赖关系还是很难被学习到。

循环神经网络能够很好的处理文本数据变长且有序的输入序列,它能够将前面的有用信息编码到状态变量中去,从而拥有一定的记忆能力,能够更好的理解文本。

2. RNN 中的梯度消失问题

3. RNN 中的激活函数

RNN能否采用Relu作为激活函数

可以,但是需要对矩阵的初值做一定限制,否则非常容易引发数值问题。 夹着Relu一直处于激活区域(即输入>0),则在前向传播中, 表达式中会包含W个连乘,如果W不是单位矩阵(对角元素为1,其余元素为0),则结果将会趋于0或者无穷。从反向传播的角度来看,如果采用了Relu, 只要W不是单位矩阵,就还会出现梯度消失,梯度爆炸的问题。

而在卷积神经网络中,每一层的权重W是不同的,因此多层之后一般不会出现严重的数值问题。

实验表明: 单位矩阵W+Relu 能够取得与LSTM相似的效果,值得尝试。

4. LSTM

1. 理论概述

  • 遗忘门: 对 c_t 的影响

  • 输入门: 的影响

  • 输出门: 的影响

在LSTM中,当 中没有重要信息时,遗忘门的值接近于1, 输入门的值接近于0, 此时过去的记忆会被保存,从而实现长期记忆功能。 当中出现了重要的信息时,输入门的值会接近于1;当中出现重要信息且之前的记忆都不再重要时,输入门的值接近1, 遗忘门的值接近0,这样旧的记忆就被遗忘,新的重要信息被记忆。

2. LSTM 中各个模块的激活函数

遗忘门,输入门,输出门使用Sigmoid函数作为激活函数; 生成记忆时采用tanh。注意,这两个激活函数都是饱和的,即输入达到一定值的情况下,输出就不会发生明显变化。

Sigmoid 输出在0-1之间,因此十分符合门的定义。tanh的输出在-1~1之间,这与大多数场景下特征分布是0中心温和,且tanh输入为0附近有较大的梯度,通常使模型收敛更快。

在计算资源受限的设备中,可以采用0/1门来替换sigmoid。

5. Seq2Seq

核心思想是通过深度神经网络将一个输入序列映射为一个输出序列,这一过程由Encoder,Decoder两个过程。

Decoder 常见方法

大量的改进都发生在Decoder部分。

6. 注意力机制

1. 注意力机制解决了什么问题

随着输入序列的增长,模型的性能发生了显著下降,这是因为Encoder时输入序列的全部信息压缩到一个向量表示中,随着序列增长,句子越前面的词的信息丢失就越严重。双向LSTM能一定程度缓解这个问题,但对过长的序列仍然难以有更好的表现。 此外,在Decoder的输出序列中,常常会损失部分输入序列的信息,这是因为在Encoder时,当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注