RNN

循环神经网络与前馈神经网络的异同点

循环神经网络的原则与前馈神经网络相同,但是也有以下两个主要区别,循环神经网络使用:1. 序列作为训练阶段的输入。2. 记忆要素
存储是隐藏层神经与的输出,在接下来训练步骤中将作为网络的额外输入。
在前馈神经网络中任何时间t的输出,是当前输入和权重的函数。这可以用以下方程式很容易表示:
yt=F(xt,W)y_t = F(x_t, W)
在循环神经网络中,我们在时间t的输出不仅取决于当前的输入和权重,还取决于之前的输入。在这个例子中,时间t的输出定义为:
yt=F(xt,x(t1),x(t2),...,x(tt0),W)y_t = F(x_t, x_(t-1), x_(t-2), ..., x_(t-t_0), W)
以下是循环神经网络的折叠模型:
在这里插入图片描述
在这幅图中,a\overline{a}表示输入向量,y\overline{y}表示输出向量,s\overline{s}表示状态向量。
WxW_x: 连接输入层到状态层的权重矩阵
WyW_y: 连接状态层到输出层的权重矩阵
WsW_s: 表示连接之前时间步长状态到当前时间步长状态的权重矩阵

RNN的展开模型

下图是循环神经网络的基于时间的展开,展开模型通常是我们处理循环神经网络时使用的方法。
在这里插入图片描述
x\overline{x}表示输入向量,y\overline{y}表示输出向量,s\overline{s}表示状态向量。
WxW_x:连接输入到状态层的权重矩阵
WyW_y:连接状态层到输出层的权重矩阵
WsW_s:连接之前时间步长状态到当前时间步长状态的权重矩阵
在前馈神经网络中,隐藏层只取决于当前的输入和权重、以及激活函数Φ\Phi,具体如下:
h=Φ(xW)\overline{h}=\Phi(\overline{x}W)
在循环神经网络中,状态层依赖于当前的输入及其对应的权重值,激活函数,也 取决于之前的状态:
st=Φ(xtWx+st1Ws)\overline{s}_t=\Phi(\overline{x}_tW_x + \overline{s}_{t-1}W_s)
输出向量的计算与前馈神经网络中完全一致。它是对应权重矩阵WyW_y的输入到每个输出节点的线性组合,也可以是相同线性组合的softmax函数。
yt=stWy\overline{y}_t=\overline{s}_tW_y

yt=σ(stWy)\overline{y}_t=\sigma(\overline{s}_tW_y)

基于时间的反向传播算法

对于误差的计算,我们会使用损失函数,其中
EtE_t表示时间t的输出误差
dtd_t表示时间t的理想输出
yty_t表示在时间t的计算输出
Et=(dtyt)2E_t=(\overline{d}_t - \overline{y}_t)^2
在基于时间的反向传播算法中,我们在时间步长t训练网络,也会考虑之前的所有步长。
我们用以下例子来讲解反向传播算法理论:
在这个例子中,我们将关注时间步长 t=3 时基于时间的反向传播算法过程,所以需要调整权重的矩阵有Wx,Ws,WyW_x, W_s, W_y, 我们需要考虑时间步长3,时间步长2和时间步长1。
我们关注时间步长t=3时,损失函数为E3=(d3y3)2E_3=(\overline{d}_3 - \overline{y}_3)^2
在这里插入图片描述
为了更新每个权重矩阵,我们需要找到时间为 3 损失函数的偏导数,作为所有权重矩阵的函数。我们将使用梯度下降,修改每个矩阵,同时考虑之前的时间步长。
在这里插入图片描述
下面将示例调整两个权重矩阵时如何使用基于时间的反向传播算法:
WyW_y: 连接状态和输出的权重矩阵
WsW_s: 连接一个状态和下一个状态的权重矩阵
下面是时间步长为3的展开模型:
在这里插入图片描述

调整WyW_y所需的梯度计算:

通过简单的一步链式法则,可以得到对于WyW_y损失函数的偏导数:
在这里插入图片描述
一般来说,我们可以追溯多个时间步长,而不是像这个例子那样只有3个时间步长。对于任意时间步长N,调整wyw_y所需的梯度计算为
在这里插入图片描述

调整WsW_s所需的梯度计算:

我们仍然需要调整连接一个状态和下一个状态的权重矩阵WsW_s以及连接输入和状态的权重矩阵WxW_x。我们可以任意从WsW_s开始。为了理解基于时间的反向传播算法过程,我们可以简化展开模型。我们将重点介绍WsW_s对输出的贡献,具体如下:
在这里插入图片描述
计算WsW_s损失函数的偏导数时,我们需要考虑有利于输出的所有状态。这个例子中,状态s3\overline{s}_3取决于之前的状态s2\overline{s}_2,而之前的状态也取决于前面的s1\overline{s}_1,即第一个状态。
基于时间的反向传播算法中,我们将考虑每个状态的每个梯度,累加所有这些贡献。

  1. 在时间步长t = 3时,对来自s3\overline{s}_3 的梯度贡献如下:
    在这里插入图片描述
  2. 时间步长 t=3 时,对来自s2\overline{s}_2的梯度贡献如下:
    在这里插入图片描述
  3. 时间步长 t=3 时,来自s1\overline{s}_1的梯度贡献如下:
    在这里插入图片描述
    考虑以下三个状态的贡献后:s3\overline{s}_3, s2\overline{s}_2, s1\overline{s}_1, 我们将累加它们来找到最终的梯度计算, 下列方程式是使用基于时间的反向传播算法来调整WsW_s的梯度:
    在这里插入图片描述
    这个例子中,我们需要考虑三个时间步长,所以我们累加了三个偏导数的计算。一般来说,我们可以追溯多个时间步长。当反向退后一步,我们在链式法则中就需要考虑一个额外的偏导数。从数学角度上来说,这可以用下面的通用方程式表示,使用基于时间的反向传播算法 来调整WsW_s
    在这里插入图片描述
调整WxW_x所需的梯度计算

在这里插入图片描述
计算WxW_x损失函数的偏导数时,我们需要再次考虑所有对输出有贡献的状态。与我们之前见到的一样,在这个例子中,状态s3\overline{s}_3取决于之前的状态s2\overline{s}_2,而之前的状态也取决于前面的s1\overline{s}_1,即第一个状态。在基于时间的反向传播算法中,我们将考虑每个状态中的每个梯度,累加所有贡献.

  1. 时间步长 t=3 时,来自s3\overline{s}_3 的梯度贡献如下:
    在这里插入图片描述
  2. 时间步长 t=3 时,来自s2\overline{s}_2 的梯度贡献如下:
    在这里插入图片描述
  3. 时间步长 t=3 时,来自s1\overline{s}_1 的梯度贡献如下:
    在这里插入图片描述
    考虑以下三个状态的贡献后:s3\overline{s}_3, s2\overline{s}_2, s1\overline{s}_1, 我们将累加它们来找到最终的梯度计算, 下列方程式是使用基于时间的反向传播算法来调整WxW_x的梯度:
    在这里插入图片描述
    这个例子中,我们需要考虑三个时间步长,所以我们累加了三个偏导数的计算。一般来说,我们可以追溯多个时间步长。当反向退后一步,我们在链式法则中就需要考虑一个额外的偏导数。从数学角度上来说,这可以用下面的通用方程式表示,使用基于时间的反向传播算法 来调整WxW_x
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章