来自 | 知乎   作者| sticky

链接 | https://zhuanlan.zhihu.com/p/137940586

编辑 | 深度学习这件小事公众号

本文仅作学术交流,如有侵权,请联系后台删除。

这两天发现了一篇宝藏paper,2019年CVPR中的一篇 Bag of Tricks for Image Classification with Convolutional Neural Networks。这篇paper主要从3个方面讲述了提高现有baseline(ResNet-50)的有效trick:

1. 在新的硬件上有效训练

2. 在ResNet-50的基础上,对模型进行了一些微量的调整

3. 训练的一些技巧

Bag of Tricks for Image Classification with Convolutional Neural Networks

论文地址:

http://openaccess.thecvf.com/content_CVPR_2019/papers/He_Bag_of_Tricks_for_Image_Classification_with_Convolutional_Neural_Networks_CVPR_2019_paper.pdf

大概回顾这篇文章

1. 在新的硬件上有效训练

1.1 背景

在ResNet刚提出的时候,为了考虑当时的硬件条件,不得不做很多跟performance相关的trade-offs。但是随着这几年硬件(尤其是GPU)的快速发展,很多与performance相关的trade-offs已经改变。其中包括:

1. 使用更大的batch size。例如从256到1024

2. 使用较低的数值精度。例如从FP32到FP16

1.2 使用更大的batch size

使用更大的batch size会导致减缓训练进度。对于凸问题,收敛速度会随着batch size的增加而降低。也就是说,在相同的epoch下,使用更大的batch size可能会导致验证集accuracy更低。因此使用一些trick来解决这个问题。

Linear scaling learning rate:例如,当我们选择初始学习率为0.1,batch size为256时,那么当我们将batch size增大至b时,就需要将初始学习率增加曾0.1×b/256

Learning rate warmup:例如,选择5个epoch去进行warmup,在这5个epoch中线性地从0开始增加学习率至初始学习率,然后再开始正常decay

Zero  :在residual block中的batch normalization(BN)中:BN首先标准化输入  ,得到  ,然后进行线性变化  ,其中  和  都是可以学习的参数,其值被初始化为1s和0s。而在这里初始化 

No bias decay:为了避免过拟合,对于权重weight和偏差bias,我们通常会使用weight decay。但在这里,仅对weight使用decay,而不对bias使用decay。

1.3 使用更低的数值精度

以前神经网络通常使用32-bit浮点数精度(FP32)来训练。但是现在的新的硬件增强了低精度数据类型的算术逻辑单元。例如Nvidia V100对FP32提供14 TFLOPS,而对FP16提供100 TFLOPS。因此,使用FP16时,总的训练速度加速了2~3倍:

Comparison of the training time and validation accuracy for ResNet-50 between the baseline (BS=256 with FP32) and a more hardware efficient setting (BS=1024 with FP16).

The breakdown effect for each effective training heuristic on ResNet-50.

2. 模型调整

The architecture of ResNet-50. The convolution kernel size, output channel size and stride size (default is 1) are illustrated, similar for pooling layers.

主要对downsampling block和input steam(上图指出部分)做了一些改动:

1. downsampling做改动主要是由于使用stride=2的1×1 conv会忽略3/4的feature-map。因此,为了使输出的shape保持不变,将path A的前两个conv分别改为stride=1的1×1 conv和stride=2的3×3 conv,即ResNet-C;将path B换成stride=2的2×2 AvgPool和stride=1的1×1 conv,即ResNet-D

2. 而input steam做的改动主要是由于使用7×7 conv的计算cost是3×3的5.4倍。因此将7×7 conv换成3个连续的3×3conv,即ResNet-C

Three ResNet tweaks. ResNet-B modifies the downsampling block of Resnet. ResNet-C further modifies the input stem. On top of that, ResNet-D again modifies the downsampling block.

Compare ResNet-50 with three model tweaks onmodel size, FLOPs and ImageNet validation accuracy.

3. 训练技巧

3.1 Cosine Learning Rate Decay

以往学习率衰减的策略一般是"step decay",即每隔一定的epoch,学习率才进行一次指数衰减。而现在,学习率随着epoch的增大不断衰减:

Visualization of learning rate schedules with warm-up. Top: cosine and step schedules for batch size 1024. Bottom: Top-1 validation accuracy curve with regard to the two schedules.

3.2 Label Smoothing

3.3 Knowledge Distillation

3.4 Mixup Training

在mixup中,每次随机采样两个样本  和  ,然后通过加权线性插值生成新的样本进行训练:

其中  为从  分布的得到的随机数。

3.5 Experiment Results

The validation accuracies on ImageNet for stacking training refinements one by one. We repeat each refinement on ResNet-50-D for 4 times with different initialization, and report the mean and standard deviation in the table.

—完—

