深度学习——训练时碰到的超参数
一、前言
在训练深度神经网络时,会碰到一些超参数,通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。
总而言之,这里对深度学习中比较重要的或者常见的超参数做一个整理,我们可以根据实际情况修改超参数已达到最好的训练效果。
二、一些常见的超参数
-
学习率(Learning rate)
学习率是控制模型的学习进度。从梯度下降算法的角度来说,通过选择合适的学习率,可以使梯度下降法得到更好的性能。学习率,即参数到达最优值过程的速度快慢。
举个栗子:
假如你从山峰的最高点根据梯度下降法寻找最优值,当你学习率过大,即下降的快,步子大,那么你很可能会在某一步跨过最优值;当你学习率过小时,每次下降一厘米,这将走到何年何月呀,用术语来说就是,长时间无法收敛。因此,学习率直接决定着学习算法的性能表现。
学习率的设置:
学习率 大 学习率 小 学习速度 快 慢 使用时间点 刚开始训练时 一定轮数过后 副作用 1.易损失值爆炸;2.易振荡。 1.易过拟合;2.收敛速度慢。 在训练过程中,一般根据训练轮数设置动态变化的学习率。
- 刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
- 一定轮数过后:逐渐减缓。
- 接近训练结束:学习速率的衰减应该在100倍以上。
理想情况下曲线应该是滑梯式下降
[红线]
:- 曲线 初始时上扬
[黄线]
:
Solution:初始学习率过大导致振荡,应减小学习率,并从头开始训练 。 - 曲线初始时强势下降没多久归水平
[绿线]
:
Solution:后期学习率过大导致无法拟合,应减小学习率,并重新训练后几轮 。 - 曲线全程缓慢
[蓝线]
:
Solution:初始学习率过小 导致 收敛慢,应增大学习率,并从头 开始训练 。
-
迭代次数(iteration)
迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。每一次迭代得到的结果都会被作为下一次迭代的初始值。 一次迭代=一个正向传播+一个反向传播。每一次迭代得到的结果都会被作为下一次迭代的初始值。 我们可以查看loss曲线,来判断迭代次数够不够,如果loss从曲线上看已经收敛了,那么说明训练差不多了,再增加迭代也没什么用了,如果迭代结束了,但loss曲线并没有收敛的趋势,那么说明迭代设置的太小了。
-
batchsize
批大小。在深度学习中,一般采用随机梯度下降法(SGD)训练,即每次训练在训练集中取batchsize个样本训练(不是一次就把所有数据集扔进去训练,每次只取batchsize)。相对于正常数据集,如果batchsize过小,训练数据就会非常难收敛,从而导致欠拟合;增大batchsize,相对处理速度加快,所需内存容量也会增加。因此我们需要寻找最好的batchsize。再次重申:batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡,batchsize过大可能会导致内存不够用或程序内核崩溃。1次iteration等于使用batchsize个样本训练一次;batchsize通常取值为[16,32,64,128,256], 网络较小时选用256,较大时选用64。
-
epoch
通俗的讲epoch的值就是整个数据集被轮了几次。一个epoch=所有训练样本的一个正向传播和一个反向传播,也就是等于使用训练集中的全部样本训练一次。在神经网络中传递完整的数据集一次是不够的,所以我们需要将完整的数据集在同样的神经网络中传递多次。
三、例子
假设训练集有1000个样本,batchsize=10,那么训练完整个样本集需要:100次iteration,1次epoch。
名词 | 定义 |
---|---|
epoch | 使用训练集的全部数据对模型进行一次完整的训练,被称之为"一代训练" |
batch | 每次训练使用数据集的一小部分(batchsize)对模型进行一次的训练,被称之为"一批训练" |
iteration | s使用一个batchsize大小的数据对模型进行一次参数更新的过程,被称之为"一次训练" |