梯度下降法被用于求解局部最小值的基本方法,有几种形式:BGD(Batch gradient descent),SGD(Stochastic gradientdescent),MBGD(Mini-batch gradient descent)。另外还有一种更高效的方法牛顿法。牛顿法在提高效率上的代价,是在每一次迭代计算中要计算Cost Function的Heissian矩阵的逆矩,这对于数据量较大的情况,简直是噩梦。
牛顿法下,每一步的迭代:
Heissian矩阵,在这里就是h()的二次导
相比梯度下降法的计算难度较低,但是迭代的次数较大。另外还有一种弊端,就是在越逼近局部极小值的时候,迭代步值就越小,从而导致收敛的速度越来越慢。
为了提高收敛的速度而引入了一种方法叫Feature scaling,具体的思想是将输入的特征变量进行归一化,降低特征变量在尺度上的差异。说到这里,让我们从头来捋一下线性回归:
假设有n组数据(Xn,Yn),其中X=[1,x1,x2,x3,…,xn]。则拟合函数为:
其中
则只要求得θ使得Cost Function的值最小,此时的拟合函数就是局部最佳拟合。
Cost Function:
令每一次迭代:
在这里,我认为α值是影响迭代效率的关键值,即使是将输入特征归一化,在临近局部最小值时,也会速率大大减慢。常规下,α的值是常数,但如果在开始|∇J(θ)|较大时,我们使α足够小,使递减的步子不至于过大,在|∇J(θ)|较小时,使α足够大,能快速的逼近局部最小值。那么就可以提高递减的速率。
由于α是随∇J(θ)变化,我们可以假设:
这里我让G(∇J(θ))~,让μ=0。
则 a为常量,用于伸缩α的幅度。
经过测试,这种方式可以很好的提高拟合的速度。这里就不贴上代码。
以上为个人看法,有雷同,只是巧合。
引用:
梯度下降:https://blog.csdn.net/kwame211/article/details/80364079
Featrue Scaling:https://www.cnblogs.com/ooon/p/4947347.html