原文:http://cs229.stanford.edu/notes/cs229-notes1.pdf
开始之前,我们先想一下牛顿法去求函数零点。假如我们有一些函数 f:R↦Rf:R↦R, 接着我们希望找到一个 θθ ,满足 f(θ)=0f(θ)=0,其中 θ∈Rθ∈R 是一个实数。牛顿法就是对 θθ 进行如下的更新:
θ:=θ−f(θ)f′(θ)θ:=θ−f(θ)f′(θ)
这个方法可以很自然地进行解释,我们可以把它理解成:在当前猜测的 θθ 值处用一个线性函数来对近似表示函数 ff ,即这条直线是 f 的切线,找到当前线性函数等于零的点,把这一个零点作为 θθ 的下一次猜测值,然后依次类推。
下面是牛顿法实际操作中的图像:
在第一幅图中,我们看到函数 ff 在 y=0y=0 处画了一条直线,而我们想找到 θθ 使得 f(θ)=0f(θ)=0 ;满足要求的 θθ 值大概在 1.3 处。假设我们的算法初始化 θ=4.5θ=4.5 ,根据牛顿法,在 ff 上θ=4.5θ=4.5 处作一条切线,找出计算结果为0的点,如下图所示:
那么大概在 2.8 的位置,就是我们下一个猜测的 θθ 值,然后重复步骤得到新的 θθ 在1.8 处。
在一定次数的迭代后,我们就能迅速地得到 θ=1.3θ=1.3.
牛顿法的给出的解决思路是让f(θ)=0f(θ)=0。如果我们想要利用它来最大化一些函数 ll 呢?函数 ll 的最大值的点应该对应着它的导数 l′(θ)l′(θ) 等于零的点。所以通过令f(θ)=l′(θ)f(θ)=l′(θ),我们就可以同样用牛顿法来找到 ll 的最大值,然后得到下面的更新规则:
θ:=θ−l′(θ)l′′(θ)θ:=θ−l′(θ)l″(θ)
(再思考一下: 如果要用牛顿法来求一个函数的最小值而不是最大值,该怎么修改?)
最后,在咱们的logistic回归问题背景中,θθ 是一个有值的向量,所以我们要对牛顿法进行扩展来适应这个情况。牛顿法进行扩展到多维情况,也叫牛顿-拉普森法(Newton-Raphson method),如下所示:
θ:=θ−H−1∇θl(θ)θ:=θ−H−1∇θl(θ)这里的 ∇θl(θ)∇θl(θ) 和之前提过的一样,是 l(θ)l(θ) 关于 θiθi 的偏导数向量;HH 是一个 n×nn×n 矩阵 (实际上如果包含截距项的话,应该是n+1×n+1n+1×n+1矩阵),也叫作 Hessian ,由下面的式子定义:
Hij=∂2l(θ)∂θi∂θjHij=∂2l(θ)∂θi∂θj
牛顿法通常都能比(批量)梯度下降法收敛得更快,而且达到最小值所需要的迭代次数也少很多。然而,牛顿法中的单次迭代往往要比梯度下降法耗费更多的性能开销,因为要查找和转换一个n×nn×n 的 Hessian矩阵;不过只要这个 n 不是太大,牛顿法通常就还更快一些。当用牛顿法来在逻辑回归中求似然函数 l(θ)l(θ) 的最大值的时候,得到这一结果的方法也叫做 Fisher scoring.