【技术综述】深度学习新手如何开始合适的“调参”任务

言有三

毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人

作者 | 言有三

编辑 | 言有三

深度学习工程师被称为“炼丹工程师”,自然是因为在日常工作中需要各种各样的调参工作。虽然因为Google的研究使得AutoML这两年大热,但是对于大部分人来说,还没有机器玩得起AutoML,而且手动调参数也是一门必备的技能。

试问:连调试参数都要交给电脑了,就你那三脚猫的python语言基础和弱不禁风的数学基础,端得起一碗高薪的饭吗!

1

任务选择

要学习调试参数,必须有一个比较好的任务,它一定是要有一定的难度,但是不能太难。它能体现出不同参数的差异,但又不能太敏感

这里我给大家选了一个任务,细粒度图像分类,方法选择双线性网络,参考git链接

https://github.com/gy20073/compact_bilinear_pooling。

所谓细粒度图像分类,就是要将不同子类区分,通常来说,有不同种类的猫,不同种类的花等等,这里我们选择了一个公开数据集,选择的数据集为Caltech-UCSD Birds-200-2011,它包括200类鸟,共11788张图片,每一个类约60个样本,图片的分辨率大小不等,长度都在400分辨率左右。

将数据集均匀分为训练集和测试集,各10597和1192张图

它的任务就是要区分上面的鸟,特点就是有效的信息只存在于很细小的局部区域中。关于分类任务,更多的信息请关注我们上一篇文章,图像分类绝对不是一个简单的任务,请重视。

【技术综述】你真的了解图像分类吗?

话不多说,开始吧。

2

开始调参

深度学习参数真的太多了,这个参数不是说神经元的参数,而是说用于训练网络的参数。

上图只是展示了其中一些比较重要的参数,实际上随便数数20个以上是没有问题的。咱们时间机器有限不可能所有的都调试,今天就来调试其中的几个最重要的,迁移学习,分辨率以及正则项

2.1 迁移学习

如果你想快速训练好一个任务,那么请从迁移学习开始,不要从头开始训练,尤其是新手。

一个好的初始化太重要了,迁移学习就是给你提供了一个绝佳的初始化

咱们这个任务是非常难的,因为类别多,数据少,而且类内方差很大,所以我们开始进行迁移学习的时候,不妨保守一点,只学习全连接层。

注意这个任务的最后几层如上,分别是一个双线性网络层和两个归一化层,一个全连接层,训练参数如下,完整的网络配置请参照git。

test_iter: 300

test_interval: 600

display: 100

max_iter: 60000

lr_policy: "multistep"

base_lr: 0.1

gamma: 0.25

stepvalue: 20000

stepvalue: 30000

stepvalue: 40000

stepvalue: 50000

momentum: 0.9

weight_decay: 0

snapshot: 10000

snapshot_prefix: "snapshot/ft_last_layer"

net: "ft_last_layer.prototxt"

iter_size: 4

经过了60000次迭代后,查看下训练的准确率迭代曲线和损失迭代曲线如下

可以看出,网络发生了过拟合,这也是在预料之中,因为训练集中每一类的图像只有60张左右,而数据增强只做了随机裁剪,而且是在全图经过了缩放之后的裁剪操作。

最后,我们对数据集进行了测试,准确率为74.5%。

我们再放开所有网络层进行学习,具体配置如下

test_iter: 300

test_interval: 100

display: 100

max_iter: 20000

lr_policy: "fixed"

base_lr: 0.001

momentum: 0.9

weight_decay: 0.0005

snapshot: 10000

snapshot_prefix: "snapshot/ft_all"

net: "ft_all.prototxt"

结果如下

可以看到,损失继续降低,同时精度也继续提升,20000次迭代后准确率从74.5%提升到86.8%。当然,模型仍然是过拟合的,这是因为样本数据集是在太小,只有增加数据集,实验更多的数据增强方法才能更好的解决这个问题。

关于数据集和数据增强方法,请查看往期文章。

【数据】深度学习从“数据集”开始

[综述类] 一文道尽深度学习中的数据增强方法(上)

【技术综述】深度学习中的数据增强(下)

那可不可以直接对所有层进行学习呢,没问题,可以收敛的。

但是效果就要差一些了,最终只能到0.79

那不用双线性模型,直接使用分类模型如何?我的实验结果是很差,惨不忍睹,这里就不放出来了,而且非常难调参。

从这一次的调参至少可以得到一个结论,迁移学习是很重要的,妥妥的提升性能。而且其中的技巧非常多,只能多去练手了,看文章是学不到的。

2.2 输入输出分辨率

如果你的模型没毛病,但是效果始终不好,不如提高分辨率,当然这意味着更大的计算量。

通常来说,更大的输入分辨率总是可以取得更好的效果,尤其是对于检测和分割等任务。在我们这个任务中,还可以调整双线性网络的输出特征维度大小,这可以认为是输出维度,也可能是一个比较关键的参数。

所以我们同时对输入分辨率和双线性网络的输出层的维度进行一系列实验,输入尺度分别选用448,336,224这3个,输出维度分别选用8192,4096,2048,1024,保持其他参数不变,迭代60000次,测试结果如下:

