在网上能够搜到很多关于梯度下降算法的文章,但找了几篇发现推导都不能很好的理解(也可能是愚生数学功底差),本文将着重从数学角度讲述一下梯度下降算法的数学推导。
梯度下降算法理论
梯度下降算法源自于线性回归模型的cost function 最小值计算,在线性回归中,我们通过一个拟合函数:
h(θ)=θ0+θ1∗x1
,然后计算cost function:
J(θ)=12m∑i=0m(hθ(x)−y)2
很明显这是计算在某一个 θ 向量取值的时候,所得拟合函数在每组数据 x 上的计算值与其实际值
看过Andrew Ng视频的人肯定知道,梯度下降算法的原理,就是通过计算 J(θ) 的导数,通过寻找导数最小值的方式,来决定 J(θ) 的下降方向,在不断的迭代之后,即可找到 J(θ) 的最小值。以下就是 J(θ) 的求导计算:
J(θ)′=(12m∑i=0m(hθ(x)−y)2)′=12m(∑i=0m(hθ(x)−y)2)′=12m2(hθ(x)−y)∑i=0m(hθ(x)−y)′=1m(hθ(x)−y)∑i=0m(hθ)′=1m(hθ(x)−y)∑i=0m(θ0+θ1x1+θ2x2+...+θn)′
所以:
J(θj)′=1m(hθ(x)−y)∑i=0m(θ0+θ1x1+θ2x2+...+θn)′=1m(hθ(x)−y)xj
在梯度下降算法中,我们需要不断收敛各个
θj
,寻找
J(θ)
的最小值。
θj
在其导数方向上减少(下降),即可使得
J(θ)
达到最小值,最后当
J(θ)
收敛时,则停止
θj
的计算。具体如下:
θ
取随机值(初始值)
repeat:
计算
h(θ)
,将第一个样本数据y代入,更新
θj
-=
(h(θ)−y)θj
,更新每个
θj
,然后把剩下的数据代入,得到一组新的
θ
计算各组数据在新的
θ
下的
h(θ)
值与实际值y的误差,当误差小于阈值时.
停止repeat。
完成计算,得到拟合函数
h(θ)