我们在使用chatglm-6B的时候,总会遇到一个问题。即学习率如何确定。我们首先先看chatglm的两个训练用sh文件的学习率是如何确定的。
一、如何第一时间确定学习率
我们可以看到在chatglm给的标准中,对于聊天的训练所默认的学习率是要小于训练广告词的,两者的区别在于,广告词有更多重合性质的prompt,而聊天更加发散。
所以在训练前你要自己评估,你给出来的训练内容内容的发散程度是否大,如果很发散,那么调小学习率,如何prompt很集中,那么可以在初期调一个相对比较大的学习率。
这个学习率可以以2e-2为标准,在5e-2和5e-3之间选择一个开始。
二、相对较好的学习率
我们一定要理解一个问题,学习率LR不是一个固定的值,或者一个绝对的值,而是一个相对较小的值。既然是相对较小,那么一定没法通过一次训练就能获得,这个数值至少要通过3次训练来确定。
每一次训练后,我们把loss值打印出来。loss值是应该呈反函数状态的。
我把3次训练的结果打印出来:
这三次的学习率从上到下依次是增大的,即蓝色>黄色>绿色。
我们有两个点来判断,如果第三次(绿色)是最大的,那么就说明再增大学习率还有可能使loss变小,如果第一次(蓝色)是最大的,那么就说明再降低学习率还有可能使loss变小,如果中间黄色的是最大的,那么这个学习率是可以确定下来了。
单就这三条线而言,他们的斜率并不是缓慢变化的,这个斜率的变化在25以内的时候就突然放大了。而最理想的情况是,斜率是慢慢变小的。
所以在这个模型中,学习率还应该再往大调整。
三、什么是合适的学习率
学习率并不是越低越好,而是在0-1之间是比较好的。但是这个值在0.5到1之间是最好的,如果越趋近于0,则越可能形成过拟合(过拟合了就需要重新训练,调整训练集和测试集),如果大于1则结果可能不会太理想。