一. 梯度下降:
1.为什么需要梯度下降算法:
梯度下降其实是一种基于搜索的最优化方法。梯度下降优化算法,其作用是用来对原始模型的损失函数进行优化,以便寻找到最优化的参数,使得损失函数的值最小。
梯度下降算法作为一个聪明很多的算法,抓住了参数与损失值之间的导数,也就是能够计算梯度(gradient),通过导数告诉我们此时此刻某参数应该朝什么方向,以怎样的速度运动,能安全高效降低损失值,朝最小损失值靠拢。
2.什么是梯度:
多元函数的导数就是梯度,分别对每个变量进行微分。
3.理解梯度下降算法:
简单来说就是,随机选择一个方向,然后每次迈步都选择最陡的方向。直到这个方向上能达到的最低点。
为什么要梯度要乘以一个负号?我们已经知道:梯度的方向就是损失函数值在此点上升最快的方向,是损失增大的区域,而我们要使损失最小,因此就要逆着梯度方向走,自然就是负的梯度的方向,所以此处需要加上负号
梯度算法有一个比较致命的问题:
从理论上,它只能保证达到局部最低点,而非全局最低点。在很多复杂函数中有很多极小值点,我们使用梯度下降法只能得到局部最优解,而不能得到全局最优解。那么对应的解决方案如下:首先随机产生多个初始参数集,即多组;然后分别对每个初始参数集使用梯度下降法,直到函数值收敛于某个值;最后从这些值中找出最小值,这个找到的最小值被当作函数的最小值。当然这种方式不一定能找到全局最优解,但是起码能找到较好的。
二. 3种梯度下降法:
1.批量梯度下降BGD(Batch gradident descent)
优点:全局最优解,易于并行实现。
缺点:当样本数据很多时,计算量开销大,计算速度慢。
2.随机梯度下降法SGD(stochastic gradient descent):每次迭代使用一个样本。
优点:计算速度快。
缺点:收敛性能不好。
3.小批量梯度下降法MBGD(Mini-batch gradient descent):每次更新时使用一小部分数据来计算
优点:减少了计算的开销量,降低了随机性。