深度学习调参策略(二)

超参数(Hyper-Parameter)是困扰神经网络训练的问题之一,因为这些参数不可通过常规方法学习获得。

神经网络经典五大超参数:

学习率(Leraning Rate)、权值初始化(Weight Initialization)、网络层数(Layers)

单层神经元数(Units)、正则惩罚项(Regularizer|Normalization)

这五大超参数使得神经网络更像是一门实践课,而不是理论课。

懂神经网络可能只要一小时,但是调神经网络可能要几天。

https://zhuanlan.zhihu.com/p/24720954#!

英文介绍:]

http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html

知乎上的一些比较好的解答:https://www.zhihu.com/question/41631631?from=profile_question_card

https://zhuanlan.zhihu.com/p/24720954#!

没做过CNN,RNN,调过连续值DNN,以下经验仅限于CTR
1.样本要足够随机,防止大数据淹没小数据
2.样本要做归一化
3.激活函数要视样本输入选择
4.minibatch很重要,几百到几千是比较合适的(很大数据量的情况下),无论是cnn还是rnn,batch normalization都有用,不一定结果提高几个点,收敛快多了
5.learning rate很重要,可以直接用adagrad or adadelta,省去一些麻烦,然后把冲量调到0.9以上
6.权重初始化,可用高斯分布乘上一个很小的数

7.loss不降了lr就除10

调了快1年的rnn, 深刻的感受到,深度学习是一门实验科学,下面是一些炼丹心得,后面会不断补充. 有问题的地方,也请大家指正.

  1. 参数初始化,下面几种方式,随便选一个,结果基本都差不多.

    1. uniform
      W = np.random.uniform(low=-scale, high=scale, size=shape)
    2. glorot_uniform
      scale = np.sqrt(6. / (shape[0] + shape[1]))
      np.random.uniform(low=-scale, high=scale, size=shape)
    3. 高斯初始化:
      w = np.random.randn(n) / sqrt(n),n为参数数目
      激活函数为relu的话,推荐
      w = np.random.randn(n) * sqrt(2.0/n)
    4. svd ,对RNN效果比较好,可以有效提高收敛速度.
  2. 数据预处理方式
    1. zero-center ,这个挺常用的.
      X -= np.mean(X, axis = 0) # zero-center
      X /= np.std(X, axis = 0) # normalize
    2. PCA whitening,这个用的比较少.
  3. 训练技巧
    1. 要做梯度归一化,即算出来的梯度除以minibatch size
    2. clip c(梯度裁剪): 限制最大梯度,其实是value = sqrt(w1^2+w2^2….),如果value超过了阈值,就算一个衰减系系数,让value的值等于阈值: 5,10,15
    3. dropout对小数据防止过拟合有很好的效果,值一般设为0.5,小数据上dropout+sgd效果更好. dropout的位置比较有讲究, 对于RNN,建议放到输入->RNN与RNN->输出的位置.关于RNN如何用dropout,可以参考这篇论文:http://arxiv.org/abs/1409.2329
    4. adam,adadelta等,在小数据上,我这里实验的效果不如sgd,如果使用sgd的话,可以选择从1.0或者0.1的学习率开始,隔一段时间,在验证集上检查一下,如果cost没有下降,就对学习率减半. 我看过很多论文都这么搞,我自己实验的结果也很好. 当然,也可以先用ada系列先跑,最后快收敛的时候,更换成sgd继续训练.同样也会有提升.
    5. 除了gate之类的地方,需要把输出限制成0-1之外,尽量不要用sigmoid,可以用tanh或者relu之类的激活函数.
    6. rnn的dim和embdding size,一般从128上下开始调整. batch size,一般从128左右开始调整.batch size合适最重要,并不是越大越好.
    7. word2vec初始化,在小数据上,不仅可以有效提高收敛速度,也可以可以提高结果.
    8. 尽量对数据做shuffle
    9. LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的结果,来自这篇论文:http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf,
      我这里实验设成1.0,可以提高收敛速度.实际使用中,不同的任务,可能需要尝试不同的值.
  4. Ensemble: 论文刷结果的终极核武器,深度学习中一般有以下几种方式
    1. 同样的参数,不同的初始化方式
    2. 不同的参数,通过cross-validation,选取最好的几组
    3. 同样的参数,模型训练的不同阶段
    4. 不同的模型,进行线性融合. 例如RNN和传统模型.

下面的网站也有一些总结:
http://blog.csdn.net/chenzhi1992/article/details/52905569

原文地址:https://www.cnblogs.com/mfryf/p/11393662.html

时间: 2024-11-10 16:11:18

深度学习调参策略(二)的相关文章

深度学习调参策略(一)

