梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影) 您所在的位置:网站首页 偏导数求积分怎么求 梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影)

梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影)

2024-07-13 04:19| 来源: 网络整理| 查看: 265

1. 写在前面

这篇文章, 再来对梯度下降算法进行一个小的回顾, 梯度下降算法是求解无约束多元函数极值最常用的数值方法, 很多机器学习常用算法和神经网络都是以它作为算法框架进行优化参数。 所以这个算法非常重要。

这篇文章会有两大部分组成, 第一部分是一些概念的介绍, 第二部分是一个说法背后的原因, 围绕着下面的两张Photos进行一些细节的补充:

在这里插入图片描述 这张Photos里面提到了几个概念, 第一个就是凸函数的概念, 第二个是导函数的概念, 第二个是梯度的概念, 当然再加一个方向导数的概念作为第一部分, 也就是概念方面的介绍。 第二张Photo在说为啥梯度下降方法会有效:

在这里插入图片描述 这两张图片里面都提到了一个说法负梯度方向是 f ( x ) f(x) f(x)减小最快的方向, 可是我们有想过这是为啥吗? 这背后竟然会有泰勒的身影, 所以第二部分就来看看这个问题, 简单推导一下为啥是负梯度方向。

大纲如下

概念简单介绍负梯度方向下降最快的原因几种常见的梯度下降法 2. 概念的简单介绍 2.1 凸函数

在第一张图片中, 我们看到了一些概念, 这里进行简单的回归, 第一个就是凸函数, 之前看到一个公式: AI问题 = 模型 + 优化。 任何一个优化问题(参数求解过程), 都可以写成如下的形式: 这个东西在统计学习方法的公式推导中, 可是非常常见的, 很多机器学习模型都是先有个目标函数, 然后下面加一些约束, 基于这些构造拉格朗日函数, 然后试图去求参数, 再涉及到稍微复杂一些的还会把拉格朗日函数的形式转换一下等, 当然这里面往往也是会要求函数 f 0 ( x ) f_0(x) f0​(x)要是一个凸函数, 满足KKT条件等, 才能进行求解。

那么, 什么样的函数是凸函数呢? 在介绍凸函数之前, 得先了解一个概念叫做凸集

假设对于任意 x , y ∈ C x, y \in C x,y∈C并且任意参数 α ∈ [ 0 , 1 ] \alpha \in[0,1] α∈[0,1], 我们有 α x + ( 1 − α ) y ∈ C \alpha x+(1-\alpha)y\in C αx+(1−α)y∈C, 则集合为凸集。

这是在说啥呢? 其实,就是假如我们有一个很大的集合, 在里面任意找两个点, 只要在这两点之间的连线上的所有点都在这个集合里面, 那么这个集合就是凸集。比如: 在这里插入图片描述 当然, 两个凸集的交集也会是凸集, 凸集的例子非常常见。 有了凸集之后, 我们就可以定义凸函数了:

函数的定义域是凸集, 对于定义域里面的任意 x , y x, y x,y, 函数满足 f ( θ x + ( 1 − θ ) y ) ≤ θ f ( x ) + ( 1 − θ ) f ( y ) f(\theta x+(1-\theta) y) \leq \theta f(x)+(1-\theta) f(y) f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y),则函数是凸函数

这个就是凸函数的定义, 这个公式说的啥意思呢? 在这里插入图片描述 后面那部分就是那条蓝色的线上的而所有点, 而前面那部分是蓝色下面黑色的曲线上的所有点, 因为我们知道表示直线的话可以写成这种形式 θ ( x ) + ( 1 − θ ) y \theta(x)+(1-\theta)y θ(x)+(1−θ)y,表示的是xy这两点之间的这条直线上的所有点, 而加上 f ( ) f() f()之后, 代表的就是 x y xy xy两点间的点的函数值, 也就是黑色曲线上的点。 所以这个函数就是在说在函数的 x x x轴上任取两个点 x , y x,y x,y, 他们之间连线上的任何一点的函数值都小于或者等于 f ( x ) 和 f ( y ) f(x)和f(y) f(x)和f(y)两点连线之后线上的某一点的值。这时候的函数就是凸函数。 注意这里凸函数的定义和我们数学书上的凸函数定义正好相反, 不要混了 典型凸函数: e x , − l o g x , x l o n g x e^x, -logx, xlongx ex,−logx,xlongx。

