神经网络是一种在很多用例中能够提供最优准确率的机器学习算法。其中参数的理解可能是我们入门的一个小小的难题,在讨论提升神经网络性能的方法,如检查过拟合、调参、超参数调节、数据增强之前,我们先简单介绍常用的神经网络参数,便于后期的学习和理解,以期更快的掌握深度学习,构建更准确的神经网络。
主要参数
1. Batch_Size(批尺寸)
该参数主要用于批梯度下降算法(Batch Gradient Descent)中,批梯度下降算法是每次迭代都遍历批中的所有样本,由批中的样本共同决定最优的方向,Batch_Size 正是批中的样本数量。若数据集比较小,可以采用全数据集(Full Batch Learning)的形式,由全数据确定的方向能更好地代表样本总体,从而更准确地朝向极值所在的方向;但该种方式并不适用于大数据集;另一个极端是每次只训练一个样本,即Batch_Size=1,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。在合理范围内增大Batch_Size,可以
(1)提高内存利用率,进而提高大矩阵乘法的并行效率;
(2)跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快;
(3)在一定范围内,一般来说Batch_Size越大,其确定的下降方向越准,引起的训练震荡越小。
盲目增大Batch_Size的坏处:
(1)超出内存容量;
(2)跑完一次epoch(全数据集)所需的迭代次数减小,要想达到相同的精度,所需要的epoch数量越多,对参数的修正更加缓慢;
(3)Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化;
Batch_Size参数调试:
大的Batch_Size在显存能允许的情况下收敛速度是比较快的但有时会陷入局部最小的情况;小Batch_Size引入的随机性会更大些,有可能会有更好的效果,但是收敛速度会慢一些;当Batch_Size太小,而类别数又比较多的时候,会导致loss函数震荡而不收敛。具体调试过程中,一般可根据GPU显存,设置为最大,而且一般要求是8的倍数,选择一部分数据,跑几个Batch看看loss是否在变小,再选择合适的Batch_Size。
每Batch_Size个样本更新一次参数。
2. subdivisions
如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batch/subdivisions;darknet代码中,是将batch/subdivisions命名为batch;
3. 冲量-momentum
梯度下降法中一种常用的加速技术,对于一般的SGD,其表达式为 x ← x -a * dx,
x 沿着负梯度方向下降,而带momentum项的SGD则写成 v = β * ν-a * dx
x ← x + ν
其中β是momentum系数,通俗的理解上面的式子就是,如果上一次的momentum(即 v )与这一次的负梯度方向是相同的,那么这次下降的幅度就会加大,因此可以起到加速收敛的作用,冲量的建议配置为0.9。
4. 权值衰减-weight decay
使用的目的是防止过拟合,当网络逐渐过拟合时网络权值往往会变大,因此,为了避免过拟合,在每次迭代过程中以某个小因子降低每个权值,也等效于给误差函数添加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个衰减常量之和。权值衰减惩罚项使得权值收敛到较小的绝对值。
5. angle、saturation、exposure、hue
angle:图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度;
saturation & exposure:饱和度与曝光变化大小;hue:色调变化范围;
在每次迭代中,会基于角度、饱和度、曝光、色调产生新的训练图片。
6. 学习率-learning rate
学习率决定了参数移动到最优值的速度快慢,如果学习率过大,很可能会越过最优值导致函数无法收敛,甚至发散;反之,如果学习率过小,优化的效率可能过低,算法长时间无法收敛,也易使算法陷入局部最优(非凸函数不能保证达到全局最优)。合适的学习率应该是在保证收敛的前提下,能尽快收敛。
设置较好的learning rate,需要不断尝试。在一开始的时候,可以将其设大一点,这样可以使weights快一点发生改变,在迭代一定的epochs之后人工减小学习率。
7. 最大迭代次数-max_batches
权重更新次数
8. 调整学习率的策略-policy
调整学习率的policy,有如下policy:CONSTANT、STEP、EXP、POLY、STEPS、SIG、RANDOM
9. 学习率变化时的迭代次数-steps
根据batch_num调整学习率,若steps=100,25000,35000,则在迭代100次,25000次,35000次时学习率发生变化,该参数与policy中的steps对应。
10. 学习率变化的比率-scales
相对于当前学习率的变化比率,累计相乘,与steps中的参数个数保持一致;
几个尺寸说明:
(a)batch_size:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batch_size个样本训练;
(b)iteration:1个iteration等于使用batchsize个样本训练一次;
(c)epoch:1个epoch等于使用训练集中的全部样本训练一次;
训练log中各参数的意义:
Region Avg IOU:平均的IOU,代表预测的bounding box和ground truth的交集与并集之比,期望该值趋近于1。
Class:是标注物体的概率,期望该值趋近于1
Obj:期望该值趋近于1
No Obj:期望该值越来越小但不为零
Avg Recall:期望该值趋近1
avg:平均损失,期望该值趋近于0
本文转自:前途有钱途,转载此文目的在于传递更多信息,版权归原作者所有。