概念
训练机器学习算法的主要目的是调整权重以最小化损失或成本。这个成本衡量模型的效果,可以找到产生最佳模型性能的最佳参数。
参数和超参数
- 参数:由数据驱动调整,例如:卷积核的核参数。
- 超参数:不需要数据驱动,在训练前或者训练中人为的进行调整,例如:学习率,卷积核数量、卷积核尺寸等。
超参数分类
- 网络参数:指网络层与层之间的交互方式(相加、相乘或者串接等)、卷积核数量和卷积核尺寸、网络层(也称深度)和激活函数等。
- 优化参数:一般指学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数。
- 正则化参数:权重衰减系数,丢弃法比率(dropout)。
欠拟合和过拟合
-
欠拟合是指机器学习模型无法减少测试或训练集的误差。欠拟合模型的特征不足以适应数据分布的底层复杂性。
-
过拟合是指机器学习模型能很好的适应训练数据,但是会增大泛化误差。
在训练过程早期测试或验证损失的欠拟合或过拟合的迹象对于调整超参数是有用的。
学习率(learning rate)
学习率是指在优化算法中更新网络权重的幅度大小。学习率可以是恒定的、逐渐降低的,基于动量的或者是自适应的。不同的优化算法决定不同的学习率。当学习率过大则可能导致模型不收敛,损失loss不断上下震荡;学习率过小则导致模型收敛速度偏慢,需要更长的时间训练,并且有可能发生过拟合,通常lr取值为[0.01,0.001,0.0001].
x += -learning_rate * dx
其中x表示权重参数, dx表示梯度,学习率影响了每次参数更新值的大小。
调整方法
使用一个固定的的学习率进行训练的同时观察验证集准确率,每当验证集准确率停止上升,就乘以一个常数(比如0.5)来降低学习率。一般初始可以设为0.1.
epoch
迭代次数是指整个训练集输入到神经网络进行训练的次数,当测试错误率和训练错误率相差较小时,可认为当前迭代次数合适;当测试错误率先变小后变大时则说明迭代次数过大了,需要减小迭代次数,否则容易出现过拟合。
跑完全部图像的一次过程,epoch越大,训练的次数越多,但也可能造成过拟合的问题。
调整方法
一般设置为50,如果不收敛,可以适当增加,每次增加5。
批次大小(batch_size)
批次大小是每一次训练神经网络送人模型的样本数,在卷积神经网络中,大批次通常可以使网络更快收敛,但内存资源的限制,批次过大可能会导致内存不够用或程序内核崩溃。batch_size通常取值为[16,32,64,128]。
在合理范围内,增大batch_size可以提高内存的利用率,提高大矩阵乘法的并行化效率。跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。在一定范围内,一般来说batch_size越大,其确定的下降方向越准,引起训练震荡越小。
- 存在的问题
- batch_size太小,震荡不收敛。
- batch_size太大,显存爆炸,收敛不到谷底。
- 调整方法
由于最终收敛精度会陷入不同的局部极值,因此batch_size增大到某些时候,达到最终收敛精度上的最优。可以设为100,如果显存不够用,就减小一点。
step
表示训练的迭代次数(一次迭代是指参数更新一次的过程)。和batch_size、epoch有一定的关系。
- 调整方法
表示训练的迭代次数(一次迭代是指参数更新一次的过程)。和batch_size、epoch有一定的关系。
- epoch、batch_size、step之间的关系
batch_size * step = epoch * image_num