机器学习面试:牛顿法为什么比梯度下降法更快

本文探讨了为什么牛顿法在机器学习中比梯度下降法更快。首先解释了梯度下降法求极值的原理,通过泰勒展开式和方向导数阐述了梯度的概念。接着,介绍了牛顿法的定义,通过二阶泰勒展开式展示牛顿法如何更准确地逼近函数极值。最后,通过比较一阶和二阶泰勒展开式,说明牛顿法在函数拟合上的优势,从而解释了其速度更快的原因。
摘要由CSDN通过智能技术生成

梯度下降或者牛顿法本质都是通过迭代的方式逼近最值,而迭代的目标则是找出下一个逼近最值的位置,梯度下降法是根据一阶梯度来确定下一个位置,而牛顿法则是根据二阶梯度来确定下一个位置。

泰勒展开式就是使用多项式函数在 x 0 x_0 x0处逼近函数 f ( x ) f(x) f(x),即在 x 0 x_0 x0 f ( x ) f(x) f(x)等于泰勒展开式。虽然是废话,但是一定要好好思考,这个才是核心

1. 梯度下降法为什么可以求极值

a. 梯度的定义

我们通常称在函数 f ( x ) f(x) f(x)某个点上 x 0 x_0 x0的变化率为导数,通常可以求出这个点的切线,一般叫斜率,即
f ′ ( x 0 ) = l i m Δ y Δ x = l i m f ( x 0 + Δ x ) − f ( x 0 ) Δ x f'(x_0)=lim \frac{\Delta y}{\Delta x}=lim\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x} f(x0)=limΔxΔy=limΔxf(x0+Δx)f(x0)
对于多元函数,则是称之为方向导数,想象一下二维函数 z = f ( x , y ) z=f(x,y) z=f(x,y),这是一个曲面,在某个点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)可以求一个切面,每个方向都可以求一个斜率,假如求方向夹角为 α \alpha α的变化率
l i m f ( x 0 + t c o s α , y 0 + t s i n α ) − f ( x 0 , y 0 ) t = f x ( x 0 , y 0 ) c o s α + f y ( x 0 , y 0 ) s i n α \begin{aligned} lim\frac{f(x_0+tcos\alpha,y_0+tsin\alpha)-f(x_0,y_0)}{t}&=f_x(x_0,y_0)cos\alpha+f_y(x_0,y_0)sin\alpha \end{aligned} limtf(x0+tcosα,y0+tsinα)f(x0,y0)=fx(x0,y0)cosα+fy(x0,y0)sinα
g = [ f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) ] \pmb{g}=[f_x(x_0,y_0),f_y(x_0,y_0)] g=[fx(x0,y0),fy(x0,y0)], e = [ c o s α , s i n α ] \pmb{e}=[cos\alpha,sin\alpha] e=[cosα,sinα]
那么有
f x ( x 0 , y 0 ) c o s α + f y ( x 0 , y 0 ) s i n α = g ∗ e = ∣ g ∣ ∣ e ∣ c o s θ = ∣ g ∣ c o s θ f_x(x_0,y_0)cos\alpha+f_y(x_0,y_0)sin\alpha=\pmb{g}*\pmb{e}\\=|\pmb{g}||\pmb{e}|cos\theta=|\pmb{g}|cos\theta fx(x0,y0)cosα+fy(x0,y0)sinα=ge=g∣∣ecosθ=gcosθ
其中, θ \theta θ g \pmb{g} g e \pmb{e} e 的夹角, α \alpha α是我们求某个斜率的方向。那么我们该如何确定 α \alpha α使得变化率最大呢?
( x 0 , y 0 ) (x_0,y_0) (x0,y0)确定的时候, g \pmb{g} g也就确定了,所以

  • θ = 0 \theta=0 θ=0时, e \pmb{e} e g \pmb{g} g的方向相同,此时变化率最大,且为正
  • θ = π \theta=\pi θ=π时, e \pmb{e} e g \pmb{g} g的方向相反,此时变化率最大,且为负

