【深度学习系列】三、训练过程中遇到的问题及优化方法

optimization fail:critical point

  • 场景:1)随着参数更新,loss不再下降(但这个loss仍然不能让人满意);2)一开始模型就寻不起来,参数更新没有使得loss下降。这些gradient不起作用的时候,也许是遇到了critical point
    • critical point有可能是local minima,也有可能是saddle point.。。。

在这里插入图片描述

  • 鉴别critical point

使用泰勒展开式近似表示模型函数在某一点的曲线,通过Hessian矩阵判断该点是local minima、saddle point、local maxima,具体方式如下ppt

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 经验上看起来,local minima并没有那么常见

在这里插入图片描述

training tips:batch and momentum

  • batch

通常情况下,模型训练时会将training data划分为一个个batch,每个bactch训练完更新一次参数,当所有batch都更新完 叫做一个epoch

在这里插入图片描述

small batch和large batch的区别:

​ 1)小的batch更新参数的速度很快,但是梯度更新的方向是比较noisy,比较难找到最正确的下降方向;大的batch梯度下降的力度比较大,但是参数更新的速度比较慢(这是不考虑gpu并行计算的情况)

​ 考虑平行计算的话,batch size在一定范围内,小的batch和大的batch更新速度差别不大,这时batch size大的一个epoch算完的时间反而会较短。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2)small batch的表现更佳。

每个batch的损失函数可能不同,这种情况下一个batch的梯度遇到了瓶颈,另一个batch的梯度更新可能可以帮助模型走出困境。而small batch显然更具有这种优势。

在这里插入图片描述
在这里插入图片描述

在测试集上,small batch表现的也更好。可能得原因是:

small batch更容易走到平坦的波谷,而large batch更倾向走到峡谷(large batch步子跨的大。。。)

在这里插入图片描述

总结:

在这里插入图片描述

一些希望找到平衡的论文在这里插入图片描述

  • momentum

momentum是一种优化的梯度下降算法,每次更新梯度时都会加上之前更新梯度的方向(用以对本次更新进行矫正)。

这种思想借鉴了物理中小球从斜坡滚下来,小球下来伴随着动能,当遇到一个轻微的波谷时,这种动能可能会帮助小球度过波谷寻找下一个最优点。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 总结:
    在这里插入图片描述

training tip:adaptive learning rate

https://blog.csdn.net/weixin_43454924/article/details/124331867

通常情况下,当训练过程中参数难以更新时,可能是遇到了critical point,但还有很多时候,gradient还很大,loss就掉不下去了。其实,多数情况下,在还没有走到critical point的时候,训练就会被卡住了(loss掉不起下去)

训练困难的原因另有原因:learing rate不合理。如下所示,以凸的error surface为例,当learning rate值不变时,大的或是小的learning rate都难以走到最优点。
在这里插入图片描述

learning rate永远都是一个固定的值,在应对不同的Loss的时候更新参数表现不一样。所以不同的parameter应该有不同的learning rate。这就是Adaptive Learning Rate。
在这里插入图片描述

  • Root Mean Square

    可以看到在η 固定的时候,如果这个loss的坡度较陡峭,也就意味着之前的g 的和比较大,σ 的值就比较大,此时learning rate就比较小。反之当Loss的坡度比较平坦的时候,learning rate比较大这也符合我们的预期。结合这上面的例子可以看到,在纵轴方向应该learning rate比较小,在横轴方向learning rate比较大。

    在这里插入图片描述
    在这里插入图片描述

  • RMS Prop

即使是同一个参数,在不同地方的learning rate可能也会有所不同。这个时候需要更优的learning rate处理:RMS Prop(这个是视频中的讲解,但是个人觉得这和RMS的区别不是在这一点)
在这里插入图片描述

增加参数α,用来决定当前梯度的影响力。如图,我们希望当前梯度的影响力大一些,这样能更快地适应loss的变化。
在这里插入图片描述

  • Adam

