在有了预测函数和测量它与数据匹配度的方法之后,我们需要评估预测函数中的参数。所以就有了梯度下降算法。
想象我们用预测函数产生的θ0和θ1来画预测函数(事实上,我们用参数评估函数来描绘代价函数)。我们并不是在描绘x和y本身,而是预测函数的参数范围和已选择的特定参数集的代价值。(其实就是用一组参数(θ0, θ1)作为x和y,代价评估值作为z。)
图中的点使用该组θ参数得到的代价函数的值。
我们要求解的最小代价值,其实就是图中的最低点(深蓝色), 当然包括局部最低点和全局最低点。(就是一小范围内的最低点和所有最低点中的最低点)。
这么做的方法就是对代价函数求导(取函数正切值)。正切值的斜率就是该点的导数,这也是在图中移动的方向。(把图想象成一座山峰,寻找最低点就是在寻找下山的路)每次都朝着最陡峭的方向移动,每步的大小取决于参数α,叫做学习速率。
举例而言,图中每个星星的距离代表着每一个由α决定大小的步子。α越小,每个星星之间的距离越小;α越大,每个星星之间的距离越大。而这个步子的方向则取决于J(θ0,θ1)的偏导。每个下山路径都会的由于起点不同而导致有不同的终点。如上图就有两个终止于不同地方的两个不同的起点。
梯度下降算法
repeat until convergence:
公式
where
j=0,1 represents the feature index number.
公式: ** θj:=θj−α(∂/∂θj)J(θ0,θ1) **
'j'的每次迭代,都需要同步更新(θ0,θ1,...θn)参数。在计算前更新某个θ参数会导致产生错误算法。
单参数梯度下降
公式: ** θ1:=θ1−α(d/dθ1)J(θ1) **
不管(d/dθ1)J(θ1) 的符号是正是负。如下图所示,当斜率为负时,θ1的值增加;当斜率为正的时候,θ1的值减少。
梯度下降算法应该在合适的时候收敛,无法收敛或者收敛时间过长都意味着步幅是错误的(α错误)
α的值是固定的,梯度下降是如何收敛的?
事实上,当我们接近凸函数的底部的时候,d/d接近0的时候。在最小值的时候,导数为0。所以:** θ1:=θ1−α∗0**
线性回归的梯度下降
在线性回归中,梯度下降会有一个新的形式。把实际的代价函数和预测函数替换修改,就会得到下述等式。
m
是训练集的大小,θ0是同步改变的常量, X1,X2是训练集的数据。
因为h(θ)=θ0+θ1Xj,所以对J(θ0,θ1)= Σ(hθ(xi)-yi)偏导, 得到上述两条公式。
举例说明θ1:
这样做的意义是从一个猜测开始,重复地应用梯度下降等式,我们的预测函数(Hypothesis)会变得越来越准确。所以这就是基于最初的代价函数J的简单梯度下降函数。
这个方法在每一步都会遍历整个训练集,所以叫做“批”梯度下降算法。
注意,**梯度下降总体上容易受到局部最小值的影响,但是我们这里的线性回归只有一个全局,没有其它的局部,所以这个最小值就是最优解。因此梯度下降对于全局最小值来说总是收敛的(假设学习速率α没有太大)。
椭圆显示的二次方程的轮廓图。轨迹是梯度下降的步骤。它初始化在(48,30)。