通过 g \pmb{g} g就可以确定 α \alpha α了,这两个是等价的。实际使用中,我们称 g \pmb{g} g为梯度。
现在应该就明白为什么说梯度是函数某个点变化最大最快的方向了吧。

b. 泰勒展开式

然后看一阶泰勒展开式
f ( x 0 + Δ x ) = f ( x 0 ) + f ′ ( x 0 ) Δ x f(x_0+\Delta x)=f(x_0)+f'(x_0) \Delta x f(x0+Δx)=f(x0)+f(x0)Δx
为了求极小值,我们希望找到的下一个 x ′ = x 0 + Δ x x'=x_0+\Delta x x=x0+Δx可以使 f ( x ) f(x) f(x)变小,因此希望有
f ( x 0 + Δ x ) = f ( x ′ ) < = f ( x 0 ) f(x_0+\Delta x)=f(x')<=f(x_0) f(x0+Δx)=f(x)<=f(x0)
将一阶泰勒展开式带入
f ′ ( x 0 ) Δ x = f ( x 0 + Δ x ) − f ( x 0 ) < = 0 f'(x_0) \Delta x=f(x_0+\Delta x)-f(x_0) <= 0 f(x0)Δx=f(x0+Δx)f(x0)<=0

所以只有当 f ′ ( x ) f'(x) f(x) Δ x \Delta x Δx的符号相反,才能保证有 f ′ ( x 0 ) Δ x < 0 f'(x_0) \Delta x <0 f(x0)Δx<0,做一个简单的变换 Δ x = − λ f ′ ( x 0 ) \Delta x=-\lambda f'(x_0) Δx=λf(x0),这个变换保证了符号相反,并且要求 λ > 0 \lambda>0 λ>0 λ \lambda λ是实时变化的,无法确定,但是在使用中,我们通常会给一个很小的值,就是梯度下降法中的步长。

在这里插入图片描述

梯度的方向为什么是函数值增加最快的方向?


2. 牛顿法为什么比梯度下降法更快

a. 牛顿法的定义

一阶牛顿法主要是求0值,二阶牛顿法是求极值,所以一般在机器学习中说的牛顿法主要是指二阶的。我们使用二阶泰勒展开式
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 f(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{1}{2}f''(x_0)(x-x_0)^2 f(x)=f(x0)+f(x0)(xx0)+21f′′(x0)(xx0)2
根据极值的定义 f ′ ( x ) = 0 f'(x)=0 f(x)=0,我们对x进行求导
0 = f ′ ( x ) = f ′ ( x 0 ) + f ′ ′ ( x 0 ) ( x − x 0 ) 0=f'(x)=f'(x_0)+f''(x_0)(x-x_0) 0=f(x)=f(x0)+f′′(x0)(xx0)
可以得到牛顿法的更新公式
x = x 0 − f ′ ( x 0 ) f ′ ′ ( x 0 ) x=x_0-\frac{f'(x_0)}{f''(x_0)} x=x0f′′(x0)f(x0)
多维度的情况就不做推导了,需要查一下资料。

b. 为什么牛顿法更快

从下面两个图可以看到,梯度下降法使用的一阶泰勒展开式,可以认为是在 x 0 x_0 x0处使用线性函数在拟合。按照斜率方向更新x。而牛顿法呢?使用的是二阶泰勒展开式,相当于是使用一个二阶函数在 x 0 x_0 x0处进行函数拟合。求梯度时,直接找到了更优的点。
举个极端的例子。如果我们的函数就是二阶的,如果使用梯度下降法,依然需要一步一步逼近,但是当我们使用牛顿法的时候,相当于直接求出了这个函数的极值点,一次更新就可以了。
梯度下降法

牛顿法

梯度下降法家族、牛顿法家族、拟牛顿家族

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值