一、什么是梯度下降法
梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。
二、算法分析
在上一篇最小二乘法里面还记得我们的误差公式E(θ)吗?那时候我们说要使E(θ)尽可能小,即修改参数 θ,使这个值变得越来越小。
但是一边修改 θ 的值,一边 计算 E(θ) 并与之前的值相比较的做法实在是太麻烦了。所以我们使用微分的思想来求θ 的值。微分是计算变化的快慢程度时使用的方法。
首先我们看表达式为 g(x) = (x-1)^2,g(x) = (x-1)^2 的二次函数图像如下所示
它的最小值是 g(x) = 0,出现在x = 1 时。这个二次函数的增减表为:
在 x < 1 时,g(x) 的图形 向右下方延伸,反之当 x > 1 时,g(x) 的图形向右上方延伸,换句话说就是从左下方开始延伸的。 x = 3 这一点,为了使 g(x)的值变小,我们需要向左移动x,也就是必须减小 x。如果是在另一侧的 x = −1 这一点,为了使 g(x) 的值变小,我们 需要向右移动 x,也就是必须增加 x。
所以只要向与导数的符号相反的方向移动 x,g(x) 就会自然而然地沿着最小值的方向前进了。也就是自动更新参数。
上面所说的就是最速下降法或者说是梯度下降法,用数学语言表达就是:
像A := B 这种写法,它的意思是通过 B 来定义 A。上面的意思就是将后面的值来定义前面的值,从而达到更新参数的目的,即用上一个 x 来定义新的 x。
η是称为学习率的正的常数,读作“伊塔”。根据学习率的大小, 到达最小值的更新次数也会发生变化。换种说法就是收敛速度会 不同。有时候甚至会出现完全无法收敛,一直发散的情况。
那我们回过头来看一下目标函数 E(θ)。我们再看一下目标函数的表达式:
fθ(x)拥有 θ0 和 θ1 两个参数。 也就是说这个目标函数是拥有 θ0 和 θ1 的双变量函数,所以不能用 普通的微分,而要用偏微分。如此一来,更新表达式就是这样的:
这里的E是没有 θ0,是因为θ0 在 fθ(x)里面,所以这里可以使用复合函数的微分:
是不是特别熟悉,这是 我们大一高数上面的阶梯微分。先从 u 对 v 微分的地方开始计 算:
下面就是 v 对 θ0 进行微分:
合在一起,记得v 替换回fθ(x):
同样我们也可以得到 对θ1进行微分:
所以参数 θ0 和 θ1 的更新表达式就是这样的:
只要根据这个表达式来更新 θ0和 θ1,就可以找到正确的一次函数 fθ(x)了!
三、总结
梯度下降是通过迭代搜索一个函数极小值的优化算法。使用梯度下降,寻找一个函数的局部极小值的过程起始于一个随机点,并向该函数在当前点梯度(或近似梯度)的反方向移动。在线性和对数几率回归中,梯度下降可以用于搜索最优参数。至于SVM和神经网络,我们之后才考虑。