上面是凸函数的定义, 下面给出两个证明函数是凸函数的定理:

假设 f f f: R n − > R R^n->R Rn−>R是可导的, 则 f f f为凸函数, 当且仅当 f ( y ) ≥ f ( x ) + ∇ ( x ) T ( y − x ) f(y) \geq f(x)+\nabla(x)^{T}(y-x) f(y)≥f(x)+∇(x)T(y−x)对于任意 x , y ∈ d o m f x,y\in domf x,y∈domf 这个式子表达的意思就是我在函数的某个点上画条切线, 这条切线永远在函数的下方。函数的一阶导数满足这个条件, 就是凸函数。Like this: 在这里插入图片描述 如果是从二阶导数的角度来看的话, 如果 f : R n − > R f: R^n->R f:Rn−>R是两次可导的, 则 f f f是凸函数, 当且仅当: ∇ 2 f ( x ) ≥ 0 \nabla^{2} f(x) \geq 0 ∇2f(x)≥0对于任意的 x , y ∈ d o m f x,y \in domf x,y∈domf

线性回归函数是凸函数, 故这个就可以使用梯度下降法进行参数的更新。 有了凸函数的概念, 我们基于这个再看看导数。

2.2 导数与偏导数

关于导数,刻画的是一元函数在某一点处的函数变化率, 设函数 y = f ( x ) y=f(x) y=f(x)在 x 0 x_0 x0​某个邻域内有定义,如果当 Δ y Δ x \frac{\Delta y}{\Delta x} ΔxΔy​在当 Δ x − > 0 \Delta x->0 Δx−>0的极限存在, 则称函数在 x 0 x_0 x0​可导, 这个极限就是函数在点 x 0 x_0 x0​的导数 f ′ ( x 0 ) = lim ⁡ Δ x → 0 Δ y Δ x = lim ⁡ Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x f^{\prime}\left(x_{0}\right)=\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x} f′(x0​)=Δx→0lim​ΔxΔy​=Δx→0lim​Δxf(x0​+Δx)−f(x0​)​ 在几何上, 导数其实有三层含义, 简单了解一下: 在这里插入图片描述 第一个含义就是在点 x 0 x_0 x0​处的斜率。 第二个含义是夹角的tan值, 第三个就是变化率。

而偏导数, 是在多元函数当中, 也就是自变量不是单纯的只有 x x x的时候, 这时候,设函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)的某一邻域有定义, 但 y y y固定与 y 0 y_0 y0​, 而 x x x在 x 0 x_0 x0​处有增了 Δ x \Delta x Δx, 相应的函数有增量 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) f\left(x_{0}+\Delta x, y_{0}\right)-f\left(x_{0}, y_{0}\right) f(x0​+Δx,y0​)−f(x0​,y0​), 如果 lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x \lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x, y_{0}\right)-f\left(x_{0}, y_{0}\right)}{\Delta x} Δx→0lim​Δxf(x0​+Δx,y0​)−f(x0​,y0​)​ 存在, 则称该极限为 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0, y_0) (x0​,y0​)处对 x x x的偏导数。

在这里插入图片描述

偏导数 f x ( x 0 , y 0 ) f_x(x_0,y_0) fx​(x0​,y0​)就是曲面被平面 y = y 0 y=y_0 y=y0​所截的曲线在 M 0 M_0 M0​处切线 M 0 T x M_0T_x M0​Tx​对 x x x轴的斜率偏导数 f y ( x 0 , y 0 ) f_y(x_0,y_0) fy​(x0​,y0​)就是曲面被平面 x = x 0 x=x_0 x=x0​所截的曲线在点 M 0 M_0 M0​处切线 M 0 T y M_0T_y M0​Ty​对 y y y轴的斜率 2.3 方向导数

定义导数、偏导数、方向导数都是说如果说某条件下极限存在,导数的本质是极限及代表函数的变化率,偏导数反映的是函数沿坐标轴方向的变化率,有所限制,所以引入方向导数表示沿任意一方向的变化率。

