在网上能够搜到很多关于梯度下降算法的文章,但找了几篇发现推导都不能很好的理解(也可能是愚生数学功底差),本文将着重从数学角度讲述一下梯度下降算法的数学推导。
梯度下降算法理论
梯度下降算法源自于线性回归模型的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(θ)