04训练时的麻烦

本文探讨了在机器学习中,优化方法如梯度下降遇到的局部最小值和鞍点问题,以及小批量与大数据量训练的对比,同时介绍了动量方法如何帮助模型避免陷入这些陷阱。
摘要由CSDN通过智能技术生成


在上一篇博客中提到过,在训练误差大的时候,会出现两种情况:

  • 我们的模型是很废柴的模型,机器本身就很差model bias
  • 模型很不错,但是optimization方法很差,机器很好,却缺少好的发动机optimization issue

本文来探讨optimization中的问题。

局部最小值与鞍点

我们现在用的最多的优化方法就是梯度下降,梯度下降是沿着gradient相反的方向移动使loss降低,当然这过程中学习率的选择也很重要。

然而,我们有时候会发现,明明我们的模型理论上很完善,训练误差理应很小,但实际却很大。这种情况呢,大概率就是你的optimization方法不好,导致我们没法找到function set中最好的那个。那么为什么会出现这种情况,这就要引出我们今天的主角就是,局部最小值与鞍点。

​ 当我们的gradient为0时,梯度下降就没办法进行下去了。所以我们要判断gradient=0时的情况,如果这时正好是全局最优,那么恭喜你,你已经找到了很好的一个function了;但还有另外两个调皮的娃争风吃醋,弄得你哭笑不得,局部最小值与鞍点都满足gradient=0,这时候我们的模型就陷入的陷阱无法出来了。

​ 我们可以观察这两种情况,发现Local minima的时候我们深陷谷底,四周都是高峰,不容易出去。然而saddle point呢,却可能存在许多方向都是坦途,所以会比较容易克服。

在这里插入图片描述

​ 当我们训练的时候卡住了,如何判断这两种情况呢?我们是不是可以试一试往这个特殊的点周围试探一下,看看是否会下降。最简单的方法就是暴力地遍历该点周围的所有方向,找出能够使得Loss下降的方向。但是这样超级慢,我们可以使用其它方法。所以我们可以计算该点附近的loss,计算方法为高等数学中的泰勒展式(这部分可以回去重温高等数学)。
在这里插入图片描述

​ 其中H为Hessian矩阵,为loss function的二阶导数。g为一阶导数,因为是local minima或者saddle point所以g = 0,那么如果后面那一项 ∃ θ \exist \theta θ使得 1 2 ( θ − θ ‘ ) T H ( θ − θ ‘ ) < 0 \frac{1}{2} (\theta-\theta^`)^TH(\theta-\theta^`)<0 21(θθ)TH(θθ)<0,那么这个点就是saddle point,否则就是local minima。

​ 运用我们在线性代数中的知识,当H是正定的(所有特征值都大于0)那么这一项必定大于0,这个点就是Local minima;如果H特征值有正有负,那么就是saddle point,且我们只需要沿着特征值为负的方向优化,就能走出鞍点。

​ 然而,在现实中,我们不可能使用这种方法进行鞍点或者Local minima的判断,因为计算太复杂从而使得过程太慢,H涉及计算二阶导数。所以,大家几乎没有使用这种方法使得训练顺畅。

​ 对于鞍点呢,我们可以看出,在二维空间中两个方向都可以出去,在三位空间中的选择就多了很多。所以,现在存在一种方法就是增加维度,也就是增加特征值的个数,使得维度更高就更容易从鞍点出去,因为高维空间中的方向选择更多。

​ 其实,在真正训练的时候都是通过batch的形式进行的,这个batch在某种程度上就减少了训练陷入local minima和saddle point的可能性。

批次(batch)与动量(momentum)

small batch vs. large batch

​ batch呢是将我们的数据集按照batch size分成一定的批次,每个批次运行完之后就update我们的参数一次,而不是像full batch那样,每次都读完所有的数据才更新一次。所有的batch都update完一次叫一个epoch,在每个epoch开始时呢,我们还可以选择进行shuffle操作,这个操作将数据打乱,重新分成不一样的batch进行训练。这种训练方法有时候又被称为mini batch,但其实指的都是一样的含义。

​ batch size的选择也有一定的意义,在现在GPU的发展下,并行计算的能力越来越强,大batch与小batch update一次的时间其实也没差太多。

比较

​ 所以,small 与 large的差异不是在时间上,而是在梯度的下降速度和方向上。small batch因为数据量少,所以每次update的方向不一定是稳定的,是noisy的,这一点就不同于large batch的稳定。但是呢,在我们上面鞍点和局部最小值的讨论中,我们可以知道large batch训练过程中容易陷入这些陷阱,但是small batch就很难陷入这些困境了,因为在一个batch上面是local minima在另一个batch上面不一定就是local minima。

动量momentum

​ 动量的核心思想是综合之前所有的方向和当前的方向,对参数进行更新,而不是仅仅根据当前的方向更新。这样,即使gradient=0,在以前的方向的作用下,也能继续更新参数,从而说不定就能跨过谷底,继续降低loss。

​ 剩余的一些理论推导就不在这里赘述了,可以参考别人的博客或者参考书来进一步学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值