【机器学习】循环神经网络(一)

【机器学习】循环神经网络(一)_第1张图片

一、网络结构

【机器学习】循环神经网络(一)_第2张图片

【机器学习】循环神经网络(一)_第3张图片

【机器学习】循环神经网络(一)_第4张图片

【机器学习】循环神经网络(一)_第5张图片

RNN 处理输入序列时的信息流。 粗体箭头为各时间点信息流的活跃路径,虚线箭头显示当时不活动的连接。

一个简单RNN例子

RNN 不是一类网络,而是适用于不同问题的拓扑结构的集合。循环网络的一个有趣的方面是,有了足够的层和节点,它们是图灵完备的,这意味着它们可以实现任何可计算函数。

深层循环神经网络

【机器学习】循环神经网络(一)_第6张图片

【机器学习】循环神经网络(一)_第7张图片

三种构建深层循环网络的方案

【机器学习】循环神经网络(一)_第8张图片

【机器学习】循环神经网络(一)_第9张图片

二、网络的训练

【机器学习】循环神经网络(一)_第10张图片

循环神经网络的每个训练样本一般是一个序列,也就是一个有序的元素列表。例如,一个文本序列可以是一个单词列表,一个音频序列可以是一个声音信号的采样点列表,一个视频序列可以是一个图像帧的列表,等等。每个序列的长度可以不同,但是每个元素的维度必须相同。每个序列也可以有一个对应的标签,用于监督学习的目的。例如,一个文本序列的标签可以是一个类别,一个音频序列的标签可以是一个语音识别的结果,一个视频序列的标签可以是一个动作识别的结果,等等。

BPTT(Back Propagation Through Time)算法

【机器学习】循环神经网络(一)_第11张图片

RNN 网络在处理输入序列 [X1, X2,…, Xt ] 时随时间展开。

尽管循环神经网络(RNN)能够处理输入序列,但它们面临梯度消失的问题。这是因为训练RNN处理输入序列需要通过整个序列的长度进行误差反向传播。例如,在图5.3中的网络中,必须通过整个网络将在输出Yt上计算的误差进行反向传播,以便用于更新从h0和X1到h1的连接上的权重。这涉及通过所有隐藏层进行误差反向传播,进而涉及通过连接从一个隐藏层向下一个隐藏层传递激活的权重重复相乘。这个过程的一个特定问题是,同一组权重在所有隐藏层之间的所有连接上都被使用每个水平箭头表示内存缓冲区和隐藏层之间的同一组连接,这些连接上的权重随时间保持不变(即,在处理给定输入序列期间,它们在一个时间步到下一个时间步不改变)。因此,通过k个时间步进行误差反向传播涉及(除其他乘法之外)将误差梯度与相同的权重集合相乘k次这相当于将每个误差梯度乘以一个被提高到k次方的权重。如果这个权重小于1,那么当它被提高到某个次方时,它以指数速率减小,因此,相对于序列长度,误差梯度也倾向于以指数速率减小并最终消失

时间反向传播 (BPTT) 是一种基于梯度的技术,用于训练特定类型循环神经网络。它可用于训练 Elman 网络。该算法由多名研究人员独立推导出来。

【机器学习】循环神经网络(一)_第12张图片

【机器学习】循环神经网络(一)_第13张图片

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

循环神经网络输出层激活函数与损失函数配合使用情况

【机器学习】循环神经网络(一)_第14张图片

三、挑战与改进措施

3.1 RNN模型的梯度消失和梯度爆炸问题

【机器学习】循环神经网络(一)_第15张图片

3.2 长短期记忆模型(Long Short-Term Memory,LSTM)

【机器学习】循环神经网络(一)_第16张图片

【机器学习】循环神经网络(一)_第17张图片

与传统的RNN网络不同,LSTM不仅可以从当前状态获取信息,还可以从先前的状态获取信息。

【机器学习】循环神经网络(一)_第18张图片

【机器学习】循环神经网络(一)_第19张图片

【机器学习】循环神经网络(一)_第20张图片

【机器学习】循环神经网络(一)_第21张图片

【机器学习】循环神经网络(一)_第22张图片

3.3 门控循环单元(Gated Recurrent Units)

【机器学习】循环神经网络(一)_第23张图片

【机器学习】循环神经网络(一)_第24张图片

门控循环单元,完全门控版本

【机器学习】循环神经网络(一)_第25张图片

【机器学习】循环神经网络(一)_第26张图片

【机器学习】循环神经网络(一)_第27张图片

类型1

【机器学习】循环神经网络(一)_第28张图片

类型2

【机器学习】循环神经网络(一)_第29张图片

类型3

【机器学习】循环神经网络(一)_第30张图片

【机器学习】循环神经网络(一)_第31张图片

3.4 双向网络

【机器学习】循环神经网络(一)_第32张图片

【机器学习】循环神经网络(一)_第33张图片

双向神经网络的原理是将标准循环神经网络的神经元分成正时间方向(前向)和负时间方向(后向)。这两种状态的输出仅与同样方向状态的输入相连。循环神经网络和双向循环神经网络的一般结构如图所示。通过使用两个时间方向,双向循环神经网络可以使用当前、过去和未来时间下的输入信息,而不像标准的循环神经网络需要通过延迟来使用将来时间的信息。

3.5 注意力与增强型循环神经网络

【机器学习】循环神经网络(一)_第34张图片

参考网址:

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/ 注意力与增强型循环神经网络

你可能感兴趣的:(机器学习,rnn,人工智能,深度学习,神经网络)