如何训练具有不同类型层的神经网络

数据挖掘 机器学习 深度学习 梯度下降
2022-03-01 06:58:49

如果我们有 MLP,那么我们可以很容易地计算每个参数的梯度,通过从网络的最后一层开始递归地计算梯度,但是假设我有由不同类型的层组成的神经网络,例如 Input->convolution layer- >ReLu->max pooling->全连接层->siftmax层,如何计算每个参数的梯度?

1个回答

您描述的不同层都可以使用与更简单的 MLP 相同的反向传播方程计算梯度。它仍然是相同的递归过程,但它是由每一层的参数依次改变的。

有一些细节值得注意:

  • 如果您想了解要使用的正确公式,则需要使用链式法则研究反向传播方程(请注意,我选择了一个已通过的示例,有很多可供选择 - 包括我自己为现在已解散的软件项目)。

  • 当前馈值重叠(例如卷积)或被选择(例如 dropout、max pooling)时,这些组合通常在逻辑上简单且易于理解:

    • 对于重叠和组合的权重,例如卷积,则只需添加梯度。当您从更高层中的每个特征“像素”反向传播梯度时,它们会添加到内核中共享权重的梯度中,并且还会添加到下层中特征图“像素”的梯度中(在每种情况在开始计算之前,您都可以创建一个全零矩阵来将最终梯度相加)。

    • 对于选择机制,例如最大池化层,您只需将梯度反向传播到前一层中选定的输出神经元。其他的不影响输出,因此根据定义,增加或减少它们的值没有影响 - 对于正在计算的示例,它们的梯度为 0。

  • 在前馈网络的情况下,每一层的处理都独立于下一层,所以如果你有一个复杂的层,你只有一个复杂的规则要遵循。您可以写下反向传播方程,以便它们将一层中的梯度与上一层中已经计算的梯度相关联(最终与输出层中评估的损失函数相关联)。从它反向传播梯度后,输出层中的激活函数是什么并不直接重要 - 那时唯一的区别是数字,将更深层梯度相互关联的方程根本不依赖于输出。

  • 最后,如果你只想使用神经网络库,你不需要太担心这个,它通常是为你完成的。现有代码涵盖了所有标准激活函数和层架构。只有从头开始创建自己的实现,或者使用不寻常的函数或结构时,您才可能需要直接派生值。