学习如何解释深度卷积神经网络的学习曲线的参考

机器算法验证 机器学习 神经网络 深度学习 卷积神经网络
2022-04-07 11:44:11

问题

有哪些好的参考文章/博客/教程来学习如何解释深度卷积神经网络的学习曲线?

背景 我正在尝试使用 caffe 将卷积神经网络 (CNN) 用于血管分割(特别是确定图像块的中心像素是否在血管上)。

我有大约 225000 张训练图像(约 50% 阳性)和 225000 张(约 50% 阳性)测试/验证图像。

我的输入图像大小为 65 x 65。我有四个卷积层(48x6x6、48x5x5、48x4x4、48x2x2),每个卷积层后面跟着 2x2 最大池化层、一个由 50 个神经元组成的全连接层和一个包含 2 个神经元的最终评分层。我的训练批次大小是 256,我的测试批次大小是 100。

我正在使用随机梯度下降优化器 (SGD) 和逆衰减学习率策略。以下是我的caffe 求解器参数:

  • 类型:“SGD”
  • base_lr:0.01
  • lr_policy:“inv”
  • 伽玛:0.1
  • 功率:0.75
  • 动量:0.9
  • 重量衰减:0.0005

以下是我得到的学习曲线:

在此处输入图像描述

我正在使用交叉熵分类损失或多项逻辑损失(请参见此处)。

我想听听人们如何解释这个学习曲线,以及他们会改变哪些参数来尝试提高测试准确性。

  • 训练损失正在减少,但减少非常缓慢。这是否意味着我的学习率很低?

  • 相反,我看到测试损失首先迅速减少,然后减慢。这是否意味着我的学习率很高并且陷入了局部最小值?

  • 并且测试精度已经稳定并且过早停止增加。这是否意味着我必须尝试增加我的模型容量或减少我的正则化?

一般来说,如果有人可以指出一篇参考文章/书籍/博客文章,对我和其他人有帮助,该文章/书籍/博客文章通过许多示例案例深入研究了这种学习曲线的解释。

我发现这篇博客文章非常有帮助,但没有太多关于学习曲线的解释(至少我不满意)。

3个回答

2件事:

  1. 您可能应该将您的 50/50 训练/验证重新分区转换为 80% 训练和 20% 验证之类的东西。在大多数情况下,它将提高分类器的整体性能(更多的训练数据 = 更好的性能)
  2. 如果您从未听说过“提前停止”,您应该查一下,这是神经网络领域的一个重要概念:https ://en.wikipedia.org/wiki/Early_stopping 。总而言之,early-stopping 背后的想法是在验证损失开始稳定后停止训练。事实上,当这种情况发生时,它几乎总是意味着你开始过度拟合你的分类器。训练损失值本身并不是你应该信任的,因为即使你过度拟合分类器,它也会继续下降。

我希望我足够清楚,祝你工作顺利:)

我知道这是一个古老的问题,但我想如果其他人碰到它寻找类似的东西......

我会说几乎没有下降的损失值表明使用较低的学习率?但我想你在问题中包含的链接中已经提到了这一点,所以你可能考虑过。

我还会尝试更改您在模型中使用的过滤器。从我在网上看到的大多数东西中,他们通常对所有层使用 3x3 过滤器,使用不同过滤器大小的过滤器也倾向于从 3x3 到 4x4 等。我直观地猜想这可以让您在初始时提取更精细的细节层并建立在它们之上?

就资源而言,这似乎也很有趣,尽管也相对有限: https ://machinelearningmastery.com/diagnose-overfitting-underfitting-lstm-models/

我还希望遇到这个问题的人可以检查我遇到的问题,这在本质上是相似的。我尝试更改了许多参数,但训练和验证损失之间存在很大差距,在几个时期后突然关闭。

如果两者之间存在很大差异并且急剧接近,我如何解释我的验证和训练损失曲线

如果有人可以整理一份参考资料,提出如何从损失图中诊断和解决模型/参数中的常见问题的实用建议,我也会发现它非常有用。甚至对于这些情节

http://lossfunctions.tumblr.com/

以下是一些建议:

  1. 训练错误和测试错误太接近(你的系统无法过度拟合你的训练数据),这意味着你的模型太简单了。解决方案:每层更多层或更多神经元。

  2. 降低 gamma,例如 0.01。如果曲线仍然很早就达到平稳状态,您可以尝试更大的学习率,例如 0.1。

  3. 尝试 Adam 而不是 SGD。Adam 的收敛速度通常比 SGD 快。