从头开始重新开始学习过程以获得最佳结果?

Restarting learning process from scratch for best results?

我对深度学习比较陌生,刚刚开始修补一些简单的小模型,在这种情况下是一个小的 unet,基本上是从以下位置复制粘贴的:https://github.com/zhixuhao/unet/blob/master/trainUnet.ipynb

我发现在我的大部分运行中,我都达到了一定的损失水平,从那时起它就不想进一步收敛了。然而,每隔一段时间我从头开始学习过程,它突然收敛到比上述高原低 1000 倍左右的损失......最终模型相当出色 - 没有抱怨,但每个人都必须重新开始吗学那么多次?

我知道这可能是由于偶然分配了模型的初始权重。我提高了学习率并减小了批量大小以尝试逃避局部最小值,但似乎没有太大帮助。

一遍又一遍地重启模型是常见的做法吗?

无论模型训练多长时间,在不同的运行中看到少量差异是很正常的,尽管不是您看到的那么大。

损失的减少是否真的反映在测试集准确率上?损失可能是一种有用的衡量标准,但至少根据我的经验,损失和准确性(或您感兴趣的任何指标)通常只是松散相关。我观察到异常高的训练 accuracys/low 训练损失通常会导致泛化能力很差的模型。

损失景观并不总是朝着全局最小值平滑,你的可能有两个不同的山谷。 H Li 等人的这篇论文是关于该主题的非常有趣的读物: Visualizing the Loss Landscape of Neural Nets

总而言之,特征重用和正则化可以极大地帮助创建朝向最小值的平滑梯度。

您可能还想研究学习率策略,尝试让您的模型进入损失情况更平滑的区域。我会推荐 Leslie Smith 的 One-Cycle Policy。一般的想法是提高学习率并降低动量以使您的模型进入全局最小值区域(并在此过程中跳过局部最小值),然后降低学习率以使模型落入最小值。