循环神经网络与前馈神经网络的异同点
循环神经网络的原则与前馈神经网络相同,但是也有以下两个主要区别,循环神经网络使用:1. 序列作为训练阶段的输入。2. 记忆要素
存储是隐藏层神经与的输出,在接下来训练步骤中将作为网络的额外输入。
在前馈神经网络中任何时间t的输出,是当前输入和权重的函数。这可以用以下方程式很容易表示:
在循环神经网络中,我们在时间t的输出不仅取决于当前的输入和权重,还取决于之前的输入。在这个例子中,时间t的输出定义为:
以下是循环神经网络的折叠模型:
在这幅图中,表示输入向量,表示输出向量,表示状态向量。
: 连接输入层到状态层的权重矩阵
: 连接状态层到输出层的权重矩阵
: 表示连接之前时间步长状态到当前时间步长状态的权重矩阵
RNN的展开模型
下图是循环神经网络的基于时间的展开,展开模型通常是我们处理循环神经网络时使用的方法。
表示输入向量,表示输出向量,表示状态向量。
:连接输入到状态层的权重矩阵
:连接状态层到输出层的权重矩阵
:连接之前时间步长状态到当前时间步长状态的权重矩阵
在前馈神经网络中,隐藏层只取决于当前的输入和权重、以及激活函数,具体如下:
在循环神经网络中,状态层依赖于当前的输入及其对应的权重值,激活函数,也 取决于之前的状态:
输出向量的计算与前馈神经网络中完全一致。它是对应权重矩阵的输入到每个输出节点的线性组合,也可以是相同线性组合的softmax函数。
或
基于时间的反向传播算法
对于误差的计算,我们会使用损失函数,其中
表示时间t的输出误差
表示时间t的理想输出
表示在时间t的计算输出
在基于时间的反向传播算法中,我们在时间步长t训练网络,也会考虑之前的所有步长。
我们用以下例子来讲解反向传播算法理论:
在这个例子中,我们将关注时间步长 t=3 时基于时间的反向传播算法过程,所以需要调整权重的矩阵有, 我们需要考虑时间步长3,时间步长2和时间步长1。
我们关注时间步长t=3时,损失函数为
为了更新每个权重矩阵,我们需要找到时间为 3 损失函数的偏导数,作为所有权重矩阵的函数。我们将使用梯度下降,修改每个矩阵,同时考虑之前的时间步长。
下面将示例调整两个权重矩阵时如何使用基于时间的反向传播算法:
: 连接状态和输出的权重矩阵
: 连接一个状态和下一个状态的权重矩阵
下面是时间步长为3的展开模型:
调整所需的梯度计算:
通过简单的一步链式法则,可以得到对于损失函数的偏导数:
一般来说,我们可以追溯多个时间步长,而不是像这个例子那样只有3个时间步长。对于任意时间步长N,调整所需的梯度计算为
调整所需的梯度计算:
我们仍然需要调整连接一个状态和下一个状态的权重矩阵以及连接输入和状态的权重矩阵。我们可以任意从开始。为了理解基于时间的反向传播算法过程,我们可以简化展开模型。我们将重点介绍对输出的贡献,具体如下:
计算损失函数的偏导数时,我们需要考虑有利于输出的所有状态。这个例子中,状态取决于之前的状态,而之前的状态也取决于前面的,即第一个状态。
基于时间的反向传播算法中,我们将考虑每个状态的每个梯度,累加所有这些贡献。
- 在时间步长t = 3时,对来自 的梯度贡献如下:
- 时间步长 t=3 时,对来自的梯度贡献如下:
- 时间步长 t=3 时,来自的梯度贡献如下:
考虑以下三个状态的贡献后:, , , 我们将累加它们来找到最终的梯度计算, 下列方程式是使用基于时间的反向传播算法来调整的梯度:
这个例子中,我们需要考虑三个时间步长,所以我们累加了三个偏导数的计算。一般来说,我们可以追溯多个时间步长。当反向退后一步,我们在链式法则中就需要考虑一个额外的偏导数。从数学角度上来说,这可以用下面的通用方程式表示,使用基于时间的反向传播算法 来调整:
调整所需的梯度计算
计算损失函数的偏导数时,我们需要再次考虑所有对输出有贡献的状态。与我们之前见到的一样,在这个例子中,状态取决于之前的状态,而之前的状态也取决于前面的,即第一个状态。在基于时间的反向传播算法中,我们将考虑每个状态中的每个梯度,累加所有贡献.
- 时间步长 t=3 时,来自 的梯度贡献如下:
- 时间步长 t=3 时,来自 的梯度贡献如下:
- 时间步长 t=3 时,来自 的梯度贡献如下:
考虑以下三个状态的贡献后:, , , 我们将累加它们来找到最终的梯度计算, 下列方程式是使用基于时间的反向传播算法来调整的梯度:
这个例子中,我们需要考虑三个时间步长,所以我们累加了三个偏导数的计算。一般来说,我们可以追溯多个时间步长。当反向退后一步,我们在链式法则中就需要考虑一个额外的偏导数。从数学角度上来说,这可以用下面的通用方程式表示,使用基于时间的反向传播算法 来调整: