我目前正在构建一个卷积神经网络来玩游戏2048.它有卷积层,然后有6个隐藏层。所有在线指南都提到辍学率约为50%。我即将开始训练,但我担心6层中每层的50%辍学有点矫枉过正,会导致不合适。
我非常感谢对此的一些指导。你们有什么建议作为辍学的起点?我也很想知道你为什么推荐你做的事。
答案 0 :(得分:6)
首先,请记住,辍学是一种对抗过度拟合并改善神经网络泛化的技巧。因此,良好的起点是专注于训练表现,并在您清楚地看到它后处理过度拟合。例如,在一些机器学习领域,例如强化学习,学习的主要问题可能是缺乏及时的奖励,而且状态空间是如此之大,以至于概括没有问题。
这里有一个非常接近的图片,说明在实践中过度拟合的样子:
顺便说一句,辍学并不是唯一的技术,最新的卷积神经网络往往倾向于批量和权重归一化到辍学。
无论如何,假设过度拟合确实是一个问题,你想要专门应用辍学。虽然建议dropout=0.5
作为默认值是很常见的,但这个建议遵循Hinton的original Dropout paper的建议,当时的建议主要集中在完全连接或密集的层上。此外,建议隐含地假设研究进行超参数调整以找到最佳的丢失值。
对于卷积层,我认为你是对的:dropout=0.5
似乎太严重了,研究同意它。例如,参见Park和Kwak撰写的"Analysis on the Dropout Effect in Convolutional Neural Networks"论文:他们发现更低级别的dropout=0.1
和dropout=0.2
效果更好。在我自己的研究中,我进行贝叶斯优化以进行超参数调整(参见this question),并且它经常选择从网络中的第一个卷积层逐渐增加丢弃概率。这是有道理的,因为过滤器的数量也增加了,共同适应的机会也增加了。因此,架构通常如下所示:
filter=3x3
,size=32
,0.0-0.1
之间的退出filter=3x3
,size=64
,0.1-0.25
之间的辍学这对于分类任务确实表现良好,但是,它肯定不是通用架构,您肯定应该为您的问题交叉验证和优化超参数。您可以通过简单的随机搜索或贝叶斯优化来实现。如果您选择贝叶斯优化,那么可以使用优秀的库,例如this one。