一份不可多得的深度学习技巧指南

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud

 

常言道,师傅领进门,修行靠个人,相信很多人或多或少是在别人的建议或带领下步入深度学习这个大坑,然后师傅说深度学习是个玄学,后面就靠个人修行,瞬间就懵了对不对?可能后面经过自己不断实验积累相关经验,会有一些自己的学习心得。本文可谓是深度学习中的一份秘籍,帮助你少走一些弯路。在本文中,列举了一些常用的机器学习的训练技巧,目的是对这些技巧进行简单的介绍并说明它们的工作原理。另外一些建议是斯坦福的CS231n课程及之前总结的网络结构

本文的目录如下:

  • 数据预处理
  • 初始化
  • 训练
  • 正则化
  • 网络结构
  • 自然语言处理
  • 增强学习
  • 网络压缩

数据预处理

(本部分原作者没有写,以个人的理解及相关补充这部分内容)

What:输入神经网络数据的好坏直接关系着网络训练结果,一般需要对数据进行预处理,常用的数据预处理方式有:

  • 去均值:每个原始数据减去全部数据的均值,即把输入数据各个维度的数据都中心化到0;
  • 归一化:一种方式是使用去均值后的数据除以标准差,另外一种方式是全部数据都除以数据绝对值的最大值;
  • PCA/白化:这是另外一种形式的数据预处理方式,一种方式是降维处理,另外一种是进行方差处理;

Why:通过对数据进行预处理能够使得它们对模型的影响具有同样的尺度或其他的一些目的。

RefCS231n Convolutional Neural Networks for Visual Recognition.

初始化

What:权重若初始化合理能够提升性能并加快训练速度,偏置一般设置为0,对于权重而言,建议统一到一定区间内:

  • 对于线性层[1]:区间为[-v,v],v = 1/sqrt(输入尺寸),sqrt表示开根号;
  • 对于卷积层[2]:区间为[-v,v],v = 1/sqrt(卷积核的宽度x卷积核的高度x输入深度);
  • 批量标准化[3]在某些方面的应用降低了调整权值初始化的需要,一些研究结果页提出了相应的替代公式。

Why:使用默认的初始化,每个神经元会随着输入数量的增多而存在一个方差,通过求根号缩放每个权重能确保神经元有近似的输出分布。

Ref

What:对于长短期记忆网络(LSTM),遗忘偏置一般设置为1,可以加快训练过程。

Why:直觉是训练开始时,想要信息在细胞之间传播,故不希望细胞忘记它的状态。

RefAn Empirical Exploration of Recurrent Network Architectures, Rafal Jozefowicz et al.


What:对于t-分布领域嵌入算法(t-SNE),原作者建议对于大小为5000~10000之间的数据集,将困惑度设置为5和50之间[1],对于更大的数据集,相应的困惑度也会增。

Why:困惑度决定了每个点的高斯分布的方差大小,更小的困惑度将获得更多的集群,大的困惑度与之相反,太大的困惑度没有任何意义;另外需要考虑的是画出的聚类不能保留原有的规模,聚类之间的距离不一定代表原始的空间几何,不同的困惑度能在数据结构上提供互补的信息,每次运行都会产生不同的结果[2]

Ref

训练

What:除了使用真值硬化目标外,同样可以使用软化目标(softmax输出)训练网络。

RefDistilling the Knowledge in a Neural Network / Dark knowledge, G. Hinton et al.

 

What:学习率可能是需要调参中最重要的一个参数,一种策略是选择一些参数均有随机化学习率,并观察几次迭代后的测试误差。


参数


什么情况下增加性能


原因


注意事项


隐藏节点的数量


增加


增加隐藏节点的数量提升了模型的表示能力


隐藏节点的增加会增加模型每次操作的时间和内存代价


学习率


调整优化


一个不合适的学习率会导致模型效率很低


 


卷积核的宽度


增加


增大核宽度提升模型的参数个数


