李宏毅深度学习——局部最小值,batch的选取,自动调整学习率

写在前面

这篇文章对应的是李宏毅的课,2021年版的P5,P6,P7,前面的内容我放在datawhale的笔记里了,感兴趣的同学们可以去看一下

指路:深度学习入门———Task03——2.实践方法论#datawhale-CSDN博客

           深度学习入门———Task02——1.2线性模型#datawhale-CSDN博客

           深度学习入门———Task01——1.1通过案例了解机器学习#datawhale-CSDN博客

笔记部分

局部最小值

我们先来了解一下局部最小值。先说结论,驻点出现最多的情况是saddle point,也就是马鞍点的部分,下面就说一下这一节究竟讲了些什么。

我们可以通过Hessian matrix,也就是海森矩阵来判断驻点究竟是局部最小值还是马鞍点,我们来看一下具体的推导过程

这个就是推导过程,具体来说就是多元函数的一个二阶的泰勒展开,我们任取一个点theta',在它附近展开,这时候有人就会问了,这个ppt上怎么没有一阶微分项呢,因为这个是驻点,一阶导为0,所以省略那一项。就这个结果来看,很多人都非常熟悉,这就是我们在高数里学过的多元函数最低点的情况的讨论的一个大致的推导过程。当H为正定矩阵时是局部最小值,负定矩阵是则为局部最大值,如果既不是正定也不是负定时是马鞍点。

面对马鞍点造成的Training stuck时我们就有一些方法去解脱,因为根据梯度下降,我们可以找到出口去下降。具体是什么方法呢,也就是特征值和特征向量,我们取图中向量v的一个特征值lambda,它所对应的特征向量是u,则有:

那么,当这个H负定时,也就是左侧小于零时,也就是我们找到”出口“时,这个u就是我们的“方向”,也就是说,我们可以让theta这么更新:

也有人说了,如果我们真的是陷入局部最小值的话该怎么办呢

这时候就有一个方法,交momentum,也就是参考物理的惯性,就是说,在现实世界中,一个正在下落的球遇到一个小坑也会凭借“惯性”通过,这个所谓的惯性是什么呢,就是我们们一次更新时所保留的上一次的数据,我们看图:

这是我们的一个最经典的梯度下降模型,也就是说,我们每一次更新参数的方向都是梯度的反方向,那么加上所谓的“惯性”会怎么样呢?

我们可以看到,这个每一次我们就需要记录两个量,一个是-g,就是反向的梯度,另一个是上一次的数,在第一次时他们两个时一个数,从第二次开始,以后的每次更新都是反向g与上一次的量,也就是m合成的方向,这也就是所谓的“惯性”。也就是如下更新过程:

这个就是所谓的“惯性”的来源,有了这个惯性,我们更有可能通过这个局部最小值

下面就是讨论所谓的真正的“局部最小值”是不是一个大量存在的情况呢?结论是不是,因为大多数情况下,一个维度下的局部最小值在添加若干维度后大多会找到我们的所谓“出口”,也就成为了马鞍点,这是统计的结果。

batch的选取

先上结论,感兴趣的看一下原理,不感兴趣的跳过即可

下面就是原理,总的来说,batch大的好处就是比较稳定,不会那么的noisy,但是每一次update这个参数的速度就会慢一些,但是随着gpu的平行运算,这个缺点也不太明显,但是缺点就是训练的Loss比较大,也就是说效果不太好,原因也比较简单,就是我们如果说是看完所有的数据之后更新的话就会造成这个结果:

就是我每一次更新参数时都是根据一个单一的Loss曲线的,就是很容易出现Training stuck的情况,而参数更新次数比较多的情况,也就是batch比较小的情况下,我可以在多个Loss曲线上更新我的参数,极大的避免了上述情况,也造成了小的batch优化效果比较好。但是batch比较大的一个优点就是,每一次epoch跑完的时间比较短。

自动调整学习率

这一部分就比较有意思了,学习率作为一个自己调整的参数,有什么需要调整的呢?学习率,也就是步长,如果选取过大的话会在梯度比较大的情况下造成以下结果:

也就是说,如果步长不调整,那么我的每次参数的更新就只能在这一块儿游荡而无法“探底”这时候我们就需要一个可以随着梯度变化而变化的学习率。比较幸运的是,我们有了很多方法来做这件事情。

这个看起来就比较好一些,就是我构造出一个作分母的函数sigma,这个sigma与梯度的绝对值成正相关,再次更新时我们可以记录下来前两次的,做平均,以此类推。这就是Adagrad

这样看起来就很好了,但是这个sigma每次都是平均了以前的梯度值,平均本质上来说,就是每一个因素的影响程度都相同。但事实上我们在到达一个“地貌”,比如说变化比较平缓的地方的时候很多情况下我用不到前面的值,我们就可以调小前面的值的比重,这就是RMSProp

这个就很好理解了,我们只需要去调整一下alpha就可以调整权重了

接下来我们又遇到了一个问题:

就是说在接近我们想要的最低值时出现了一些很noisy的地方,这种情况我们来怎么解决呢,这就是我们要学习的一个地方,叫做Leaning Rate Decay。

这就是它的效果,就是学习率随着次数而递减

还有一个叫warm-up的东西

这个是一个比较前沿的东西,对这个东西为什么可以取得更好的一个优化也是一个没有明确解释的东西

写在后面

这是笔记的全部内容,感谢大家支持!

祝大家学习生活愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值