增加或减少添加神经元或重量的学习率?

Gui*_*ier 4 machine-learning neural-network deep-learning conv-neural-network

我有一个卷积神经网络,我修改了它的架构.我没有时间重新训练并执行交叉验证(对最佳参数进行网格搜索).我想直观地调整学习率.

如果符合以下条件,我是否应该提高降低我的RMS(基于SGD)优化器的学习率:

  1. 我在完全连接的层中添加了更多的神经元?
  2. 在卷积神经网络上,我在完全连接之前删除了一个子采样(平均或最大池)层,并且增加了该特征映射和softmax输出之间的完全连接单元的数量(以便有更多的权重连接到顶部完全连接的神经元)?

Ami*_*mir 11

添加更多层/神经元会增加过度拟合的可能性.因此,如果随着时间的推移降低学习率会更好.删除子采样层也会增加参数的数量,并再次增加过度拟合的机会.强烈建议,至少通过实证结果证明,子采样层可以帮助模型更好地学习.所以避免删除它们.

另外,我建议您通过裁剪图像生成更多示例,并使用这些裁剪版本训练模型.这作为正则化器有助于模型学习更好的数据分布.然后,您还可以增加层/神经元的数量,减少过度拟合的风险.

  • 为什么过度拟合的可能性更高(由于参数更多)意味着你应该随着时间的推移降低学习率?如何降低学习率有助于解决过度拟合问题? (4认同)
  • 据我所知,正如(我认为)@Peter所建议的那样,随着时间的推移降低学习率只会有助于确保良好的收敛速度(在开始时收敛速度更快,在以后的迭代中不会发散).但是,它不会避免过度拟合.我可能错了. (4认同)
  • @Amir这是什么来源?这是声明"参数值的巨大变化可能导致过度拟合",我对此持怀疑态度/不理解. (3认同)

Ant*_*ine 8

我们都同意,学习率可以被视为控制过度拟合的一种方法,就像 dropout 或批量大小一样。但我写这个答案是因为我认为阿米尔的答案和评论中的以下内容具有误导性:

  • 添加更多层/神经元会增加过度拟合的可能性。因此,随着时间的推移降低学习率会更好。

  • 由于向模型添加更多层/节点容易导致过度拟合[...],建议向局部最小值迈出一小步

这实际上是相反的!较小的学习率会增加过拟合的风险!

引用《超级收敛:使用大学习率对神经网络进行快速训练》(Smith & Topin 2018)(顺便说一句,这是一本非常有趣的读物):

正则化有多种形式,例如大学习率、小批量、权重衰减和 dropout。从业者必须平衡每个数据集和架构的各种形式的正则化,以获得良好的性能。减少其他形式的正则化和使用非常大的学习率进行正则化可以使训练显着提高效率。

因此,正如 Guillaume Chevalier 在他的第一篇评论中所说,如果你添加正则化,如果你想保持正则化的总量恒定,那么降低学习率可能是一个好主意。但如果你的目标是增加正则化的总量,或者如果你减少了其他正则化的手段(例如,减少 dropout、增加批量大小),那么学习率应该增加

相关(也非常有趣):不要降低学习率,增加批量大小(Smith et al. ICLR'18)


Gui*_*ier 1

作为一个简短而实用的答案,如果模型更复杂,学习率就会降低,变量model_size大约是每层神经元的数量:

def rate(self, step = None):
    "Implement `lrate` above"
    if step is None:
        step = self._step
    return self.factor * \
        (self.model_size ** (-0.5) *
        min(step ** (-0.5), step * self.warmup ** (-1.5)))
Run Code Online (Sandbox Code Playgroud)

资料来源:带注释的变压器

另请参阅:Adam:随机优化方法