循环神经网络 (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 训练
- 输入的单个时间步长被提供给网络。
- 然后使用当前输入和先前状态的集合计算其当前状态。
- 当前 ht 在下一个时间步变为 ht-1。
- 可以根据问题走尽可能多的时间步,并加入来自所有先前状态的信息。
- 一旦所有时间步完成,最终的当前状态将用于计算输出。
- 然后将输出与实际输出(即目标输出)进行比较,并生成错误。
- 然后将误差反向传播到网络以更新权重,从而训练网络 (RNN)。
循环神经网络的优势
- RNN 会随着时间的推移记住每一个信息。它在时间序列预测中很有用,因为它也具有记住先前输入的功能。这称为长短期记忆。
- 循环神经网络甚至与卷积层一起使用来扩展有效像素邻域。
循环神经网络的缺点
- 梯度消失和爆炸问题。
- 训练 RNN 是一项非常艰巨的任务。
- 如果使用 tanh 或 relu 作为激活函数,它无法处理很长的序列。