可以看出,图像的分辨率对模型性能的影响非常大,从448降低到224之后,准确率下降将近10%。双线性输出特征层的维度,从8192降低到1024后,只有微小的下降,几乎对性能没有影响,当然这并不意味着其他的任务也是如此,事实上对于图像分割和目标检测任务来说,后一层卷积输出的特征图大小是最重要的参数

2.3 正则化因子

当模型在训练集上的表现明显优于测试集的时候,说明发生了过拟合,缓解过拟合最简单的方法是增加数据。当增加数据的方案行不通的时候,可以通过添加L1,L2,dropout等正则化方案,这分别是隐式正则化和显式正则化方法。

在caffe框架中,通过调整Weight_decay来实现,默认使用的是L2正则化方法。Weight_decay是乘在正则化项的因子,这一般可以提高模型的能力,一定程度上缓解模型的过拟合,但是视不同任务而定,我们在前面训练模型的时候没有加正则项。

分别比较weight_decay=0,weight_decay=0.00001, weight_decay=0.001对结果的影响,其中weight_decay=0对应的就是第一个训练的基准模型。

没有取得我们预期的效果,可能是wr的参数试的不够多,可能是其他的参数需要调试。

wr=0.001的时候曲线如上,可以看到模型相比于上面的一些更好的模型,提前收敛了,但是却收敛到了不好的效果,过拟合情况更加严重。

这个时候应该怎么做呢?在数据集不能变的情况下,调节学习率?还是继续调节正则化因子,只有实验结果才能验证了。

除去上面这些参数,还有学习率大小与迭代方法,batch size大小,初始化方法与各种优化方法,数据增强等各种参数,其中有一些参数对结果还是很有影响的,就留着读者自己去调试吧。

更多任务与参数调试,可以参考以前的一篇文章。

如何步入深度学习刷榜第一重境界

最后说一下我的感受,纸上得来终觉浅,绝知此事要躬行,虽然调参数有一定的指导,但是唯有多练手才能熟能生巧。

时间原因,以后我不可能每天产出高质量文章,还请大家耐心等待,另外更多的经历在一对一指导学习“济”划和“稷”划,感兴趣可以了解。

(0)

相关推荐

  • CAPSNET:具有自我注意路由的胶囊网络

    重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家带来经典或者最新论文的解读和分享,旨在帮助各位读者快速了解论文内容.个人能力有限,理解难免出现偏差,建议对文章 ...

  • HALCON 20.11:深度学习笔记(5)

    HALCON 20.11.0.0中,实现了深度学习方法.关于超参数的有关设置内容如下: 不同的DL方法被设计用于不同的任务,它们的构建方式也会有所不同.它们都有一个共同点,即在模型的训练过程中都面临着 ...

  • 北航最新综述 | 深度学习事件抽取

    转载于 :专知 事件抽取是最新研究热点.来自北航的研究人员发布了最新关于基于深度学习的事件抽取综述论文,详细阐述了事件抽取的任务定义.范式和模型,非常值得关注! 基于模式的事件提取是及时理解事件本质内 ...

  • 【AI初识境】给深度学习新手做项目的10个建议

    这是专栏<AI初识境>的第12篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足很多的坑. 今 ...

  • 2020年深度学习技术发展综述

    来源:无人系统技术 作者:王亚珅 摘要:对深度学习领域的研究进行综合评述,并对其进一步发展方向进行分析.首先分析围绕注意力机制的深度学习技术最新研究成果,以及在自然语言处理领域取得突破性进展的巨型预训 ...

  • 整体把握!一篇给新手的深度学习综述

    获取有趣.好玩的前沿干货! 本文转自人工智能与算法学习,仅交流 这篇综述论文列举出了近年来深度学习的重要研究成果,从方法.架构,以及正则化.优化技术方面进行概述.机器之心认为,这篇综述对于刚入门的深度 ...

  • 综述:深度学习中的池化技术

    作者丨仿佛若有光 来源丨CV技术指南 编辑丨极市平台 极市导读 本文对池化技术进行了一个总结,简述了池化的作用与原理并解答了池化在使用时常见的问题,作者还对主要的几种池化操作分类进行了介绍. > ...

  • 【时空序列】TKDE2020-时空图数据挖掘深度学习技术全面综述

    Deep learning for Spatio-Temporal Data Mining: A Survey Senzhang Wang, Nanjing University of Aeronau ...

  • 【技术综述】深度学习在自然语言处理中的应用发展史

    本篇介绍深度学习在自然语言处理(NLP)中的应用,从词向量开始,到最新最强大的BERT等预训练模型,梗概性的介绍了深度学习近20年在NLP中的一些重大的进展. 作者&编辑 | 小Dream哥 ...

  • 【技术综述】深度学习中的数据增强方法都有哪些?

    很多实际的项目,我们都难以有充足的数据来完成任务,要保证完美的完成任务,有两件事情需要做好:(1)寻找更多的数据.(2)充分利用已有的数据进行数据增强,今天就来说说数据增强. 作者 | 言有三 编辑 ...

  • 【技术综述】基于弱监督深度学习的图像分割方法综述

    本文是基于弱监督的深度学习的图像分割方法的综述,阐述了弱监督方法的原理以及相对于全监督方法的优势. 作者 | 孙叔桥 编辑 | 言有三 1 基础概念 生活中,我们和周围的事物都是有"标签&q ...