在进行对象检测时,优化器的选择是否相关?

人工智能 物体检测 物体识别 随机梯度下降 亚当 阿达三角洲
2021-11-11 11:18:53

假设我们要检测 4 种狗(金毛猎犬、黑色拉布拉多犬、可卡犬和比特斗牛犬)。训练数据由一组狗的 png 图像及其注释组成。我们想使用 YOLOv3 训练一个模型。

优化器的选择在训练模型方面真的很重要吗?Adam 优化器会比 Adadelta 优化器更好吗?还是它们基本上都一样?

一些优化器会更好,因为它们允许大多数权重达到其“全局”最小值吗?

2个回答

我已经对此进行了小范围的实验,并没有注意到太大的影响。

迄今为止,Adam 似乎在各种图像数据集上给出了最好的结果。我发现在训练过程中“调整”学习率是提高模型性能的有效手段,比优化器的选择影响更大。

Keras 有两个用于此目的的回调。文档位于https://keras.io/callbacks/ModelCheckpoint回调使您能够保存完整模型或仅保存基于监控指标的模型权重通常,您监控验证损失并设置参数save_best_only=True以保存最低验证损失的结果。另一个有用的回调是ReduceLROnPlateau,它允许您根据监控指标调整学习率。同样,通常监控的指标是验证损失。如果在用户设置的 epoch 数(参数耐心)后损失没有减少,则学习率将通过用户设置的因子(参数因子)进行调整。你可以把训练过程想象成沿着山谷旅行。当你接近谷底时,它变得越来越窄。如果您的学习率不适应“狭窄”,那么您将无法到达谷底。

您还可以编写自定义回调来调整学习率。我已经做到了这一点,并创建了一个首先根据监控训练损失调整学习率,直到训练准确度达到 95%。然后它切换到基于对验证损失的监控来调整学习率。它保存模型权重以获得最低的验证损失,并使用这些权重加载模型以进行预测。我发现这种方法可以加快训练速度和提高准确性。

事实是您无法判断您的模型是收敛到全局最小值还是局部最小值。事实证明,除非您特别努力抑制随机化,否则每次运行模型时都会得到不同的结果。损失可以设想为一个表面N空间,在哪里N是可训练参数的数量。上帝知道那个表面是什么样的,你的初始参数权重把你放在那个表面上的什么地方,以及其他随机过程如何导致你穿过那个表面。

例如,我运行一个模型至少 20 次,得到的损失非常接近每个模型。然后我再次运行它,对于完全相同的数据得到了更好的结果。

优化器的选择在训练模型方面真的很重要吗?

是的。

Adam 优化器会比 Adadelta 优化器更好吗?

是的。(但有时,adadelta 会给出更好的结果。取决于数据集和微调机制)

它们基本上都一样吗?

不,这里是解释

一些优化器会更好,因为它们允许大多数权重达到其“全局”最小值吗?

实际上无法检查模型是否达到了全局最小值。

我们可以通过使用训练和验证集的过拟合或欠拟合来评估模型,以及使用测试集对模型进行泛化。