文档章节

【转】18个技巧实战深度学习,资深研究员的血泪教训

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:25
字数 1593
阅读 2
收藏 0
点赞 0
评论 0

(文/Nikolas Markou)我自 2013 年以来就一直在使用深度学习和深度置信网络。

我加入了一个绿地项目,负责选择在计算机视觉平台上使用的核心机器学习算法。

这些算法要么是不能很好地工作,要么能够很好地工作但不能泛化,需要很多时间或在遇到类似的数据集时,它无法收敛。我迷失了。然后,我从学术界抓住了希望,学术界掀起了深度学习的热风,宣称它能解决所有问题。

对于深度学习,我是持怀疑态度的,所以我阅读了很多相关的论文、书籍、笔记等。令我惊讶的是,这不是炒作,深度学习能工作,而且工作得很好。但是,它毕竟是一个新的概念(虽然它的基础在70年代就已筑起了),出现了很多有关如何充分利用深度学习的技巧和 tips(例如 Alex Krizhevsky 就几乎概况了大部分的 tips,而且可以说是他预先发现了批标准化)。

下面是我发现的一些有助于充分利用 DNN 的小技巧:

  • 记得要 shuffle。不要让你的网络通过完全相同的 minibatch,如果框架允许,在每个 epoch 都 shuffle 一次。

  • 扩展数据集。DNN 需要大量的数据,而且模型在小的数据集上很容易过拟合。我强烈建议你要扩展原始的数据集。如果你的是一个视觉任务,可以增加噪点、增白,减少像素,旋转或色移,模糊,等等可以扩展的一切。有一点不好的是,假如你扩展得太大,可能训练的数据大多数是相同的。我创建了一个应用随机变换的层来解决这个问题,这样就不会有相同的样本。若果你用的是语音数据,可以进行移位和失真处理。

  • 在整个数据集上训练之前,先在非常小的子数据集上训练进行过拟合,这样你会知道你的网络可以收敛。这个 tip 来自 Karpathy。

  • 始终使用 dropout 将过拟合的几率最小化。在大小 > 256 (完全连接层或卷积层)之后就应该使用 dropout。关于这一点有一篇很好的论文:Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning [Gal Yarin & Zoubin Ghahramani,2015].

  • 避免 LRN 池化,MAX 池化会更快。

  • 避免 Sigmoid/TanH 的门,它们代价昂贵,容易饱和,而且可能会停止反向传播。实际上,你的网络越深,就越应该避免使用 Sigmoid 和 TanH。可以使用更便宜而且更有效的 ReLU 和 PreLU 的门,正如在 Yoshua Bengio 等人的论文 Deep Sparse Rectifier Neural Networks 中所提到的,这两者能够促进稀疏性,而且它们的反向传播更加鲁棒。

  • 在最大池化之前不要使用 ReLU 或 PreLU ,而是在保存计算之后使用它。

  • 不要使用 ReLU,它们太旧了。虽然他们是非常有用的非线性函数,可以解决很多问题。但是,你可以试试用它微调一个新模型,由于 ReLU 阻碍反向传播,初始化不好,你没法得到任何微调效果。但是你应该用 PreLU 以及一个非常小的乘数,通常是0.1。使用 PreLU 的话收敛更快,而且不会像 ReLU 那样在初始阶段被卡住。ELU 也很好,但成本高。

  • 经常使用批标准化。 参考论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift [Sergey Ioffe & Christian Szegedy,2015]。这会很有效。批标准化允许更快的收敛(非常快)以及更小的数据集。这样你能够节省时间和资源。

  • 虽然大多数人喜欢删除平均值,不过我不喜欢。我喜欢压缩输入数据为[-1,+1]。这可以说是训练和部署方面的技巧,而不是针对提升性能的技巧。

  • 要能适用更小的模型。假如你是像我这样部署深度学习模型,你很快就会体会到把千兆字节规模的模型推给用户或地球另一端的服务器的痛苦。哪怕要牺牲一些准确度,也应该小型化。

  • 假如你使用比较小的模型,可以试试 ensemble。通常 ensemble 5个网络能够提升准确度约3%。

  • 尽可能使用 xavier 初始化。你可以只在大的完全连接层上使用它,然后避免在 CNN 层上使用。有关这点的解释可以阅读这篇文章:An Explanation of Xavier Initialization(by Andy Jones)

  • 如果你的输入数据有空间参数,可以试试端到端的 CNN。可以阅读这篇论文:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size [Forrest N. Iandola et. al. 2016],它介绍了一种新的方法,而且性能非常好,你可以尝试应用上面提到的tips。

  • 修改你的模型,只要可能就使用 1x1 的 CNN 层,它的位置对提高性能很有帮助。

  • 假如没有高端的 GPU,就不要尝试训练任何东西了。

  • 假如你要利用模型或你自己的层来制作模板,记得把所有东西参数化,否则你得重建所有二进制文件。

  • 最后,要明白你在做什么。深度学习就像是机器学习里的中子弹,它不是任何任务、任何时候都有效的。了解你正在使用的结构以及你试图达成的目的,才不至于盲目地复制模型。

了解 DL 背后的数学,推荐阅读 Ian Goodfellow , Yoshua Bengio 和 Aaron Courville 合著的经典教材《深度学习》,这本书真的很好,讲解得很清楚。网上有免费的 pdf 版本,但买一本支持作者的贡献也无妨。

此外,如果想了解深度学习的历史和介绍,可以阅读邓力和俞栋合著的《深度学习:方法及应用》。

如果真的想从头开始实现算法,可以阅读 Timothy Masters 写的 Deep Belief Nets in C++ and CUDA C, Vol. 1: Restricted Boltzmann Machines and Supervised Feedforward Networks。


原文:新智元

本文转载自:http://www.jianshu.com/p/e6aa86ba946b

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
活动 | 敲黑板!深圳站也将迎来百度深度学习公开课

  第二堂百度深度学习公开课即将在深圳开讲啦!这也是百度AI开发者实战营第二季所添加的新环节。据悉,深圳站到公开课将由深度学习专家深入解读PaddlePaddle的特性、模型与应用案例,为AI工...

机器之心
05/03
0
0
DeeCamp 人工智能暑期夏令营启动报名

由教育部、创新工场、北京大学联合主办的 DeeCamp 人工智能训练营正式启动报名。该训练营将挑选出 300 名大学生,进行为期 5 周的理论和实战闭门培训。授课老师团队华丽,既包括图灵奖得主、...

奕欣
05/17
0
0
百度“深度学习公开课”首场爆满 开发者收获最强进阶“宝典”

     4月21日,北京迎来了今年的第一场大雨,但是依然浇灭不了开发者的热情,超过200名资深开发者还是如约而至,来到了百度“深度学习公开课”北京站。   近日,百度AI开发者实战营第二...

中国机器人
04/23
0
0
Python入门到机器学习再到深入学习及应用整个学习系统

就在昨天我们收到了一位刚拿到Google offer的九章学员发来的截图 作为一名同是转专业到cs的程序猿,对此猿我定要表示万分真心的理解和祝贺! 其中滋味,唯吾猿类方懂… 此外这位细心的猿还找...

m68futkmurmtj
04/24
0
0
活动合作 | AI NEXTCon 硅谷AI技术峰会(北京分会)大咖来袭

5月12日硅谷峰会的北京分会来啦。 4月,AI NEXTCon 技术峰会主会场在硅谷举行,邀请了包括Google资深院士Jeff Dean大神,Pinterest首席科学家、斯坦福教授Jure Leskovec,Facebook AI 资深研...

yh0vlde8vg8ep9vge
05/04
0
0
高考完干什么好呢?挑战20万大奖试试?

  hi各位宝宝,昨天的IJCAI 2018大赛答辩会刚刚结束,今天又有新比赛上线辣!!! 不怕赛荒的你们可以考完试继续了!      6月7日,阿里巴巴系统软件事业部研究员张瓅玶(谷朴)与阿里...

天池大数据科研平台
06/07
0
0
微软曾文军:解密图像/视频理解的秘密武器

