凸函数在优化问题中的作用
梯度下降法是一个(凸)优化方法,优化问题分为凸优化问题和非凸优化问题,凸优化问题一般能够解决,而非凸优化问题常常无法被解决。凸优化就涉及到凸函数。
凸函数的性质是它的局部极小值就是全局最小值。因此可以利用它快速找到问题的最优解。
分辨凸函数的方法:凸函数图像任意两点连接而成的线段与函数没有交点。
a图就是一个凸函数,而b图所选的区间与函数有交点,因此在这个区间内不是凸函数。假如有一个小球在a图中,无论它在哪里,最后都会落在最低点。如果这个小球在b中所取的区间中,那么它虽然也会落在某个低点,但不能保证是最低点,这就是凸优化和非凸优化。
小球下降的过程就类似梯度下降,因此我们定义损失函数的时候尽量将其定义为凸优化问题。
理解梯度下降法
梯度下降法是一种逐步迭代、逐步缩减损失函数值,从而使损失函数值最小的方法。
直观来看,把损失函数的值看作一个山谷,我们刚开始的位置可能在这座山的任何地方(山顶、山腰等)。 但是,只要我们往下不断迭代,总可以到达山谷,也就是损失函数的最小值处。
越快到达底部越好,这样就能让机器花费更少的资源和时间,因此要在每个点都找到对应的切线方向,也就是最陡的方向,这样下山最快。这个最陡在数学上就叫做梯度。
但梯度是指函数增长最快的方向,所以我们这里其实是沿着负梯度方向去下降的。因此叫做梯度下降法。
有了方向后,就要确定每一步走多远,步长大虽然能够更快逼近山谷,但也可能导致直接跨过谷底点,到达对面的山坡,从而造成来回振荡。而步长小则延长了到达山谷的时间,所以需要做一下权衡和调试。每次走多远就是“学习率”LR(learning rate),所以要调试合适的“学习率”,从而找到“最佳”参数,通常LR都会设置的比较小。
需要注意的是:因为样本之间是相互独立的,所以会导致我们的参数a和b会使得其中某个样本(如1号样本)损失函数值最小,使其他样本(如2号样本、3号样本等)损失函数值很大,因此我们尽量对每个样本都进行优化,也就是每个样本都有自己的最优参数a和b,最后通过综合结果去得到最终参数。
梯度下降具体过程
梯度下降法中最重要的是如下的迭代式
是任意给定的一组初始参数值,a是“学习率”,也就是步长。沿着
的梯度下降方向前进a距离,就可以得到一组新的参数值
。这里的
和
就是模型参数(如ω和b)
假设为(4,-2),初始学习率a为0.1,总体损失函数是
,那么该点的梯度函数
总体损失函数最小值为0,因此经过梯度下降法数次迭代后,应该得到(0,0)这个最佳参数值使得损失函数在(0,0)取到最小值0。迭代过程如下:
在经过200次的迭代后,此时的参数值对应的损失函数值已经非常趋近于0。
这就是梯度下降法。
梯度下降法的分类
批量梯度下降法:在每次迭代中使用整个数据集来计算梯度,并更新参数。即用所有样本平均求得一个最优的下降方向,好处是能够得到最优解,坏处是如果样本很大,它的速度就会很慢。
随机梯度下降法:在每次迭代中只使用一个训练样本来计算梯度,并更新参数。这种方法计算速度快,但样本也有离群点噪音点,这就会因为单个样本的随机性而导致更新不稳定,像股市的线那样
小批量梯度下降法:介于批量梯度下降法和随机梯度下降法之间,每次迭代使用一小部分数据来计算梯度并更新参数。这种方法在计算效率和稳定性之间取得了平衡。这种方法用的比较多。
补充
使用梯度下降法时应该设置阈值,当两次迭代结果的差值小于该阈值时,使迭代结束。
也要设置迭代次数,当迭代次数达到设定值,结束迭代。当迭代次数足够大,损失函数最终都会停留在极值点附近。同时,因为损失函数在极值点时函数梯度为0,一旦过了极值点函数梯度正负值会变号,使函数围绕极值点再次“跑回来”。所以,即使设置的迭代次数过大,最终结果也会在极值点处“徘徊”。
机器学习很多算法都是优化问题,梯度下降是其中最经典的优化方法。机器学习基本上都是用优化算法去求解,而不会用直接求解的方法。