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

Increase or decrease learning rate for adding neurons or weights?

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

如果出现以下情况,我应该增加还是减少我的 RMS(基于 SGD)优化器的学习率:

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

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

此外,我建议您通过裁剪图像生成更多示例,并使用裁剪后的版本训练模型。这作为正则化器可以帮助模型学习更好的数据分布。然后你还可以增加 layers/neurons 的数量,减少过度拟合的风险。

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

  • adding more layers/neurons increases the chance of over-fitting. Therefore it would be better if you decrease the learning rate over time.

  • Since adding more layers/nodes to the model makes it prone to over-fitting [...] taking small steps towards the local minima is recommended

居然是对面!较小的学习率会增加过拟合的风险!

引用自Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates (Smith & Topin 2018)(顺便说一句,读起来很有趣):

There are many forms of regularization, such as large learning rates, small batch sizes, weight decay, and dropout. Practitioners must balance the various forms of regularization for each dataset and architecture in order to obtain good performance. Reducing other forms of regularization and regularizing with very large learning rates makes training significantly more efficient.

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

相关(也很有趣):Don't decay the learning rate, increase the batch size (Smith et al. ICLR'18).

作为简短且实用的答案,如果模型更复杂,这里的学习率会降低,变量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)))

来源:The Annotated Transformer

另见:Adam: A Method for Stochastic Optimization