在上一篇里讲到,求最优化目标的常用方法有梯度下降法和标准方程法和其它一些高级算法。这里重点介绍梯度下降法和标准方程法。
批量梯度下降法
梯度下降法是一个用来求函数最小值的算法,梯度算法的思想是:随机选择一个参数的组合 ( θ 0, θ 1, θ 2…) 计算代价函数,然后寻找下一个能让代价函数值下降最多的参数组合,直到找到一个局部最优解。选择不同的初始参数,可能会找到不同的局部最小值。梯度下降算法是很常用的算法,它可以被用于很多算法的最优化求解问题上。这里介绍的是批量梯度下降算法,之所以叫批量梯度下降法,是因为在梯度下降的每一步中,我们都用到了所有的训练样本。
从数学公式中可以知道切线方向往往是下降最快的方向,因此这里引入了偏导数,用来求梯度下降最快的方向。由于需要不停的更改参数 θ ,下面给出了更新 θ 值的迭代公式:
θj:=θj−α∂∂θj J(θ)
其中::=表示赋值语句。 α 表示学习率,它决定了代价函数沿着下降最快方向下降的速度。
在梯度下降算法中,注意参数 θ 需要同时更新,不然单独一个参数 θj 的更新 会导致代价函数改变,从而导致其余参数更新错误。以两个参数为例,正确的更新方式如下:
temp0:=θ0−α∂∂θ0 J(θ0,θ1)
temp1:=θ1−α∂∂θ1 J(θ0,θ1)
θ0:=temp0
θ1:=temp1
1、单变量线性回归使用梯度下降算法迭代
迭代公式为:
∂∂θjJ(θ0,θ1)=∂∂θj12m∑mi=1(hθ(x(i))−y(i))2
单变量线性回归算法有两个参数,这里分别进行考虑。
当 j=0 时:
∂∂θ0 J(θ0,θ1)=1m∑mi=1(hθ(x(i))−y(i))
当 j=1 时:
∂∂θ1 J(θ0,θ1)=1m∑mi=1((hθ(x(i))−y(i))⋅x(i))
把两种情况合在一起,总结得到:
Recept {
θ0:=θ0−α1m∑mi=1(hθ(x(i))−y(i))
θ1:=θ1−α1m∑mi=1((hθ(x(i))−y(i))⋅x(i))
}
2、多变量线性回归使用梯度下降算法迭代
迭代公式为:
Recept {
θj:=θj−α∂∂θj J(θ0,θ1…θn)
}
带入代价函数得到:
Recept {
θj:=θj−α∂∂θj 12m∑mi=1(hθ(x(i))−y(i))2
}
分情况考虑: j=0 和 j≠0 。将上式计算化简后得到:
Recept {
j=0 时: θ0:=θ0−α1m∑mi=1(hθ(x(i))−y(i))
j≠0 时: θj:=θj−α1m∑mi=1((hθ(x(i))−y(i))⋅x(i)j)
}
3、使用梯度下降算法需要做的处理
(1)均值归一化
有时候,由于各个特征之间取值范围差距较大,从代价函数的等高线图能看到图像会比较扁平,梯度下降算法需要非常多次的迭代才会收敛,而且会存在误差。解决的办法是尝试将所有特征的尺度都尽量缩放到-1到1之间。最简单的解决方法是:
xn=xn−μnsn
其中: μ n 是平均值, sn 是标准差。
当然尺度相差较小的特征可以忽略,比如特征原来的取值范围是-2到2,就没有必要进行均值归一化了。需要注意的是:如果采用多项式回归模型,在运行梯度下降算法前,特征缩放是必须的。
举个栗子,以房屋的面积与房屋的个数作为两个特征,可以看到未经归一化的代价函数等高线图像比较扁平,使用梯度下降算法的迭代次数较多;而归一化处理后的代价函数等高线图像比较圆,使用梯度下降算法的迭代次数较少,算法的速度也会更快。
(2)学习率的选择
学习率α决定了代价函数沿着下降最快方向下降的速度。α越大,下降速度越快,如果α太大,那么梯度下降法可能会越过最小值,甚至使代价函数越来越大,直到无法收敛;α越小,下降速度越慢,如果α太小,它会需要非常多步迭代才能达到局部最小值,所以学习率的选择很重要。
一般采取的办法是取不同的学习速率,相邻两个速率相差3倍,直到取到比较合适的为止。例如:
α =0.01,0.03,0.1,0.3,1,3,10
在梯度下降算法中,当接近局部最小值时,代价函数的斜率(也就是导数)会越来越小,梯度下降法主动采取更小的幅度,逐步接近最小值,因此没有必要再减小α,只选择一个固定值就可以。
正规方程法
正规方程提供了一种解析的方法来求参数,可以一次性求到 θ 的最优值。
其方法是,对代价函数 J 求导数,使其导数为0的θ值,就是最优值。
∂∂ θ jJ(θj)=0
这样的方法计算过于复杂。使用矩阵的方法将其化简,在特征矩阵中增加一个特征x_0=1,标记为矩阵X,输出变量为向量Y,利用正规方程解出向量θ:
θ =(XTX)−1XTy
使用正规方程法不需要归一化特征变量,但是偶尔会出现X^T X不可逆的情况,这种可能性极小。有时可以使用伪逆函数(比如MATLAB里的pinv()函数)来对不可逆的矩阵求逆。一般的解决方法是:
如果是特征变量重复造成的不可逆,这时可以删除多余的特征向量。
如果是训练样本数远远小于特征向量数造成的不可逆,处理方法也是删除一些特征向量。
梯度下降法与正规方程的比较
当特征变量较少时,正规方程法计算参数θ比较简单;当特征变量较多时(大于一万),正规方程的计算量会过大,一般还是选择梯度下降法。
正规方程法使用范围较小,像逻辑回归算法等并不适用,所以一般还是用梯度下降法比较多。但对于特征的线性回归问题,正规方程法会比梯度下降法更快。