更宽的核导致一个更窄的输出维度


隐性的零填充


增加


在卷积前补零保持大尺寸的表示


增加了大多数操作的时间和内存代价


权值衰减系数


降低


降低权值衰减系数释放模型的参数


 


Dropout的概率


降低


丢失更少的节点使得单元有更多的机会去拟合训练集


 

Ref:Some advice for tuning the hyperparameters. Ref: Goodfellow et al 2016 Book

 

正则化

What:在RNN中使用Dropout,它仅仅应用于非循环连接[1],但是一些最近的文章提出了一些技巧使得Dropout能应用于循环连接[2]

Ref

 

What:批量标准化(Batch Normalization, BN),增添了一个新的层,作者给出一些额外的技巧加速BN层的工作:

  • 增大学习率;
  • 移除/减少dropout:在不增加过拟合发生的条件下加快训练;
  • 移除/减少L2范数权值归一化;
  • 加快学习率衰减速度:使得网络训练更快;
  • 移除局部响应归一化;
  • 将训练样本打乱地更彻底:防止相同的样本总出现在小批量中(验证集上提高了1%);
  • 减少光度失真;

Why一些好的解释在此

RefAccelerating Deep Network Training by Reducing Internal Covariate Shift, S. Ioffe and C. Szegedy.

 

网络结构

What:使用跳跃式连接,直接将中间层连接到输入/输出层。

Why:作者的观点是通过减少神经网络的底端与顶端之间的处理步骤使得训练深层网络更加简单,并减轻梯度消失问题。

When:在一些CNN结构中或RNN中一些重要的层。

RefGenerating Sequences With Recurrent Neural Networks, Alex Grave et al.

RNN的跳跃式连接例子

What:为LSTM增加窥视孔连接(连接之前输出到门的输入),根据作者的观点,这个操作对长时间依赖关系有用。

RefLearning Precise Timing with LSTM Recurrent Networks, Felix A. Gers et al.

 

What:大多数的深度学习框架提供了一个结合SoftMax和Log的函数或者是在损失函数中计算SoftMax(在Tensorflow中是softmax_cross_entropy_with_logits,在Torch中是nn.LogSoftMax),这些应该被更好地使用。

Why:Log(SoftMax)在数值上不稳定是小概率,从而导致溢出等不良结果。另外一种流行的方法是在Log中加入一些小数避免不稳定。

 

自然语言处理(NLP)

What:对于RNN和seq2seq模型的一些技巧:

  • 嵌入尺寸:1024或620。更小的维度比如256也能导致很好的表现,但是更高的维度不一定导致更好的表现;
  • 对于译码器而言:LSTM>GRU>Vanilla-RNN;
  • 2-4层似乎普遍足够,但带有残差的更深网络看起来很难收敛,更多去挖掘更多的技巧;
  • Resd(密集的残差连接)>Res(近连接先前层)>无残差连接;
  • 对于编码器而言:双向>单向(反向输入)>单向;
  • 注意力(加法)>注意力(乘法)>无注意力;
  • 使用光束会导致更好的结果;

RefMassive Exploration of Neural Machine Translation Architectures, Denny Britz, Anna Goldie et al.

 

What:对于seq2seq而言,翻转输入序列的顺序,保持目标序列的完整。

Why:根据作者的观点,这种简单的数据变换极大提升了LSTM的性能。

RefSequence to Sequence Learning with Neural Networks, Ilya Sutskever et al.

 

What:对于seq2seq而言,为编码器和译码器网络使用不同的权值。

RefSequence to Sequence Learning with Neural Networks, Ilya Sutskever et al.


What:当训练时,强制更正译码器的输入;在测试时,使用先前的步骤,这使得训练在开始时非常高效,Samy等人提出了一种基于模型转变的改进方法[1]

Ref:1.Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks, Samy Bengio et al.

 

What:以无监督的方式训练一个网络去预测文本的下一个字符(char-RNN),该网络将学习一种能用来监督任务的表示(比如情感分析)。

