1、参考内容1:

 

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

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

神经网络的层数
每层神经元的个数
如何初始化Weights和biases
loss函数选择哪一个
选择何种Regularization?L1,L2
Regularization parameter lambda 选择多大合适
激励函数如何选择
是否使用dropout
训练集多大比较合适
mini-batch选择多大
学习率多少合适
选择何种梯度下降算法
何时停止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.未完待续,稍后补充……

 

1、参考内容1:

  观察loss胜于观察准确率,Loss设计要合理,对比训练集和验证集的loss;
    Relu可以很好的防止梯度弥散问题,当然最后一层的激活函数千万慎用relu,如果是分类的用softmax;
    Batchnorm可以大大加快训练速度和模型性能;
    Dropout防止过拟合,可直接设置为0.5,即一半一半,测试的时候把dropout关掉;
    选择Adam 优化函数,收敛速度非常快的一个优化函数;
    Loss选择。一般来说分类就是Softmax, 回归就是L2的loss. 但是要注意loss的错误范围(主要是回归), 你预测一个label是10000的值, 模型输出0, 你算算这loss多大;
    准确率虽然是评测指标, 但是训练过程中还是要注意loss的. 你会发现有些情况下, 准确率是突变的, 原来一直是0, 可能保持上千迭代, 然后突然变1。而loss是不会有这么诡异的情况发生的, 毕竟优化目标是loss;
    Learning Rate设置合理。太大: loss爆炸, 或者nan,太小: 半天loss没反映;
    对比训练集和验证集的loss。判断过拟合, 训练是否足够, 是否需要early stop的依据。

上面的分享很不错。网络结构参考已有的设计应该也很重要…