老饼讲解:一步一步上手学习
前面我们已经学习了梯度下降算法了,也弄清楚它的实现流程了,最后,作为补充,我们这一节来说说它的优点和缺点,进一步了解它的特点,加深对梯度下降算法的理解。
我们先来简单回顾一下梯度下降法:

如图,梯度下降算法就是先初始化一个,然后再不断地往负梯度方向迭代,使目标函数持续下降,直到满足终止条件则退出迭代,这就是梯度下降算法了。好了,下面我们来说说梯度下降法的优缺点。
我们直接来看看梯度下降法的优点,如下:
1. 必能下降
按负梯度调整,加上学习率的控制,则能保证x的调整,函数一定能下降。
2.下降速度快
按负梯度下降,由于负梯度是下降最快的方向,在下降速度上更加有效,
所谓最快,即调整同样的步长,该方向能令函数下降最快。
3.算法简单有效
梯度下降法只需求一阶导,且迭代机制也简单,相对其它算法更为简单,
因此不管是推导、计算、代码编写上都非常简单明了,且效果不错,性价比非常高。
✍️笔者语
还是在读大学的时候,刚接触到梯度下降法,当时觉得梯度下降法真厉害,因为它能使目标函数最速下降!然而,好些年后才发现,梯度下降法最卓越的地方不在于它下降最快,而是它能保证下降!
正是因为梯度下降法能保证下降,因此有许多算法,可以采取"更大胆的算法策略“来下降,当"大胆策略"能下降时,就用"大胆策略",当"大胆策略"不能下降时,则退化为梯度下降,如此一来,进可攻退可守,既可以放心大胆地去下降,又有梯度下降算法进行兜底。也正是因此,梯度下降作为一种经典算法,在其它算法中仍然能经常看到它的身影~
上面已经说完了梯度下降算法的优点,那下面我们再来说说梯度下降算法的一些缺点。
梯度下降法是对初始值极为敏感的,我们直接来上个图,如下:

如图所示,如果初始化在点A,那么最终能找到的就是局部最优值,而初始化在点B,最终就会找到全局最优值。总的来说,梯度下降法只能找到离初始值最近的局部极小值,如果初始化不好,找到的结果也不好。
我们都知道,梯度下降法它只能找到由初始值决定的局部最小值,而它没有没有任何跳出局部最优值的机制。

如上图所示,目标函数中随便的一个小坑 ,都能够把梯度下降法坑住,这就非常亏,如果目标函数中有很多小坑,那梯度下降法就基本没法搞了,因为不管初始化在哪,都会被这些小坑给坑住。
梯度下降法在梯度平缓处的迭代速度较慢,而极值附近一般都是相对较为平缓的:

因此,当无穷接近极值处时,梯度下降算法的迭代会变得无穷慢,即收敛速度缓慢,这样就注定了梯度下降算法必须迭代比较久,而且也几乎永远无法迭代到最优点,所以一般在梯度较小时就直接退出训练了。但更坑的是梯度下降法在一些拐点处,或者极为平缓处,也会迭代得非常慢,往往需要很多很多的迭代次数才能走出这些平缓区。
总的来说,梯度下降法有优点也有缺点,它最大的优点是在学习率足够小时,一定能保证下降。而它是一个比较基础的算法,所以有许多不足,例如对初始值极敏感、收敛慢、平缓区域迭代慢、不能跳出局部最优等等,但即使它有再多缺点,也是机器学习中最最最经典的算法。
评论