一、网络结构
RNN 处理输入序列时的信息流。 粗体箭头为各时间点信息流的活跃路径,虚线箭头显示当时不活动的连接。
一个简单RNN例子
RNN 不是一类网络,而是适用于不同问题的拓扑结构的集合。循环网络的一个有趣的方面是,有了足够的层和节点,它们是图灵完备的,这意味着它们可以实现任何可计算函数。
深层循环神经网络
三种构建深层循环网络的方案
二、网络的训练
循环神经网络的每个训练样本一般是一个序列,也就是一个有序的元素列表。例如,一个文本序列可以是一个单词列表,一个音频序列可以是一个声音信号的采样点列表,一个视频序列可以是一个图像帧的列表,等等。每个序列的长度可以不同,但是每个元素的维度必须相同。每个序列也可以有一个对应的标签,用于监督学习的目的。例如,一个文本序列的标签可以是一个类别,一个音频序列的标签可以是一个语音识别的结果,一个视频序列的标签可以是一个动作识别的结果,等等。
BPTT(Back Propagation Through Time)算法
RNN 网络在处理输入序列 [X1, X2,…, Xt ] 时随时间展开。
尽管循环神经网络(RNN)能够处理输入序列,但它们面临梯度消失的问题。这是因为训练RNN处理输入序列需要通过整个序列的长度进行误差反向传播。例如,在图5.3中的网络中,必须通过整个网络将在输出Yt上计算的误差进行反向传播,以便用于更新从h0和X1到h1的连接上的权重。这涉及通过所有隐藏层进行误差反向传播,进而涉及通过连接从一个隐藏层向下一个隐藏层传递激活的权重重复相乘。这个过程的一个特定问题是,同一组权重在所有隐藏层之间的所有连接上都被使用:每个水平箭头表示内存缓冲区和隐藏层之间的同一组连接,这些连接上的权重随时间保持不变(即,在处理给定输入序列期间,它们在一个时间步到下一个时间步不改变)。因此,通过k个时间步进行误差反向传播涉及(除其他乘法之外)将误差梯度与相同的权重集合相乘k次。这相当于将每个误差梯度乘以一个被提高到k次方的权重。如果这个权重小于1,那么当它被提高到某个次方时,它以指数速率减小,因此,相对于序列长度,误差梯度也倾向于以指数速率减小并最终消失。
时间反向传播 (BPTT) 是一种基于梯度的技术,用于训练特定类型循环神经网络。它可用于训练 Elman 网络。该算法由多名研究人员独立推导出来。
Back_Propagation_Through_Time(a, y) # a[t] 是时间 t 的输入,y[t] 是输出
Unfold the network to contain k instances of f # 将网络展开,包含 k 个 f 的实例
do until stopping criterion is met: # 循环直到满足停止条件
x := the zero-magnitude vector # x 是当前的上下文
for t from 0 to n − k do # t 是时间,n 是训练序列的长度
Set the network inputs to x, a[t], a[t+1], ..., a[t+k−1] # 设置网络的输入为 x, a[t], a[t+1], ..., a[t+k−1]
p := forward-propagate the inputs over the whole unfolded network # 对整个展开的网络进行前向传播,得到输出 p
e := y[t+k] − p; # e 是误差,等于目标值 y[t+k] 减去预测值 p
Back-propagate the error, e, back across the whole unfolded network # 对整个展开的网络进行反向传播,计算误差 e 对权重的梯度
Sum the weight changes in the k instances of f together. # 将 k 个 f 的实例中的权重变化求和
Update all the weights in f and g. # 更新 f 和 g 中的所有权重
x := f(x, a[t]); # 计算下一个时间步的上下文 x
循环神经网络输出层激活函数与损失函数配合使用情况
三、挑战与改进措施
3.1 RNN模型的梯度消失和梯度爆炸问题
3.2 长短期记忆模型(Long Short-Term Memory,LSTM)
与传统的RNN网络不同,LSTM不仅可以从当前状态获取信息,还可以从先前的状态获取信息。
3.3 门控循环单元(Gated Recurrent Units)
门控循环单元,完全门控版本
类型1
类型2
类型3
3.4 双向网络
双向神经网络的原理是将标准循环神经网络的神经元分成正时间方向(前向)和负时间方向(后向)。这两种状态的输出仅与同样方向状态的输入相连。循环神经网络和双向循环神经网络的一般结构如图所示。通过使用两个时间方向,双向循环神经网络可以使用当前、过去和未来时间下的输入信息,而不像标准的循环神经网络需要通过延迟来使用将来时间的信息。
3.5 注意力与增强型循环神经网络
参考网址:
https://developer.ibm.com/articles/cc-cognitive-recurrent-neural-networks/ 循环神经网络深入探究 - IBM Developer
https://en.wikipedia.org/wiki/Backpropagation_through_time 随时间反向传播 - 维基百科 --- Backpropagation through time - Wikipedia
https://www.math.ucla.edu/~minchen/doc/BPTTTutorial.pdf BPTTTutorial.pdf (ucla.edu)
https://colah.github.io/
https://en.wikipedia.org/wiki/Gated_recurrent_unit Gated recurrent unit - Wikipedia
https://distill.pub/2016/augmented-rnns/ 注意力与增强型循环神经网络