1、梯度下降出现的必然性
利用最小二乘法求解线性回归的参数时,求解的过程中会涉及到矩阵求逆的步骤。随着维度的增多,矩阵求逆的代价会越来越大,而且有些矩阵没有逆矩阵,这个时候就需要用近似矩阵,影响精度。另外,在绝大多数机器学习算法情况下(如LR),损失函数要复杂的多,根本无法得到参数估计值的表达式。因此需要一种更普适的优化方法,这就是梯度下降。其实随机梯度下降才是实际应用中最常用的求解方法,但是其基础还是梯度下降。
2、梯度下降法
(1)理解梯度
官方定义:梯度的本身是一个向量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。
通俗解释:在单变量的函数中,梯度其实就是函数的微分,代表这函数在某个给定的切线的斜率。在多变量函数中,梯度是一个向量,梯度的方向就是向量的方向,此方向就是函数在给定点上升最快的方向。梯度中元素的个数同未知参数的个数对应。梯度为0向量的点,也就是梯度中所有偏导函数都变为0的时候就是需要优化问题的最优解。
(2)理解梯度下降
官方定义:梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一。
通俗解释:如果比作下山的话,可以这样假设。一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了。
转移到数学问题上,梯度下降就是让梯度中所有偏导函数都下降到最低点的过程。首先,我们有一个可微分的函数。这个函数就代表着一座山。我们的目标就是找到这个函数的最小值,也就是山底。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快。
(3)学习率α
α在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离。学习率的选择不能太大也不能太小。首先,如果学习率太大,那么有可能会“迈过”最低点,从而发生“摇摆”的现象,无法得到最低点;其次,如果学习率太小,会导致每次迭代时,参数几乎不变化,收敛学习速度变慢,使得算法的效率降低,需要很长时间才能到达最低点。
3、随机梯度下降
(1)出现的必然性
如果在梯度下降过程中,在每次更新参数时是需要计算所有样本的,通过对整个数据集的所有样本的计算来求解梯度的方向。这种计算方法被称为:批量梯度下降法BGD(Batch Gradient Descent)。但是这种方法在数据量很大时需要计算很久。针对该缺点,有一种更好的方法:随机梯度下降法SGD(stochastic gradient descent),随机梯度下降是每次迭代使用一个样本来对参数进行更新。虽然不是每次迭代得到的损失函数都向着全局最优方向,但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。但是相比于批量梯度,这样的方法更快,我们也是可以接受的。
(2)随机梯度下降过程
随机梯度下降的过程就是:每次随机取出一个样本,得到一个样本向量,然后沿着这个样本向量在损失函数上的梯度方向进行搜索不停迭代,直到得到损失函数的最小值。但有一点需要注意,如果是批量搜索,那么每次都是沿着一个方向前进,但是随机梯度下降法由于不能保证随机选择的方向是损失函数减小的方向,更不能保证一定是减小速度最快的方向,所以搜索路径就会呈现下图的态势。即随机梯度下降有着不可预知性。
(3)随机梯度下降中学习率的选择
在随机梯度下降中,如果学习率一直取一个固定的值,可能会导致参数已经取到最小值附近了,但是固定的步长导致点的取值又跳出了这个点的范围。因此,我们希望在随机梯度下降法中,学习率是逐渐递减的。如果设计一个函数,使学习率随着迭代次数的增加而减少的化,那么最简单的是取倒数。但是这样会有一个问题,如果循环次数比较小的时候,学习率下降太快了,比如循环次数由1变为2,则学习率减少50%。因此,我们可以将分子变为常说,并在分母上增加一个常数项来缓解初始情况下,学习率变化太大的情况。