卷积神经网络中隐藏层的丢失率指导
Dropout rate guidance for hidden layers in a convolution neural network
我目前正在构建一个卷积神经网络来玩 2048 游戏。它有卷积层,然后是 6 个隐藏层。所有在线指南都提到了约 50% 的辍学率。我即将开始训练,但担心 6 层中每一层 50% 的 dropout 有点矫枉过正,会导致拟合不足。
我将不胜感激对此的一些指导。你们推荐什么作为辍学的起点?我也很想了解您为什么推荐您所做的事情。
首先,请记住,dropout 是一种对抗过度拟合 并提高神经网络泛化能力的技术。所以好的起点是关注训练性能,一旦你清楚地看到它就处理过拟合。例如,在某些机器学习领域,例如强化学习,学习的主要问题可能是缺乏及时的奖励,状态 space 太大,泛化没有问题。
下面是过度拟合在实践中的大致情况:
顺便说一句,dropout 并不是唯一的技术,最新的卷积神经网络倾向于更喜欢 batch 和 weight normalization 而不是 dropout。
无论如何,假设过拟合确实是一个问题,并且您想专门应用 dropout。虽然通常建议将 dropout=0.5
作为默认值,但此建议遵循了 Hinton 等人 original Dropout paper 的建议,该建议当时侧重于全连接层或密集层。此外,该建议还隐含地假设研究会进行超参数调整以找到最佳的 dropout 值。
对于卷积层,我认为你是对的:dropout=0.5
似乎太严厉了,研究也同意这一点。参见,例如,"Analysis on the Dropout Effect in Convolutional Neural Networks" paper by Park and Kwak: they find that much lower levels dropout=0.1
and dropout=0.2
work better. In my own research, I do Bayesian optimization for hyper-parameter tuning (see ),它通常选择从网络的第一个卷积层开始逐渐增加丢弃概率。这是有道理的,因为过滤器的数量也增加了,共同适应的机会也增加了。结果,架构通常看起来像这样:
- CONV-1:
filter=3x3
、size=32
、0.0-0.1
之间的丢失
- CONV-2:
filter=3x3
、size=64
、0.1-0.25
之间的丢失
- ...
这对于分类任务确实表现良好,但是,它肯定不是通用架构,您绝对应该针对您的问题交叉验证和优化超参数。您可以通过简单的随机搜索或贝叶斯优化来做到这一点。如果您选择贝叶斯优化,那么有很好的库,例如 this one.
我目前正在构建一个卷积神经网络来玩 2048 游戏。它有卷积层,然后是 6 个隐藏层。所有在线指南都提到了约 50% 的辍学率。我即将开始训练,但担心 6 层中每一层 50% 的 dropout 有点矫枉过正,会导致拟合不足。
我将不胜感激对此的一些指导。你们推荐什么作为辍学的起点?我也很想了解您为什么推荐您所做的事情。
首先,请记住,dropout 是一种对抗过度拟合 并提高神经网络泛化能力的技术。所以好的起点是关注训练性能,一旦你清楚地看到它就处理过拟合。例如,在某些机器学习领域,例如强化学习,学习的主要问题可能是缺乏及时的奖励,状态 space 太大,泛化没有问题。
下面是过度拟合在实践中的大致情况:
顺便说一句,dropout 并不是唯一的技术,最新的卷积神经网络倾向于更喜欢 batch 和 weight normalization 而不是 dropout。
无论如何,假设过拟合确实是一个问题,并且您想专门应用 dropout。虽然通常建议将 dropout=0.5
作为默认值,但此建议遵循了 Hinton 等人 original Dropout paper 的建议,该建议当时侧重于全连接层或密集层。此外,该建议还隐含地假设研究会进行超参数调整以找到最佳的 dropout 值。
对于卷积层,我认为你是对的:dropout=0.5
似乎太严厉了,研究也同意这一点。参见,例如,"Analysis on the Dropout Effect in Convolutional Neural Networks" paper by Park and Kwak: they find that much lower levels dropout=0.1
and dropout=0.2
work better. In my own research, I do Bayesian optimization for hyper-parameter tuning (see
- CONV-1:
filter=3x3
、size=32
、0.0-0.1
之间的丢失
- CONV-2:
filter=3x3
、size=64
、0.1-0.25
之间的丢失
- ...
这对于分类任务确实表现良好,但是,它肯定不是通用架构,您绝对应该针对您的问题交叉验证和优化超参数。您可以通过简单的随机搜索或贝叶斯优化来做到这一点。如果您选择贝叶斯优化,那么有很好的库,例如 this one.