神经网络学习:如何调参

来源:互联网 发布:js div name 编辑:程序博客网 时间:2024/05/22 12:35

如何调参是一个不断深入的过程,本文会不定时的更新。

神经网络中需要调的参数很多,如何正确地调参至关重要,需要调节的参数大概有如下几个:

  1. 神经网络的层数
  2. 每层神经元的个数
  3. 如何初始化Weights和biases
  4. loss函数选择哪一个
  5. 选择何种Regularization?L1,L2
  6. Regularization parameter lambda 选择多大合适
  7. 激励函数如何选择
  8. 是否使用dropout
  9. 训练集多大比较合适
  10. mini-batch选择多大
  11. 学习率多少合适
  12. 选择何种梯度下降算法
  13. 何时停止Epoch训练
前前后后有十几个需要调节的参数,遵循一定的调参顺序在一定程度上可以减少工作量,训练一次神经网络需要挺长的时间,所以调参时要从最简单的网络结果开始。
1.首先使用最简单的网络结构:只包含输入层、输出层两层的神经网络。
训练集、验证集的个数要比较小,这样可以加快训练的速度,其他的参数先随便选择一个固定值。
2.调节学习步长ang
如果ang太大,可能造成越走越高,跳过局部最低点,但ang太小,学习的速度太慢。先不设置Regularization parameter lambda 的前提下,ang可以从0.001, 0.01, 0.1,1, 10开始尝试,如果发现loss开始增大,停止,进行更小的微调。如何发现ang=0.1时效果最好,这是在尝试ang=0.05和0.5两个值。
先随便选择一个ang值,比如10,训练得到最后的准确度,如果准确度不是很好,然后再使用ang=100,假如发现准确率不但每提高甚至下降了,可能就说明ang=10就有点大了,换成ang=1再训练一遍,发现效果有了明显提高,就说明ang=1比10更合适,用同样的方法不断的尝试,就可以得到一个不错的ang值。
3.选择合适的Epoch训练次数
如果随着Epoch的次数增加,准确度在一定时间内(比如5到10次)变化很小,就可以停止Epoch。开始时可以把Epoch次数设置的大一些,观察在哪个地方准确度变化很小,就把Epoch设置成几。
4.调节Regularization parameter lambda
实验lambda,从1.0,10,100…找到一个合适的。注意:lambda的大小是和样本数成正比关系的,比如现在样本数、lambda分别是1000、0.4,以后把样本数扩大到10000时,对应的lambda也要扩大到4。
5.调节mini-batch size
mini-batch选择太小:没有充分利用计算资源;太大:更新权重和偏向比较慢,mini-batch size和其他参数相对独立,一旦找到一个合适的以后,就不需要再改了。
6.如何选择梯度下降算法
对于初学者,选择SGD就可以,
7.如何选择激励函数
如何选择激励函数,没有特别好的方法,只能靠实验比较。常用的激励函数有:
8.如何设置Weights和biases
最简单的方法:让W和b服从N(0, 1 / sqrt(n_in) ),n_in:输入神经元的个数,设置合适的W和b可以加快学习的速率,在极个别的神经网络中,W和b甚至可以影响最后训练的准确度。
9.选择何种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时,就没有必要再减少。
10.是否使用dropout
和L1、L2 regularization不同,dropout并不对cost增加项,而是对神经网络本身的结果做改变。
11.训练集多大比较合适
一句话,训练集越大越好,增加训练集在一定程度上也可以减少过拟合
12.未完待续,稍后补充……








原创粉丝点击