引言
优化算法在机器学习和人工智能中扮演者至关重要的角色。机器学习模型的训练过程本质上是一个优化问题,即通过调整模型参数来最小化损失函数。梯度下降法(Gradient Descent)在优化算法中占据着重要的地位,因其简单、有效且易于实现。
通过阅读本篇博客,你可以:
1.掌握梯度下降法的概念
2.了解如何设置学习率
一、梯度下降法的概念
1.梯度下降法的简述
梯度下降法(Gradient Descent)是一个算法。但不是像多元线性回归那样的一个具体做回归任务的算法,而是一个非常通用的优化算法。我们可以使用它来求解模型的最优解。所有优化算法的目的都是期望以最快的速度把模型参数 求解出来,梯度下降法就是一种经典的常用的优化算法。
2.使用梯度下降法的原因
在之前的博客10.解析解方法推导线性回归——不容小觑的线性回归算法-CSDN博客中我们利用 的解析解公式去求解MSE损失函数为凸函数的最优解。但如果我们机器学习的损失函数是非凸函数的话,设置梯度为0会得到很多个极值,甚至可能得到极大值!
换一个角度,我们之前利用的解析解公式 来求解最优解。我们设 是一个 的矩阵,考虑到 是一个对称正定矩阵,求逆可以使用矩阵分解来进行(可以使常数因子复杂度更低),这样就能使求逆的复杂度为 。整体的时间复杂度受求逆操作的影响,时间复杂度会高达 。显而易见,这个方法整体的时间复杂度是相当高的。
从上述可以得出,使用 的解析解公式求解并不是机器学习甚至是深度学习常用的手段。而我们在大部分情况下会使用梯度下降法去求解最优解。
3.梯度下降的思想
上图中,横轴代表 ,纵轴代表损失。我们要去寻找损失最低的点,就是 的最优解。计算机会随机初始化一个 (这里的 不是一个值,而是一个向量 ),有了 之后我们就可以根据公式计算出 ( )。然后根据 与真实值 之间的损失去算出MSE。最后调整 再循环往复,一直到找到最优解为止。这就像我们问朋友工资是多少,他会说"你猜?"。我们肯定会随机说出一个数字,他就会告诉你猜低了或者猜高了,这样我们就可以奔着对方的方向一直猜下去,直到猜对了为止。梯度下降法就是这样的,只有得到了正确的反馈后继续猜才有意义。
4.梯度下降公式
梯度下降公式用于更新 ,以最小化目标函数,其基本形式为:
这里的 就是 中的某一个,这里的 就是下图的 Learning step(学习率Learning rate),这个学习率我们就可以看作损失下降的步伐大小。
在大多数情况下,学习率都是正数。如果 在最低点的左侧,则梯度是负数,那么我们的 就会往大了调;如果 在最低点的右侧,则梯度是正数,那么我们的 就是往小了调。每次 的调整幅度都是 ,就是在横轴上的移动距离。
算法的维度和特征越多,那么这个公式的调用次数就越多。由于 的存在, 维的算法每次迭代要应用这个式子 次。 对应的是多个维度,每个维度都可以画一个与上述一样的图。
观察上图,我们可以发现不是某一个 或 找到最小值就是最优解,而是它们一起找到 最小的时候才是最优解。
二、学习率的设置
1.学习率设置的原理
根据上述梯度下降公式,我们知道 是学习率,设置大的学习率 每次调整的幅度就大,设置小的学习率 每次调整的幅度就小。当然,步子迈的太大也会出现问题,正如俗话说:"步子太大容易扯着蛋"。设置的学习率太大就会导致下方右图的情况出现,在两边来回震荡。反之,设置的学习率太小就会一步步往前挪,使得整体的迭代次数增加。
下图中的图 ,是学习率设置的最理想情况,最佳步骤,只需要一步就可以得到最优解,当然,这在现实当中基本上是不可能实现的。图 则是设置了较小的学习率,一次次迭代直到最优解。图 是设置比较大的学习率,我们会发现它在最优解两端不断的震荡,向最优解靠近。图 由于学习率设置的过大,迭代后梯度变大,梯度变大导致移动的步子更大,这样就会远离最优解,这也是我们最不愿意看到的情况。
下图展现了不同学习率设置的梯度下降法的关系,横轴代表了梯度下降的迭代次数,纵轴代表了损失的大小。我们可以看到,在相同的迭代次数下,较好的学习率可以得到更低的损失,也就意味着能更快的获得最优解。下图中的蓝色函数代表了上方的图 ,绿色函数就代表了图 ,黄色函数代表了图 。
2.局部最优解和全局最优解
如下图所示,如果损失函数是非凸函数,使用梯度下降法是有可能落到局部最小值的,所以学习率不能设置的太小太稳健(毕竟风浪越大鱼越贵)。当然,局部最小值也不会产生什么大问题,因为应用层面只要有实际应用价值和堪用就好了。
总结
本篇博客重点讲述了模型优化算法梯度下降法的基本原理和相关公式。希望可以对大家起到作用,谢谢。
关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!