卷积神经网络图像分类技巧,论文讨论

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Sanyam Bhutani

编译:ronghuaiyang

导读

这篇文章是对Bag of Tricks for Image Classification with Convolutional Neural Networks中分享的思想的概述和我自己的一点思考。

关于这个系列:

这篇文章标志着这一系列文章的开始,这篇文章是对Bag of Tricks for Image Classification with Convolutional Neural Networks中分享的思想的概述和我自己的一点思考。

这篇paper讨论了一些技巧,并独立分析了他们对训练几个最近的CNN模型的综合贡献。

上下文

尽管深度学习网络在图像分类任务上的精度已经超过了人类的水平,但我们仍然注意到,图像分类模型的精度正在不断提高,这些突破不仅仅是因为架构或者仅仅因为神经网络模型不断“变深”。

许多改进都是由于一些小“技巧”,这些技巧通常没有发布出来,或者在论文里面没有特别突出的显示出来。

作者的目标是分享这些技巧以及基于每个“技巧”的大量实验。

这些技巧有两个目的:

  • 提高准确度:对神经网络模型的微调可以提高精确度。

  • 加快训练,例如:利用新的RTX卡上的张量核使用FP16计算。

技巧

作者们讨论了一些技巧,我们来过一遍:

  • 线性缩放学习率:在训练神经网络时,我们在内存允许的情况下分批地将图像输入GPU。这些在SGD中是随机的,并且有一定的方差。当我们增加批的大小时,我们的批对图像的批方差减小,这允许设置更积极的学习率。

    学习率采用公式:0.1 x (Batch_size)/256

  • 学习速度热身:当我们训练一个神经网络时,我们要设置学习率,这决定了模型学习的“速度”,或者我们说是我们对于来自它的预测的惩罚的积极程度。当我们开始训练我们的神经网络,我们可以期望权重有更多的随机性。如果我们设定一个积极的学习率,可能会导致网络两级分化。

    为了解决这个问题,使用了学习率预热,它允许在开始时将学习率设置为较低的值,然后将学习率设置为较高的值。

    步骤如下:初始学习率设置为~0,然后根据公式对“初始批次”进行递增:

    当前epoch*(学习率)/(Num_of_Initial_Epochs)

    初始epoch数量:是一个超参数,我们选择保留这个数,直到模型“预热”为止。

    学习率:我们为NN设置的最终学习率。

    学习率的设置采用公式:0.1 x (Batch_size)/256

  • Zero Y:ResNet由多个残块组成。为了简单起见,可以将它们表示为x+ block(x)

    这些层之后通常是一个batch normalization层,这些层将进一步按比例转换为Y*(x)+bias。(当我们训练网络时,Y和bias是“学习得到的”)

    这篇文章建议对ResNet块末尾的层进行初始化,将Y初始化为0。这减少了初始可学习参数的数量。

  • 不对bias做衰减:

    正则化通常应用于所有可学习的参数,然而,这往往导致过拟合。

    作者建议仅对卷积和全连接的层进行正则化,而不对bias和batch normalization参数进行正则化。

  • 混合精度训练:混合精度训练允许我们使用最新GPU中速度更快的张量核,从而允许我们利用快速FP16运算和FP32训练来计算权重或梯度,从而允许“不安全”的运算能够全精度的完成。

  • 模型调整:

    本文比较了对ResNet体系结构所做的一些调整。

    这些包括调整卷积层内部的步骤,灵感来自于最近的架构。我将跳过这一部分的细节,因为这需要稍微详细的步长和卷积知识。

    一般来说,争论的焦点是对现有体系结构的调整也提高了准确性。

  • cosine学习速率:

    当我们训练我们的模型时,我们可以预期它会随着时间的推移而变得更好(假设一切都运行得很好),随着我们的损失值减少,我们正在接近一个“极小值”。在这一点上,我们想要降低我们的学习速度。

    固定步长学习率以“固定步长”衰减,本文建议使用余弦调度学习率,代替固定步长衰减:

    学习率(Cosine_Decayed) =初始设置学习率* 0.5 * (1 + cos(Current_Batch * (Pi))/ total_num_batch))

  • 标签平滑:

    这意味着调整预测的最终层和概率分布,使网络能够更好地泛化。我跳过了如何实现这一点的细节。

  • 知识蒸馏:

    这种方法将知识从另一个预先训练过的“教师”模型“蒸馏”到我们当前的学生网络中。

    这是通过增加蒸馏损失来实现的,蒸馏损失会惩罚我们的学生网络,其依据是与“教师模型”相比,学生网络的预测偏离了多少。

结论

本文在ImageNet中显示了最大的前景,使用ResNet 50模型得到了最大的改进。

640?wx_fmt=png

最后,对迁移学习在两个任务上的应用进行了比较:

  • Pascal VOC数据集物体检测

  • 语义分割

640?wx_fmt=png

总结&自己的想法

这是第一篇拥抱小技巧的论文之一,这些技巧通常不在聚光灯下,或者在论文中不那么重要。

本文深入研究了所有这些观点,并进行了广泛的比较。

作为一个小练习,我认为这应该是一个很好的实验,在个人目标任务上尝试这些技巧,并记录下改进。

我也很想在以后的文章中读到更多关于这种技巧的内容,或者有专门介绍这种方法的详细部分。

640?wx_fmt=png— END—

英文原文:https://hackernoon.com/bag-of-tricks-for-image-classification-with-convolutional-neural-networks-paper-discussion-693c9e17d1cc

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值