训练神经网络一般调参步骤

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34611224/article/details/84072205

在训练神经网络的时候,需要调的参数很多,选一组最适合自己模型的参数。实际训练的时候如果不按照一定的顺序,会很乱。因此正确有序地调参很重要,需要调节的参数大概有如下几个[1]:

  • 神经网络的层数
  • 每层神经元的个数
  • 如何初始化Weights和biases
  • loss函数选择哪一个
  • 选择何种Regularization?L1,L2
  • Regularization parameter lambda 选择多大合适
  • 激励函数如何选择
  • 是否使用dropout
  • 训练集多大比较合适
  • mini-batch选择多大
  • 学习率多少合适
  • 选择何种梯度下降算法
  • 何时停止Epoch训练
  • 自己模型的超参数

给出自己的建议:

  1. 建议优先在对数尺度上进行超参数搜索:
    比较典型的是学习率和正则化项,我们可以从诸如0.001 0.01 0.1 1 10,以10为阶数进行尝试。因为他们对训练的影响是相乘的效果。不过有些参数,还是建议在原始尺度上进行搜索,例如dropout值: 0.3 0.5 0.7)。
  2. 选择合适的Epoch训练次数
    如果随着Epoch的次数增加,准确度在一定时间内(比如5到10次)变化很小,就可以停止Epoch。开始时可以把Epoch次数设置的大一些,观察在哪个地方准确度变化很小,就把Epoch设置成几。也可以用早停法,防止过拟合。
  3. 调节Regularization parameter lambda
    实验lambda,从1.0,10,100…找到一个合适的。注意:lambda的大小是和样本数成正比关系的,比如现在样本数、lambda分别是1000、0.4,以后把样本数扩大到10000时,对应的lambda也要扩大到4。
  4. 调节mini-batch size
    mini-batch选择太小:没有充分利用计算资源;太大:更新权重和偏向比较慢,mini-batch size和其他参数相对独立,一旦找到一个合适的以后,就不需要再改了。一般就是16,32,64,128,256找一个就行。详细见深度机器学习中的batch的大小对学习效果有何影响?
  5. 如何选择梯度下降算法
    adam或者SGD,当然还有其他自适应的梯度下降算法都可以试试。
  6. 如何选择激励函数
    如何选择激励函数,没有特别好的方法,只能靠实验比较。常用的激励函数有:sigmoid,tanh,relu。
  7. 如何设置Weights和biases
    最简单的方法:让W和b服从N(0, 1 / sqrt(n_in) ),n_in:输入神经元的个数,设置合适的W和b可以加快学习的速率,在极个别的神经网络中,W和b甚至可以影响最后训练的准确度。
  8. 选择何种Regularization
    L1和L2是对cost函数后面增加一项。L1和L2都是为了减少连接对cost影响的权重,但是L1和L2又存在一定的区别。L1减少的是一个常量,L2减少权重的一个固定比例,如果权重本身很大,L1减少的比L2少很多,反之,如果权重本省很小,L1减少的更多。L1倾向于集中在少部分重要的连接上。
    注意:对于L1,当W=0时,cost关于W的偏导没有意义,因为在W=0时不可导,此时就使用un-regulazied表达式,sgn(0)=0,本来regularization的目的就是减少权重,到权重=0时,就没有必要再减少。
    编程的时候发现这个在pytorch里是用weight decay来实现的,选择L2范式的系数就行了,但是一般用了dropout再用L2范式性能会下降,这点我没弄清楚,可能我这里说的不对,以后补充。
  9. 是否使用dropout
    pytorch里的dropout方法就是对Tensor进行随机mask,这样做可以避免过拟合,一般就是0.2,0.3,0.5,用了效果都挺好的,而且不一定拘泥于神经元,你也可以试试对训练过程中各种Tensor是用dropout。
  10. 训练集多大比较合适
    训练集越大越好,增加训练集在一定程度上也可以减少过拟合,数据集对模型很重要,有文章说,参数是对应于数据集的,多大的数据集需要数量差不多的参数就够了。
  11. Loss函数选择
    一般用交叉熵就能解决,但是具体问题具体对待,每个人都可以定义自己的损失函数。
  12. 神经元的个数
    这个在实验中其实起到挺大作用的,句子匹配中,一般第一个隐层要和输入层差不多,最后用于分类的MLP神经元2倍左右,经验值。具体任务具体对待。
  13. 自己模型的超参数
    这个最小二乘法呗。

以后有新的感悟再更新,参考文献写的并不是很好,自己先按照这个顺序写了一下,调参感觉是个玄学,就像神经网络并不是很好解释。

References:

[1] https://blog.csdn.net/qoopqpqp/article/details/75271203
[2] https://zhuanlan.zhihu.com/p/24720954

展开阅读全文

没有更多推荐了,返回首页