RefLearning to Generate Reviews and Discovering Sentiment, Ilya Sutskever et al.

 

增强学习

What:异步:以不同的勘探政策同时训练多个代理,提升了鲁棒性。

RefAsynchronous Methods for Deep Reinforcement Learning, V. Mnih.

 

What:跳帧:每隔4帧计算一次动作,而不是每帧都计算,对于其它帧,重复这个动作。

Why:在Atari游戏中工作得很好,并且使用这个技巧以大约4倍的速度加快了训练过程。

RefPlaying Atari with Deep Reinforcement Learning, V. Mnih. 

 

What:历史:不是仅仅将当前帧作为输入,而是将最后的帧与输入叠加,结合间隔为4的跳帧,这意味着我们有一个含t、t-4、t-8及t-12的帧栈。

Why:这允许网络有一些动量信息。

RefDeep Reinforcement Learning with Double Q-learning, V. Mnih.

 

What:经验回放:为了避免帧间的相关性,作为一个代理不是更新每一帧,最好是在过渡时期的历史中采样一些样本,该思想类似于有监督学习中训练前打乱数据集。

RefPrioritized Experience Replay, Tom Schaul et al.

 

What:Parallel Advantage Actor Critic(PAAC):通过代理的经验以及使用一个单一的同步更新模型使得简化A3C算法成为可能。

RefEfficient Parallel Methods for Deep Reinforcement Learning, Alfredo V. Clemente et al.

 

网络压缩

What:在推理中,为了减少层数,通过批量归一化(BN)层能够吸收其它的权值。这是因为在测试时批量归一化进行地是一个简单的线性缩放。

 

作者信息


 Conchylicultor,谷歌大脑参与者,专注于机器学习和软件开发。

Linkedin:https://www.linkedin.com/in/potetienne/

Mail:etiennefg.pot@gmail.com

文章原标题《Deep Learning Tricks》,作者:Conchylicultor,译者:海棠,审阅:

文章为简译,更为详细的内容,请查看原文

 

 

 

时间: 2024-12-30 14:12:46

一份不可多得的深度学习技巧指南的相关文章

深度学习入门指南

更多深度文章,请关注:https://yq.aliyun.com/cloud 简介 机器学习技术为现代社会的许多领域提供了强大的技术支持:从网络搜索到社交网络的内容过滤,再到电子商务网站的产品推荐.机器学习技术正越来越多的出现在消费级产品上,比如照相机和智能手机. 机器学习系统可用于识别图像中的对象,将语音转换成文本,选择搜索结果的相关项,以及匹配新闻.帖子或用户感兴趣的其他东西. 类似的应用越来越多,它们都使用了一种叫做深度学习的技术. 深度学习(也称为深层结构学习.层次学习或深度机器学习)是

深度学习必备手册(下)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册(上)--博客整理系列(五) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论

深度学习入门:投身深度学习你需要哪些准备?

更多深度文章,请关注:https://yq.aliyun.com/cloud 我想回答一些我经常被问到的问题:我需要什么样的电脑来进行深度学习?为什么fast.ai推荐Nvidia GPU?你为初学者推荐什么深度学习库?你如何把深度学习引入生产?我认为这些问题都属于一个总的主题:你需要什么(硬件.软件.背景和数据)来进行深入学习? 这篇文章是针对那些新进入这个领域的,并且对入门感兴趣的人. 你需要的硬件 我们感谢游戏业 电子游戏行业(收入方面)大于电影和音乐行业的总和. 在过去的20年里,视频游

揭开知识库问答KB-QA的面纱5·深度学习上篇