Adam是目前使用比较多的梯度优化方法,它是RMS Prop和Momentum的结合
在这里插入图片描述

使用Adaptive Learning Rate之后,梯度更新的速度明显变快,但这种方法还是存在缺陷,比如在经过很漫长的平滑区域积累了很大的learning rate此时很可能突然遇到陡峭的情况,但因为learning rate很大而直接跳过。或者图中震荡的区域,在一直平滑的区域,当σ 一直特别小的时候,积累到一个地步,突然爆发了这个step变得特别大,虽然后面可以经过很多修正,但浪费了很多次的update。

在上文引用的博客中写到,RMS Prop是解决这个问题的一个方法(个人觉得有道理)
在这里插入图片描述

  • Learning Rate Scheduling

或者使用另一种方法解决 learning rate突然抖动的问题,这就是learning rate schedule。它的思想是:随着训练的逐渐加深,模型正在接近最优点,这时候就需要调小learning rate。learning rate schedule的一个方式是learning rate decay,使用时间系数来调整learning rate。
在这里插入图片描述

在这里插入图片描述

  • warm up

warm up是另一种让参数更新慢下来的方法,它的核心思想是让learning rate先大后小。

这个变大到底要变多大,变大的速度是多少,变小的速度是多少这个也是我们要自己设置的参数,也是一个hyperparameter,这个办法广泛应用于多个著名的Network,比如Transformer。这个方法实用的一个可能的解释是当我们在用Adam RMS Prop我们会需要计算σ σσ,它是一个统计的结果σ σσ告诉我们,某一个方向它到底有多陡或者是多平滑,那这个统计的结果要看得够多笔数据以后才精确,所以一开始我们的统计是不精确的,所以我们一开始不要让我们的参数离初始的地方太远,先让它在初始的地方呢做一些像是探索这样,所以一开始learning rate比较小,是让它探索收集一些有关error surface的情报,等σ σσ统计得比较精準以后,在让learning rate慢慢地爬升。

在这里插入图片描述

classification

  • classification如何做

以回归问题起手:

回归问题:模型预测一个数据,期望预测的值和label尽可能接近

回归问题损失函数:MSE,根据预测值和实际值的均方误差来优化参数

分类问题如何做:

思路一:模型预测数值,比较预测值和label的接近程度,以最为接近的class作为输出

思路一的问题:这样做就是假设类别之间具有相互关系,如一年级和二年级比较接近,一年级和三年级距离比较远,但是很多时候的分类,如猫和狗,其实是没有什么直接关系的。

思路二:输出one hot向量,避免类之间的关系。模型得到的是一组任意的向量 [ y 1 , y 2 , y 3 ] [y_1,y_2,y_3] [y1,y2,y3],接着我们将他进行softmax,得到一组0-1之间的向量,希望它和onehot的label尽可能地接近。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • classification的激活函数

多分类就直接用softmax,但是二分类的话,softmax和sigmod效果是一样的了。并且,二分类问题的解决称为Logistic 回归,多分类问题的解决称为softmax回归,后者可以看成是前者的推广,并且处理分类问题的nn也主要就是他们两个。另外,当分类的时候类别互相排斥,直接用softmax回归来做(因为logistic回归就是特殊的softmax回归),若是分类的时候类别相互之间不排斥,应该两两之间使用logistic回归来做。

  • classification的损失函数

分类问题损失函数使用交叉熵损失函数(cross-entropy),公式如下图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYyHyirS-1683352081808)(开发随笔.assets/image-20230506134109158.png)]

举例说明交叉熵损失函数的优势,下图 y 1 y_1 y1较大、 y 2 y_2 y2小的时候,loss很小,但是当 y 1 y_1 y1较小, y 2 y_2 y2大的时候,loss很大,但是MSE的梯度比较小,参数更新会比较慢(侧面说明损失函数会对训练效果有很大影响)

在这里插入图片描述

遗留问题:

  • 分类问题中为什么使用softmax和交叉熵损失函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值