深度学习 CNN trick 合集相关推荐

  1. Github开源!适合初学者的机器学习和深度学习的资料合集

    最近逛 GitHub,发现了一个非常不错的 AI 资料,兼顾理论和实战,非常不错! 首先放上该资源的 GitHub 地址: https://github.com/ben1234560/AiLearni ...

  2. 深度学习模型大合集:GitHub 趋势榜第一,已斩获 8000+ 星

    点击"小詹学Python",选择"星标"公众号 重磅干货,第一时间送达 本文转载自机器之心,禁二次转载 最近,威斯康辛大学麦迪逊分校统计学助理教授.机器学习和深 ...

  3. 深度学习模型大合集:GitHub趋势榜第一,两天斩获2000星

    机器之心报道 参与:路 最近,威斯康辛大学麦迪逊分校统计学助理教授.机器学习和深度学习研究者 Sabastian Raschka 在 GitHub 上创建了一个项目,包含大量深度学习架构.模型和 ti ...

  4. 机器学习/深度学习资源下载合集(持续更新...)

    这篇文章转载自「译智社」的成员 -- 林夕的文章机器学习/深度学习资源下载集合(持续更新-).如果你对人工智能感兴趣,欢迎关注公众号 -- 译智社. 从入门到进阶,所用到机器学习资料,包括书.视频.源 ...

  5. Deepin深度操作系统小问题合集

    Deepin深度操作系统小问题合集 前言 在19年初的时候时候就尝试安装deepin来玩了,但是那时候的版本好像有点卡. 我在19年上半年的时候折腾了好一会ubuntu,不想再折腾了,自己的小主机cp ...

  6. 利用深度学习(CNN)进行验证码(字母+数字)识别

    利用深度学习(CNN)进行验证码(字母+数字)识别_helen1313的专栏-CSDN博客 本文方法针对的验证码为定长验证码,不包含中文. 本文的思路是:1. 使用keras中预训练好的模型,在pyt ...

  7. Python--简单的深度学习CNN睁闭眼分类

    Python–简单的深度学习CNN睁闭眼分类 数据集:闭眼(CEW)和睁眼(LFW)两个文件夹,闭眼数据共1189张图片,睁眼数据为LFW中George_W_Bush共530张图片.测试集从中随机复制 ...

  8. 深度学习cnn人脸检测_用于对象检测的深度学习方法:解释了R-CNN

    深度学习cnn人脸检测 介绍 (Introduction) CNN's have been extensively used to classify images. But to detect an ...

  9. VerilogA学习 - VCO demo 合集

    VerilogA学习 - VCO demo 合集 Verilog-A与其他Verilog语言的不同 VCO的Verilog-A代码 Debug Tips Verilog-A与其他Verilog语言的不 ...

最新文章

  1. python实现网络监控_使用python进行服务器监控
  2. 综合布线施工中的不规范现象
  3. 上班4年“武功”全废,想跳槽却被HR嘲讽,这位搞AI的硕士小哥心态崩了
  4. Opengl-光照-基本光照-光照贴图(现在告别单调的方块弄个箱子)
  5. ASP.NET开源框架之HIPPO技术内幕(四)--多语言的实现
  6. 2015-03-17 how is task transaction type retrieved
  7. javaweb(三十八)——mysql事务和锁InnoDB(扩展)
  8. Leetcode--152. 乘积最大子序列
  9. 施一公谈自己35岁和53岁的区别
  10. JSP的三个编译指令-page,include详解
  11. 2014-07-24 .NET实现微信公众号的消息回复与自定义菜单
  12. iOS数据持久化 -- Core Data
  13. 什么是WAP PUSH?
  14. 数据模型的作用和数据模型的三个要素:
  15. IDEA修改Git仓库远端地址,处理服务器ip发生变化的情况
  16. 神舟战神ZX9 2022款怎么样
  17. 网易vip邮箱和TOM VIP邮箱的作用有什么不同?
  18. mysql cmd全屏_CSS全屏布局的5种方式
  19. Python安装第三方库出现失败并出现”Cannot find existing Pyqt5 plugin directories”的解决方案
  20. [K8S]error execution phase preflight: couldn‘t validate the identity of the API Server

热门文章

  1. 鼠标按键获取感兴趣区域 2
  2. Pandas 中的这些函数/属性将被 deprecated
  3. 介绍如何用 Python 来绘制高清的交互式地图,建议收藏
  4. 2021《程序员》数字科技企业研发实力榜TOP50
  5. TPAMI 2021 | 深度赋智AutoDL系列竞赛世界冠军方案首次公开
  6. 赠书 | 熵的实际应用,赌场和金融圈最著名的一个数学公式
  7. 作为计算机专业的你,这些点你命中了哪些?
  8. 7年增长16倍,清华AI+ML课程学生数暴增 | AI Index 2018
  9. 一文掌握常用的机器学习模型(文末福利)
  10. 帮AI摆脱“智障”之名,NLP这条路还有多远?