自 2015 年开始,深度学习用于 KB-QA 的方法取得了很好的效果,并逐渐成为了 KB-QA 的主流方法.也涌现出了一批使用深度学习提升传统的语义解析.信息抽取和向量建模方法的优秀论文.本期,我们先以深度学习提升向量建模方法为例,作为深度学习篇的上篇,为大家进一步揭开知识库问答的面纱. 我们在揭开知识库问答KB-QA的面纱4·向量建模篇介绍了 KB-QA 中介绍了传统方法之一的向量建模(Vector Modeling)方法,该方法具有操作性强,不需要任何手工的特征等优点. 今天,我们将介绍一

怎样找到一份深度学习的工作 | 附学习材料,资源与建议

如果你是一个软件工程师(或者你现在正在学习这一方面),你肯定有机会听说过深度学习(有时候深度学习缩写为"DL").它现在是一个热门.且快速发展的研究领域,解决工业界的一系列问题,从图像识别.手写识别到机器翻译,更甚于AlphaGo4比1击败了世界围棋冠军.  大部分人认为找与深度学习相关的工作应该具有博士学位或者大量的相关经验,但是如果你已经是一名很好的工程师,那你就可以很快.很好的学习这些必要的技能和技巧.至少,这是我们的观点.(即使你是深度学习的初学者,非常欢迎您加入我们的职位申请

深度学习小技巧(一):如何保存和恢复TensorFlow训练的模型

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 深度学习小技巧(二):如何保存和恢复scikit-learn训练的模型 如果深层神经网络模型的复杂度非常高的话,那么训练它可能需要相当长的一段时间,当然这也取决于你拥有的数据量,运行模型的硬件等等.在大多数情况下,你需要通过保存文件来保障你试验的稳定性,防止如果中断(或一个错误),你能够继续从没有错误的地方开始. 更重要的是,对于任何深度学习的框架,像TensorFlow,在成功的训练之后,你需要重新使用模型

忽悠神经网络指南:教你如何把深度学习模型骗得七荤八素

知己知彼,无论你是想成为黑客(最好不要!)或防范未来黑客的入侵,都有必要来了解一下如何骗过由海量数据训练出来的深度学习模型. 只要有程序员还在编程,黑客们就会不遗余力地找寻利用这些程序的方法.恶意黑客更是会利用程序中最为微小的漏洞来侵入系统,窃取数据,对系统造成严重破坏. 但由深度学习算法驱动的系统应该是能够避免人为干扰的,对吧? 一个黑客怎么能够突破被TB(兆兆字节)级数据训练的神经网络呢? 然而事实证明,即使是最先进的深层神经网络也是很容易被欺骗的.只需要使用一些小技巧,你就可以迫使模型预测

中国人工智能学会通讯——迎接深度学习的“大”挑战(下) 1.1 深度学习的训练方法和技巧

摘要:本部分主要介绍了深度学习的训练方法和技巧.深度学习的挑战和应对方法等问题. 最后结合眼下 AI 的研究进展,对深度学习领域深刻的"吐槽"了一番,妙趣横生且发人深省. 1.1 深度学习的训练方法和技巧 前面提到的 BN 方法还不能解决所有的 问题. 因为即便做了白化,激活函数的导 数的最大值也只有 0.25,如果层数成百上 千,0.25 不断连乘以后,将很快衰减为 0. 所以后来又涌现出一些更加直接.更加有 效的方法.其基本思路是在各层之间建立 更畅通的渠道,让信息流绕过非线性的激

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

我加入了一个绿地项目,负责选择在计算机视觉平台上使用的核心机器学习算法. 这些算法要么是不能很好地工作,要么能够很好地工作但不能泛化,需要很多时间或在遇到类似的数据集时,它无法收敛.我迷失了.然后,我从学术界抓住了希望,学术界掀起了深度学习的热风,宣称它能解决所有问题. 对于深度学习,我是持怀疑态度的,所以我阅读了很多相关的论文.书籍.笔记等.令我惊讶的是,这不是炒作,深度学习能工作,而且工作得很好.但是,它毕竟是一个新的概念(虽然它的基础在70年代就已筑起了),出现了很多有关如何充分利用深度学