1.自适应学习率:
实际训练中因为“步长”的问题,可能存在这种情况:
梯度很大,但是损失不再下降。如果用一个很小的学习率,如果最后阶段比较平,这个损失在最后阶段会下降的很慢很慢,无法靠近局部最小值。
2.能够调节的学习率能够解决这个问腿
解决方法:(1) AdaGrad:梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。
(2)RMSProp:同一个参数的同个方向,学习率也是需要动态调整的,于是就有了一个新的方法———RMSprop(Root Mean Squared propagation)
(3)Adam:可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。Pytorch中的预设已经足够优秀。
3.学习率调度:
快走到终点的时候突然“爆炸”了:
常见策略:学习率退火(衰减)/学习率预热
4.分类:
一般引入独热(one-hot)向量来划分类别,这使得每一类都是有相同的重要性。
同时,通过softmax使预测结果归一化,再跟标签比相似度。
5.这时的损失用交叉熵来计算:
交叉熵表示形式为
使交叉熵最小化。也可以用均方误差,但是这使得自适应学习率再斜率比较大的地方会失效。
一下是实践部分:
创建了一个在线空间,用ipynb的文件格式。clone了一个现有的项目文件,实现了图像分类任务: