📜  循环神经网络简介

📅  最后修改于: 2021-10-19 04:55:50             🧑  作者: Mango

循环神经网络 (RNN)是一种神经网络,其中上一步输出作为当前步骤的输入。在传统的神经网络中,所有的输入和输出都是相互独立的,但是在需要预测句子的下一个单词的情况下,需要前面的单词,因此需要记住前面的单词。因此 RNN 应运而生,它在隐藏层的帮助下解决了这个问题。 RNN 的主要和最重要的特征是Hidden state ,它记住了关于序列的一些信息。

RNN 有一个“记忆” ,可以记住所有关于计算内容的信息。它对每个输入使用相同的参数,因为它在所有输入或隐藏层上执行相同的任务以产生输出。与其他神经网络不同,这降低了参数的复杂性。

RNN 的工作原理

借助以下示例可以理解 RNN 的工作原理:

例子:

假设有一个更深的网络,具有一个输入层、三个隐藏层和一个输出层。然后像其他神经网络一样,每个隐藏层都有自己的一组权重和偏差,比方说,对于隐藏层 1,权重和偏差是 (w1, b1),第二个隐藏层的权重和偏差是 (w2, b2) 和 (w3, b3) 用于第三个隐藏层。这意味着这些层中的每一层都是相互独立的,即它们不会记住之前的输出。

现在,RNN 将执行以下操作:

  • RNN 通过向所有层提供相同的权重和偏置,将独立激活转换为相关激活,从而降低增加参数的复杂性,并通过将每个输出作为下一个隐藏层的输入来记住每个先前的输出。
  • 因此,这三个层可以连接在一起,使得所有隐藏层的权重和偏差都相同,形成一个循环层。

  • 当前状态的计算公式:

    恩恩
    在哪里:

    ht -> current state
    ht-1 -> previous state
    xt -> input state
    
  • 应用激活函数(tanh) 的公式:

    恩恩
    在哪里:

    whh -> weight at recurrent neuron
    wxh -> weight at input neuron
    
  • 输出计算公式:

    恩恩

    Yt -> output
    Why -> weight at output layer
    

通过 RNN 训练

  1. 输入的单个时间步长被提供给网络。
  2. 然后使用当前输入和先前状态的集合计算其当前状态。
  3. 当前 ht 在下一个时间步变为 ht-1。
  4. 可以根据问题走尽可能多的时间步,并加入来自所有先前状态的信息。
  5. 一旦所有时间步完成,最终的当前状态将用于计算输出。
  6. 然后将输出与实际输出(即目标输出)进行比较,并生成错误。
  7. 然后将误差反向传播到网络以更新权重,从而训练网络 (RNN)。

循环神经网络的优势

  1. RNN 会随着时间的推移记住每一个信息。它在时间序列预测中很有用,因为它也具有记住先前输入的功能。这称为长短期记忆。
  2. 循环神经网络甚至与卷积层一起使用来扩展有效像素邻域。

循环神经网络的缺点

  1. 梯度消失和爆炸问题。
  2. 训练 RNN 是一项非常艰巨的任务。
  3. 如果使用 tanh 或 relu 作为激活函数,它无法处理很长的序列。