定义: 设 l l l是 x O y xOy xOy平面以 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0​(x0​,y0​)为始点的一条射线, e i = ( c o s α , c o s β ) e_i=(cos\alpha,cos\beta) ei​=(cosα,cosβ)是以射线同方向的单位向量: 在这里插入图片描述 射线 l l l的方程: { x = x 0 + t cos ⁡ α , t ≥ 0 y = y 0 + t cos ⁡ β , t ≥ 0 \left\{\begin{array}{l} x=x_{0}+t \cos \alpha, \quad t \geq 0 \\ y=y_{0}+t \cos \beta, \quad t \geq 0 \end{array}\right. {x=x0​+tcosα,t≥0y=y0​+tcosβ,t≥0​ 如果函数增量 f ( x 0 + t cos ⁡ α , y 0 + t cos ⁡ β ) − f ( x 0 , y 0 ) f\left(x_{0}+t \cos \alpha, y_{0}+t \cos \beta\right)-f\left(x_{0}, y_{0}\right) f(x0​+tcosα,y0​+tcosβ)−f(x0​,y0​)与 P P P到 P 0 P_0 P0​的距离 ∣ P P 0 ∣ = t |PP_0|=t ∣PP0​∣=t比值, 当点 P P P沿着 l l l趋于 P 0 P_0 P0​( t − > 0 + t->0^+ t−>0+)时的极限存在, 则称此极限为函数在点 P 0 P_0 P0​沿着方向 l l l的方向导数: ∂ f ∂ l ∣ ( x 0 , y 0 ) = lim ⁡ t → 0 + f ( x 0 + t cos ⁡ α , y 0 + t cos ⁡ β ) − f ( x 0 , y 0 ) t \left.\frac{\partial f}{\partial l}\right|_{\left(x_{0}, y_{0}\right)}=\lim _{t \rightarrow 0^{+}} \frac{f\left(x_{0}+t \cos \alpha, y_{0}+t \cos \beta\right)-f\left(x_{0}, y_{0}\right)}{t} ∂l∂f​∣∣∣∣​(x0​,y0​)​=t→0+lim​tf(x0​+tcosα,y0​+tcosβ)−f(x0​,y0​)​ 而如果函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0​(x0​,y0​)可微分, 那么这个方向导数还可以进一步化简为: ∂ f ∂ l ∣ ( x 0 , y 0 ) = f x ( x 0 , y 0 ) cos ⁡ α + f y ( x 0 , y 0 ) cos ⁡ β \left.\frac{\partial f}{\partial l}\right|_{\left(x_{0}, y_{0}\right)}=f_{x}\left(x_{0}, y_{0}\right) \cos \alpha+f_{y}\left(x_{0}, y_{0}\right) \cos \beta ∂l∂f​∣∣∣∣​(x0​,y0​)​=fx​(x0​,y0​)cosα+fy​(x0​,y0​)cosβ 这个的具体推导过程可以看下面给出的链接, 由全微分的公式化简得到的。

上面这是方向导数, 注意方向导数的本质是个数值,可能现在有些懵逼了, 讲这些概念到底在说啥, 不是梯度下降嘛? 还差一个梯度的概念, 就能把这一串知识串起来了。

2.4 梯度

在平面上确定某一点可能存在无数个方向导数,我们怎样找到其中一个方向导数来描述函数最大变化率?

设函数 f ( x , y ) f(x,y) f(x,y)在平面区域 D D D内具有一阶连续偏导数, 对于每一点 P 0 ( x 0 , y 0 ) ∈ D P_0(x_0,y_0)\in D P0​(x0​,y0​)∈D, 都可以给出一个向量 f x ( x 0 , y 0 ) i + f y ( x 0 , y 0 ) j f_{x}\left(x_{0}, y_{0}\right) i+f_{y}\left(x_{0}, y_{0}\right) j fx​(x0​,y0​)i+fy​(x0​,y0​)j, 其中 i , j i,j i,j是 x , y x,y x,y轴上的方向向量, 我们把上面这个表示称为函数在 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0​(x0​,y0​)的梯度, 记为: grad ⁡ f ( x 0 , y 0 ) = f x ( x 0 , y 0 ) i + f y ( x 0 , y 0 ) j \operatorname{grad} f\left(x_{0}, y_{0}\right)=f_{x}\left(x_{0}, y_{0}\right) i+f_{y}\left(x_{0}, y_{0}\right) j gradf(x0​,y0​)=fx​(x0​,y0​)i+fy​(x0​,y0​)j 当然, 坐标表示的话就是 ( f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) ) \left(f_{x}\left(x_{0}, y_{0}\right), f_{y}\left(x_{0}, y_{0}\right)\right) (fx​(x0​,y0​),fy​(x0​,y0​)), 这个就是梯度了, 如果我们的自变量不止两维的话, 在机器学习中参数往往会有很多(特征的个数), 那么梯度就是一个向量, 每个元素就是 f f f对每个自变量的偏导数。

由梯度的定义可以发现, 梯度的方向是确定的, 如果点 P P P的坐标确定, 那么梯度的大小也会确定。 那么根据上面方向导数的那个公式, 就可以再进一步化简:

如果函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0​(x0​,y0​)可微分, e l = ( c o s α , c o s β ) e_l=(cos \alpha, cos \beta) el​=(cosα,cosβ)是方向 l l l的方向向量,则: ∂ f ∂ l ∣ ( x 0 , y 0 ) = f x ( x 0 , y 0 ) cos ⁡ α + f y ( x 0 , y 0 ) cos ⁡ β = grad ⁡ f ( x 0 , y 0 ) ⋅ e l = ∣ grad ⁡ f ( x 0 , y 0 ) ∣ cos ⁡ θ \left.\frac{\partial f}{\partial l}\right|_{\left(x_{0}, y_{0}\right)}=f_{x}\left(x_{0}, y_{0}\right) \cos \alpha+f_{y}\left(x_{0}, y_{0}\right) \cos \beta=\operatorname{grad} f\left(x_{0}, y_{0}\right) \cdot e_{l}=\left|\operatorname{grad} f\left(x_{0}, y_{0}\right)\right| \cos \theta ∂l∂f​∣∣∣∣​(x0​,y0​)​=fx​(x0​,y0​)cosα+fy​(x0​,y0​)cosβ=gradf(x0​,y0​)⋅el​=∣gradf(x0​,y0​)∣cosθ 其中 θ \theta θ是向量 g r a d f ( x 0 , y 0 ) grad f(x_0,y_0) gradf(x0​,y0​)与向量 e l e_l el​的夹角:

θ = 0 \theta=0 θ=0, 方向 e l e_l el​与梯度 g r a d f ( x 0 , y 0 ) grad f(x_0,y_0) gradf(x0​,y0​)同向, 函数 f ( x , y ) f(x,y) f(x,y)增加最快, 函数在这个方向的方向导数达到最大值 ∣ \mid ∣grad f ( x 0 , y 0 ) ∣ f\left(x_{0}, y_{0}\right)| f(x0​,y0​)∣ θ = π \theta=\pi θ=π, 方向 e l e_l el​与梯度方向相反, 函数减小最快。

所以可以用沿梯度方向的方向导数来描述是函数最大变化率,即梯度方向是函数变化率最大的方向,在梯度定义的时候就已经赋予了它这个特性。但是, 为什么会有这样的一个特性呢?

下面我们来简单的推导一下。

3. 负梯度方向下降最快的原因

这里我们假设函数 f ( θ ) f(\theta) f(θ)是一个多元函数, 那么我们由泰勒把这个函数进行展开至一阶导数的位置, 就会得到: f ( θ ) ≈ f ( θ 0 ) + ( θ − θ 0 ) ⋅ ∇ f ( θ 0 ) f(\theta) \approx f\left(\theta_{0}\right)+\left(\theta-\theta_{0}\right) \cdot\nabla f\left(\theta_{0}\right) f(θ)≈f(θ0​)+(θ−θ0​)⋅∇f(θ0​) 我们知道这里的 f ( θ ) , f ( θ 0 ) f(\theta), f(\theta_0) f(θ),f(θ0​)是个值,也就是标量, 而加号后面那两个是向量, 但是点积之后就成了标量。我们可以令 θ − θ 0 = η v \theta-\theta_0=\eta v θ−θ0​=ηv, 即一个向量可以分解为一个长度和一个方向的乘积, 这里的 η \eta η表示步长, 这里的 v v v表示方向, 那么就可以对上面式子进行化简: f ( θ ) ≈ f ( θ 0 ) + η v ⋅ ∇ f ( θ 0 ) f(\theta) \approx f\left(\theta_{0}\right)+\eta v \cdot \nabla f\left(\theta_{0}\right) f(θ)≈f(θ0​)+ηv⋅∇f(θ0​) 再进行化简: f ( θ ) − f ( θ 0 ) ≈ η v ⋅ ∇ f ( θ 0 ) < 0 f(\theta)-f\left(\theta_{0}\right) \approx\eta v \cdot \nabla f\left(\theta_{0}\right)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有