人工智能离不开感知,而视觉是我们最主要的感知手段。深度学习近年来颠覆了图像 / 视频理解的进程。这要归因于大数据,大计算,和深度学习体系结构和方法的巨大进步和创新。这次演讲将讨论在...

ArchSummit
03/01
0
0
JTalk Live : 一堂课掌握 AI 自学路径图

JTalk Live —— 什么都讲,但只讲有用的。 本期主题🏆:一堂课掌握 AI 自学路径图 🕑时间:2018年5月5日 下午 14:00 - 16:30 费用: 前300人免费领取直播门票🆓 300人后,入群发红包兑...

掘金官方
05/02
0
0
JTalk Live : 如何高效自学人工智能 - 不走弯路

JTalk Live —— 什么都讲,但只讲有用的。 本期主题🏆:如何高效自学人工智能 🕑时间:2018年5月5日 下午 14:00 - 16:30 费用: 前300人免费领取直播邀请函🆓 300人后,入群发红包兑换...

YoungZ
04/26
0
0
记录这两日悲哀的血泪史,以便后来人能绕行

血泪史 --- uuid使用 --- 阿里云磁盘问题 ---

深山猎人
2015/05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

50 行 Python 代码,带你追到最心爱的人

程序员世纪难题 人们一提到程序员第一反应就是:我知道!他们工资很高啊!但大部分都是单身狗,不懂得幽默风趣,只是每天穿格子 polo 衫的宅男一个。甚至程序员自己也这样形容自己:钱多话少...

猫咪编程
6分钟前
0
0
JAVA知识点随心记

1.Switch case具体的支持类型? Q:支持byte、short、char、int基本类型,枚举类型和String类型(JDK7以上支持),四种基本类型的包装类型也支持,但是原因在于触发了自动拆箱,将包装类型拆成了基本...

勤奋的蚂蚁
17分钟前
0
0
NoSQL

一、NoSQL介绍 NoSQL属于非关系型数据,mysql属于关系型数据库。 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当数据量非常大的时候...

人在艹木中
22分钟前
0
0
第17章MySQL主从配置

mysql安装总结 mysql主从准备工作: 准备两台机器,每台机器安装msyql服务,并启动mysql服务 mysql详细安装 1.首先下载二进制免编译的包,下载到/usr/local/src/目录下 2.解压压缩包 3.解压完...

Linux学习笔记
25分钟前
0
0
Redis高可用及分片集群

一、主从复制 使用异步复制 一个服务器可以有多个从服务器 从服务器也可以有自己的从服务器 复制功能不会阻塞主服务器 可以通过服务功能来上主服务器免于持久化操作,由从服务器去执行持久化...

Java大蜗牛
29分钟前
0
0
前端面试题汇总

最近在复习,准备找工作了,特此总结一下前端的相关知识。 1.获取浏览器URL中查询字符的参数: function getQuery(name){    var reg = new RegExp("(^|&)"+name+"=([^&]*)"(&|$));...

凛冬来袭
今天
0
0
可持续发展的学习道路

与其要求别人,不如提升自己 内心渴望进步 经常做出改变现有模式,不断学习 寻找资源,整合资源,不断熟练这种模式 渠道很重要 先打开新世界的航路

狮子狗
今天
0
0
apollox-lua开源项目 示例codepen2

今天在示例上增加了几个功能, 首先添加js array的标准库。 所有js array的方法目前都支持了。 添加查看code模式。 点击查看code可以看到生成的lua代码。默认web模式需要把标准库连接进来, ...

钟元OSS
今天
0
0
javascript性能优化之避免重复工作

javascript最重要也最根本的性能优化标准之一是避免工作,避免工作又包括两点,第一,不做不必要的工作,第二,不做重复的已经完成的工作。第一部分可以通过代码重构完成,第二部分不做重复的...

老韭菜
今天
0
0
缓存穿透、并发和雪崩那些事

0 题记 缓存穿透、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题,本文讲解其产生原因和解决方案。 缓存穿透通常是由恶意攻击或者无意造成的;缓存并发是由设计不足造成的;缓存雪...

Java填坑之路
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部