从普通神经网络推进到循环神经网络时的问题

数据挖掘 机器学习 Python 神经网络 rnn
2021-10-01 07:39:04

我最近了解了普通神经网络如何工作,具有给定数量的输入、隐藏节点以及与输入相同数量的输出。

我一直在查看现在与循环神经网络相关的各种帖子,我理解它背后的概念,但我无法理解 RNN 背后逻辑的某些部分。

以下是我的四个主要问题:

  1. 反向传播在递归神经网络中是如何工作的?
  2. 从输入到隐藏节点的权重对于其他步骤是否相同?从隐藏节点到输出的权重呢?
  3. 偏差在递归神经网络中究竟是如何工作的?
  4. 为什么通常使用 tanh 函数而不是 sigmoid 函数作为激活函数?

我意识到其中一些问题非常基础,但我想这些基础正是我现在所需要的。

即使是相关视频或帖子的链接也将非常有帮助,显示正确结果的谷歌关键字也是如此。这四个问题阻碍了我理解示例 Python 代码,所以我真的需要一些帮助。

1个回答

这个问题通常涉及 RNN 和 DNN 的一些非常重要的品质。我会回答你的每个子问题,虽然顺序不同(我会尽量强调我所做的)

参数共享

首先,RNN 最重要的质量称为参数共享顺序数据通常输入到单独的层中。对于长度为 20 的输入,RNN 网络将有 20 层。每层使用相同的内部参数,因此所有 20 层使用相同的权重W 和偏见 b. 将此与具有 20 个独立权重和偏差的多层感知器进行比较。

参数共享有几个好处:

  • 我们现在的参数要少得多。有 1 个重复的块而不是 20 个单独的层。减少 20 倍!
  • 这有效地增加了训练数据。循环层从单个例句中的每个单词中学习,而 MLP 中的每一层从每个句子中的单个单词中学习。
  • 我们的网络现在更加灵活。我们可以训练最多 20 个单词的句子,然后通过添加更多步骤或使用动态 RNN来概括为 25 个单词的句子

网络架构

您询问 tanh 和 sigmoid 激活。要回答这个问题,我们必须谈谈特定的 RNN 架构。上面讨论的简单 RNN 有一个单一的激活。由于重复应用相同的权重和激活函数,简单的 RNN 往往会产生梯度消失(或爆炸!)的问题。

门控 RNN 块(如 GRU 和 LSTM)使用门控机制将激活传入和传出内存状态,并将内存状态与输入组合以生成每个块的输出。正因为如此,门可以阻止梯度向后传播。Sigmoid是门的常用激活函数,因为它将激活压缩到 (0,1)---0 完全停止激活,而 1 让它通过。不过,任何具有类似挤压配置文件的体面激活函数都可以工作。有趣的是,硬 sigmoid现在很常见。

除了门之外,门控 RNN 块还有一个内部状态,其激活变化很大。因为门控限制了梯度反向传播,所以我们在这个激活上有很大的灵活性。例如,它不需要被挤压,这是经常看到整流激活(relu、elu、islu 等)的地方。Tanh 也是一个非常明智的选择。

关于偏差和权重,RNN 单元中的每个激活通常都有自己的权重和偏差。所以一个 GRU 有 3 个激活(隐藏、更新和重置),每个激活都有自己的权重和偏差。不过,请回想一下,作为一个 RNN,每个时间步都会重复使用其中的每一个。

向后传球

这很好地涵盖了前向传递,但您还提出了一个关于错误如何向后传播的重要问题。有两种方法可以解决这个问题。

老师逼

对于在每个时间步输出预测的 RNN(例如预测后续步骤的结果、翻译或音素识别),教师强制是一种隔离 RNN 的每个步骤的方法。通过消除这些依赖关系,Teacher Forcing 允许 RNN 使用带有链式规则的传统反向传播。

但它是如何工作的?教师强制网络具有单独的训练和测试架构。对于训练,在每个时间步t, 输入xt与前一个目标连接,yt1. 想象一下,对于一个负责预测以下字符的网络来说。网络刚刚尝试预测前一个时间步的字符。但是我们改为使用在那个时间步长观察到的字符(我们知道这一点,因为我们处于训练阶段)。因此时间步长的错误t 仅取决于观察值 t1 和输入 t. 因此,我们已经从网络中删除了任何时间连接。

在测试中,我们不知道每个时间步的真实值,所以我们替换 yt1 与前一层的输出 ot1. 在这种情况下,时间连接已经返回,但仅用于测试阶段。

时间反向传播

但我们不必诉诸教师强迫。通过时间的反向传播允许我们将反向传播算法应用于 RNN。考虑网络n 时间步长和输入 x, 隐藏状态 h, 输出 o, 和观测值 y 对于每个时间步。

BPTT 按以下步骤工作。

  1. 计算梯度 ot 对于每个 ot,yt一对。(这可以一次完成。)
  2. 计算梯度 ht对于每个时间步,从最后一个时间步开始并向后迭代。(必须一次完成一项。)
  3. 这给了我们 n RNN 的每个内部参数的边缘更新参数的技巧是找到每个时间步的梯度贡献(例如Wt 即使我们只有一个 W) 然后对这些梯度求和以更新内部参数。

进一步阅读

我强烈推荐 Goodfellow、Bengio 和 Courville 的深度学习的第 10 章,以获取有关 RNN 的更多信息。此外,Graves 的RNN 书非常适合更高层次的细节