Optimization
Critical Point
在 Gradient Descent 的时候,如果遇到梯度为 0 的情况,导致无法继续 optimization,这样的点叫做 Critcal Point。如果最后优化的结果不好,则出现这样的点的原因有以下两个
一个是到 local minima 了,另一个是在驻点了(也叫鞍点,Saddle Point)。现在主要关注的是如何判断是鞍点的情况,并继续 optmization 下去。
其实local minima并不多,因为站在高纬的角度来看,是有许多道路的。
那么遇到这种情况了,我们要怎么解决呢
实践中常用的是减小 batch 和设置一个 momentum,除此之外,还可以自动调整学习率
Batch
什么是 batch?在梯度下降的时候,需要求出 loss 的梯度,每次求出梯度之后在乘上 learning rate(超参数)作为位置的改变量。现在,我们将 loss 设置为训练中一部分数据的 loss 值,这一部分数据就叫一个 batch(然后将源数据shuffle之后再分出batch,继续下去)经过研究发现,batch 比较小的时候,优化的效果比较好。(理解:可以认为是步长比较小,因此更容易得到最优解,而不是在最优解两头不停震荡)
Momentum
考虑在 optimization 的过程中引入“惯性”的概念,每次移动的方向不光是由梯度决定,而是还与之前的移动方向有关。
如下图所示:
Adaptive Learning Rate
以两个参数为例,我们计算出loss值作为这个点的函数值,画出error surface
如果loss最小的点在平坦的空间,导致附近梯度很小,收敛很慢,可能到达不了这个点,那就把学习率调大?但是如果最优解在梯度比较大的地方,就会导致答案在这附近震荡。
希望平坦时候学习率大,而陡峭时候学习率小,考虑如下,下标i为第i个参数
可以按照下面计算:
原理就是,g小,
如下图所示,用这种方法,可以走到最优解,但是到了平缓区之后,y轴方向积累了很多gradient小的值,
针对上述情况,可以使用让学习率随时间降低的策略,可以使用以下两种方式
但是想让学习率自动变化,采用RMSProp方法,刚刚计算中每个g都有同等重要性,现在根据目前的g来调整
这样 又得一个
Adam就是RMSProp和Momentum的结合,在pytorch调用即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!