对于大多数机器学习模型来说,损失函数(不是凸函数)都无法直接利用最小二乘法进行求解,经常使用梯度下降算法求解最小值。
根据梯度下降的计算公式:|−(−1)|=|⋅∇((−1))| 其中lr(学习率)是个恒定的数值,每个点的梯度值不一样,越靠近最小值点梯度值越小,并不是一个等步长的移动过程,而是移动距离衰减,因此无论增加多少次迭代,主要参数不会发散,最终参数值点不太可能跨过最小点。学习率取值是影响结果是否收敛,以及能否在有限次迭代次数中高效收敛的关键参数,学习率过大会导致结果发散,而学习率过小则又会导致模型无法收敛至最优结果。
梯度下降算法的优势
梯度下降算法局限
由于梯度下降的距离衰减理论,由于局部最小值点梯度也是零,因此如果参数点陷入局部最小值,则不可能跨过局部最小值抵达全域最小值点。
2.鞍点(saddle point)陷阱¶:鞍点是指那些不是极值点但梯度为0的点。例如函数 ()=3
梯度下无法跨越鞍点抵达更小值的点,即使迭代很多次。
所谓极值,指的是那些连续函数上导数为0、并且所有两边单调性相反的点,极值包括局部最小值、最小值点、局部最大值和最大值点四类。而鞍点和极值点的区别在于导数为0单左右两边单调性相同。
梯度下降算法本质与改善方法
根据局部最小值和鞍点的讨论,我们不难发现梯度下降的本质作用其实是让参数点移动到梯度为0的点,当损失函数是严格意义的凸函数时,梯度为0的点就是全域最小值点,但如果损失函数不是凸函数,那么梯度为0的点就有可能是局部最小值点或者鞍点。此时受到局部最小值点或者鞍点梯度为0的影响,梯度下降无法从该点移出。尽管大多数线性模型的损失函数都是凸函数,但很多复杂机器学习模型所构建的损失函数都不一定是严格凸函数,要避免局部最小值点或者鞍点陷阱,最为简单有效的方式是调整每次带入训练的样本数量,通过局部规律规律的不一致性来规避“非全域最小值但梯度为0”的陷阱,这就是所谓的随机梯度下降和小批量梯度下降 。
1.数据规律可以用损失函数表示,损失函数形态不同代表其背后构造损失函数的数据规律不同;
2.一般来说,对于一个数据集来说,局部规律之间和局部规律与整体规律之间就存在一定的差异,但也存在一定的统一性;
3.利用局部规律之间的“对立统一”的特性,我们就能够在参数移动过程中改变参数移动方向,从而避免局部最小值或者鞍点陷阱。
定义:将梯度下降的“每次带入全部数据进行计算”改成了“每次带入一条数据进行计算”
特性:迭代结果震荡特性,不同的损失函数“要求”不同的迭代方向,不同数据之间规律的差异性,最后参数陷入了“进退两难”的境地,由于这种结果震荡,当整体损失函数存在局部最小值,但某条数据在该点的梯度不为0,参数就会跨过局部最小值点。但方向不一致的代价是容易会造成整体损失函数在收敛过程不断波动,最终无法收敛到一个稳定的点,要改进这一问题则需要借助额外优化手段。
定义:所谓小批量梯度下降,其实就是对随机梯度下降过程稍作修改——每次不在是带入一条数据进行计算,而是带入batch_size条数据进行计算。随机梯度下降的计算过程还是“过于”随机了,在确保一定程度随机性的基础上增加一些算法的稳定性。