为什么 dropout 会增加神经网络中每个 epoch 的训练时间?

机器算法验证 神经网络 喀拉斯 退出
2022-04-04 10:06:36

我正在使用 Keras/Tensorflow 训练一个具有一个隐藏层和批量梯度下降的 MLP 神经网络。将 dropout 应用于输入层将每个 epoch 的训练时间增加了约 25%,与 dropout 率无关。

很明显,dropout 增加了达到验证损失最小值所需的 epoch 数量,但我认为每个 epoch 的训练时间会通过丢弃单位而减少。

有谁知道原因?

1个回答

但我认为每个 epoch 的训练时间会因丢弃单元而减少。

事实并非如此。不过我理解你的理由。您认为将组件清零会减少计算量。这将是稀疏矩阵的情况,但不是密集矩阵。

TensorFlow 和任何与此相关的深度学习框架都在密集向量上使用向量化操作*。这意味着零的数量没有区别,因为您将使用所有条目来计算矩阵运算。

实际上,情况正好相反,因为 dropout 需要

  • 用于 dropout 掩码的附加矩阵
  • 为这些矩阵的每个条目绘制随机数
  • 将掩码和相应的权重相乘

* 它们还支持稀疏矩阵,但它们对大多数权重没有意义,因为它们主要在您有不到一半的条目等于零时很有用。