📜  循环神经网络解释

📅  最后修改于: 2022-05-13 01:55:10.661000             🧑  作者: Mango

循环神经网络解释

今天,不同的机器学习技术用于处理不同类型的数据。最难处理和预测的数据类型之一是顺序数据。序列数据不同于其他类型的数据,因为虽然可以假设典型数据集的所有特征都是顺序无关的,但不能假设序列数据集的所有特征。为了处理此类数据,提出了循环神经网络的概念。它在结构上不同于其他人工神经网络。当其他网络在前馈过程或反向传播过程中沿线性方向“移动”时,循环网络遵循递归关系而不是前馈传递,并使用反向传播随着时间的推移进行学习。

循环神经网络由多个固定激活函数单元组成,每个时间步一个。每个单元都有一个内部状态,称为单元的隐藏状态。这种隐藏状态表示网络当前在给定时间步持有的过去知识。这种隐藏状态在每个时间步都会更新,以表示网络对过去的了解发生了变化。使用以下递归关系更新隐藏状态:-

h_{t} = f_{W}(x_{t}, h_{t-1})

h_{t} [Tex]- 新的隐藏状态[/Tex] h_{t-1} [Tex]- 旧的隐藏状态[/Tex] x_{t} [Tex]- 当前输入[/Tex] f_{W} [Tex]- 具有可训练权重的固定函数[/Tex]

注意:通常,为了理解循环神经网络的概念,它通常以展开的形式进行说明,本文将遵循这一规范。

在每个时间步,使用上面给出的递归关系计算新的隐藏状态。这个新生成的隐藏状态实际上是用来生成一个新的隐藏状态等等。

循环神经网络的基本工作流程如下:-

注意h_{0}    是网络的初始隐藏状态。通常,它是一个零向量,但它也可以有其他值。一种方法是将关于数据的假设编码为网络的初始隐藏状态。例如,对于确定知名人士讲话的语气的问题,可以将该人过去的讲话语气编码为初始隐藏状态。另一种技术是使初始隐藏状态成为可训练的参数。尽管这些技术给网络增加了一些细微差别,但将隐藏状态向量初始化为零通常是一种有效的选择。

每个循环单元的工作:

  1. 输入先前隐藏的状态向量和当前输入向量。

    请注意,由于隐藏状态和当前输入被视为向量,因此向量中的每个元素都放置在与其他维度正交的不同维度中。因此,当所涉及的元素为非零且元素处于相同维度时,每个元素与另一个元素相乘时仅给出非零值。

  2. Element-wise 将隐藏状态向量乘以隐藏状态权重,并类似地执行当前输入向量和当前输入权重的元素乘法。这会生成参数化的隐藏状态向量和当前输入向量。

    请注意,不同向量的权重存储在可训练的权重矩阵中。

  3. 执行两个参数化向量的向量加法,然后计算元素级双曲正切以生成新的隐藏状态向量。

在循环网络的训练过程中,网络也在每个时间步生成一个输出。该输出用于使用梯度下降训练网络。

所涉及的反向传播类似于典型的人工神经网络中使用的反向传播,但有一些细微的变化。这些变化被记录为:-

设网络在任意时间步的预测输出为\overline{y_{t}}    实际输出为y_{t}    .然后每个时间步的误差由下式给出:-

E_{t} = -y_{t}log(\overline{y}_{t})

总误差由所有时间步的误差之和给出。

E = \sum _{t} E_{t}

\Rightarrow E = \sum _{t}-y_{t}log(\overline{y}_{t})

同样,值\frac{\partial E}{\partial W}    可以计算为每个时间步的梯度总和。

\frac{\partial E}{\partial W} = \sum _{t}\frac{\partial E_{t}}{\partial W}

使用微积分的链式法则并利用时间步 t 的输出是循环单元当前隐藏状态的函数这一事实,出现以下表达式:-

\frac{\partial E_{t}}{\partial W} = \frac{\partial E_{t}}{\partial \overline{y}_{t}}\frac{\partial \overline{y}_{t}}{\partial h_{t}}\frac{\partial h_{t}}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial h_{t-2}}......\frac{\partial h_{0}}{\partial W}

请注意,上述表达式中使用的权重矩阵 W 对于输入向量和隐藏状态向量是不同的,并且仅以这种方式使用是为了记号方便。

因此出现以下表达式:-

\frac{\partial E}{\partial W} = \sum _{t}\frac{\partial E_{t}}{\partial \overline{y}_{t}}\frac{\partial \overline{y}_{t}}{\partial h_{t}}\frac{\partial h_{t}}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial h_{t-2}}......\frac{\partial h_{0}}{\partial W}

因此,通过时间的反向传播与典型的反向传播的不同之处在于,每个时间步的误差被求和以计算总误差。

尽管基本的循环神经网络相当有效,但它可能会遇到一个严重的问题。对于深度网络,反向传播过程可能会导致以下问题:-

  • 梯度消失:当梯度变得非常小并趋于零时,就会发生这种情况。
  • 梯度爆炸:当梯度由于反向传播而变得太大时会发生这种情况。

梯度爆炸的问题可以通过使用 hack 来解决——通过设置一个阈值来及时传递梯度。但这种解决方案并不被视为问题的解决方案,还可能降低网络的效率。为了解决这些问题,开发了循环神经网络的两个主要变体——长短期记忆网络门控循环单元网络