经常会被问到你用深度学习训练模型时怎么样改善你的结果呢?然后每次都懵逼了,一是自己懂的不多,二是实验的不多,三是记性不行忘记了.所以写这篇博客,记录下别人以及自己的一些经验. Ilya Sutskever(Hinton的学生)讲述了有关深度学习的见解及实用建议: 获取数据:确保要有高质量的输入/输出数据集,这个数据集要足够大.具有代表性以及拥有相对清楚的标签.缺乏数据集是很难成功的. 预处理:将数据进行集中是非常重要的,也就是要使数据均值为0,从而使每个维度的每次变动为1.有时,当输入的维度随量

深度学习调参经验汇总

此篇文章是在原创教程这个栏目下,但实际上是一篇汇总整理文章.相信大家在做深度学习时对调参尤为无奈,经验不足乱调一通,或者参数太多无从下手,我也如此.希望通过此文汇总网上一些调参的经验方法,供大家参考.此文会对网上每一篇调参文章做简练的总结与提炼,以此为此文的组成单元,并附上原文的链接.如果遇到不对的地方,欢迎指正~本文也将不定期更新,最后祝大家调参(炼金)顺利! 有多少人工,就有多少智能!(笑哭脸) 人工智障 炼金大法 你已经是成熟的算法了,要学会自己调参 正文开始 UNIT 1 case1:网

Deep Learning(深度学习)之(二)Deep Learning的基本思想

五.Deep Learning的基本思想 假设我们有一个系统S,它有n层(S1,-Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>-..=>Sn => O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失(呵呵,大牛说,这是不可能的.信息论中有个"信息逐层丢失"的说法(信息处理不等式),设处理a信息得到b,再对b处理得到c,那么可以证明:a和c的互信息不会超过a和b的互信息.这表明信息处理不会增加信息,大部分处理

《神经网络和深度学习》系列文章二:感知机

出处: Michael Nielsen的<Neural Network and Deep Leraning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 徐梓翔 (https://github.com/endyul) 声明:我们将在每周一,周四,周日定期连载该书的中文翻译,如需转载请联系[email protected],未经授权不得转载. “本文转载自[哈工大SCIR]微信公众号,转载已征得同意.” 使用神经网络识别手写数字 感知机 sigmoid神经元 神经网络

白话深度学习与Tensorflow(二)

Cap3:Tensorflow框架特性和安装 目前业界比较普遍使用的深度学习的框架有:Tensorflow.Caffe.Theano.Torch等不下十种. TensorFlow 是一个采用数据流图( data flow graphs),用于数值计算的开源软件库. TensorFlow:深度学习最流行的库之一,是谷歌在深刻总结了其前身 DistBelief 的 经验教训上形成的: 它不仅便携.高效.可扩展,还能在不同计算机上运行:小到智能手 机,大到计算机集群: 它是一款轻量级的软件,可以立刻生

深度学习:Keras入门(二)之卷积神经网络(CNN)

说明:这篇文章需要有一些相关的基础知识,否则看起来可能比较吃力. 1.卷积与神经元 1.1 什么是卷积? 简单来说,卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的运算.(具体含义或者数学公式可以查阅相关资料) 如下图就表示卷积的运算过程: (图1) 卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音. 1.2 激活函数 这里以常用的激活函数sigmoid为例: 把上述的计算结果269带入此公式,得出f(x)=1 1.3 神经元 如图是一个人工神经元的模型: (

深度学习基础系列(二)| 常见的Top-1和Top-5有什么区别?

在深度学习过程中,会经常看见各成熟网络模型在ImageNet上的Top-1准确率和Top-5准确率的介绍,如下图所示: 那Top-1 Accuracy和Top-5 Accuracy是指什么呢?区别在哪呢?我们知道ImageNet有大概1000个分类,而模型预测某张图片时,会给出1000个按概率从高到低的类别排名, 所谓的Top-1 Accuracy是指排名第一的类别与实际结果相符的准确率, 而Top-5 Accuracy是指排名前五的类别包含实际结果的准确率. 下面的代码可更为直观地说明其中的区

深度学习数学基础介绍(二)概率与数理统计

第1章 随机事件与概率§1.1 随机事件§1.2 随机事件的概率§1.3 古典概型与几何概型§1.4 条件概率§1.5 事件的独立性 第2章 随机变量的分布与数字特征§2.1 随机变量及其分布§2.2 随机变量的数字特征§2.3 常用的离散型分布§2.4 常用的连续型分布§2.5 随机变量函数的分布 第3章 随机向量§3.1 随机向量的分布§3.2 条件分布与随机变量的独立性§3.3 随机向量的函数的分布与数学期望§3.4 随机向量的数字特征§3.5 大数定律与中心极限定理 第4章 数理统计的基

深度学习网络调参技巧

转自https://zhuanlan.zhihu.com/p/24720954?utm_source=zhihu&utm_medium=social 之前曾经写过一篇文章,讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得.不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重要.同时个人实践中,又有一些新的调参心得,因此这里单独写一篇文章,谈一下自己对深度学习调参的理解,大家如果有其他技巧,也欢迎多多交流. 好的实验环境是成功的一半 由于深度学习实