RNN
对于带时间序列的任务场景(如语音识别、情感分析、机器翻译等,这些场景的特点是前后的关联性强,“前因后果”),如果用标准的神经网络来建模,会有一系列的弊端,如:
- 输入和输出数据在不同例子中可能有不同的长度
- 单纯的神经网络结构,并不共享从数据的不同位置学到的特征。如一个含有特征a的数据是从输入神经元x1输入的,那么神经网络经过训练之后,就可以从这个位置学到特征a,但如果该数据换了位置,神经网络可能就学不到了。
- 参数量巨大
- 没有办法体现出时序上的“前因后果”
因此,RNN网络应运而生。
RNN的网络结构
损失函数
损失函数包含两部分:
(1)单个时间步的损失函数
(2)整个序列的损失函数(其实就是把各个时间步的损失进行求和)
RNN的特点
- 串联结构,体现出“前因后果”,后面结果的生成,要参考前面的信息
- 所有特征共享同一套参数
RNN的缺点
- 当序列太长时,容易导致梯度消失,参数更新只能捕捉到局部依赖关系,没法再捕捉到序列之间的长期关联或者依赖关系
例如:The cat,which ate already , … , was full. 句中的was还是were,要看前面是cat,还是cats,但是一旦中间的这个which句子很长 , cat的信息根本传不到was这里来,对was的更新没有任何帮助,这是RNN一个很大的不足之处。
注意:这里的梯度消失现象并不是说后面时刻参数更新的时候梯度为0,而是说后面时刻梯度更新的时候,前面更远时刻的序列对参数更新是起不到作用的,梯度被近距离梯度主导,所以才说RNN无法捕捉长期依赖。
计算公式:
从公式理解梯度消失和梯度爆炸现象:
LSTM
与RNN对比:
RNN是想把所有信息都记住,不管是有用的信息还是没用的信息。
LSTM是设计一个记忆细胞,具备选择性记忆的功能,可以选择记忆重要信息,过滤掉噪声信息,减轻记忆负担。
LSTM网络单元结构:
记忆元:在LSTM的每个时间步里面,都有一个记忆cell,它给了LSTM选择记忆的功能,使得LSTM有能力自由地选择每个时间步里面记忆地内容。图中Ct-1和Ct即为记忆元。
为了控制记忆元,我们需要许多门。
忘记门:控制输入X和上一层隐藏层输出h被遗忘的程度大小
输入门:控制输入X和当前计算的状态更新到记忆单元的程度大小。决定是不是忽略掉输入数据。
输出门:决定是不是使用隐状态
计算公式:
候选记忆单元计算公式:
记忆单元计算公式;
隐状态计算公式:
参考:
长短期记忆网络(LSTM)【动手学深度学习v2】
【重温经典】大白话讲解LSTM长短期记忆网络 如何缓解梯度消失,手把手公式
【重温系列】RNN循环神经网络及其梯度消失 手把手公式推导+大白话讲解