梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影) | 您所在的位置:网站首页 › 偏导数求积分怎么求 › 梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影) |
1. 写在前面
这篇文章, 再来对梯度下降算法进行一个小的回顾, 梯度下降算法是求解无约束多元函数极值最常用的数值方法, 很多机器学习常用算法和神经网络都是以它作为算法框架进行优化参数。 所以这个算法非常重要。 这篇文章会有两大部分组成, 第一部分是一些概念的介绍, 第二部分是一个说法背后的原因, 围绕着下面的两张Photos进行一些细节的补充:
大纲如下 概念简单介绍负梯度方向下降最快的原因几种常见的梯度下降法 2. 概念的简单介绍 2.1 凸函数在第一张图片中, 我们看到了一些概念, 这里进行简单的回归, 第一个就是凸函数, 之前看到一个公式: AI问题 = 模型 + 优化。 任何一个优化问题(参数求解过程), 都可以写成如下的形式: 那么, 什么样的函数是凸函数呢? 在介绍凸函数之前, 得先了解一个概念叫做凸集 假设对于任意 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),则函数是凸函数 这个就是凸函数的定义, 这个公式说的啥意思呢? 上面是凸函数的定义, 下面给出两个证明函数是凸函数的定理: 假设
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: 线性回归函数是凸函数, 故这个就可以使用梯度下降法进行参数的更新。 有了凸函数的概念, 我们基于这个再看看导数。 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 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的偏导数。 定义导数、偏导数、方向导数都是说如果说某条件下极限存在,导数的本质是极限及代表函数的变化率,偏导数反映的是函数沿坐标轴方向的变化率,有所限制,所以引入方向导数表示沿任意一方向的变化率。 定义: 设
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β)是以射线同方向的单位向量: 上面这是方向导数, 注意方向导数的本质是个数值,可能现在有些懵逼了, 讲这些概念到底在说啥, 不是梯度下降嘛? 还差一个梯度的概念, 就能把这一串知识串起来了。 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 实验室设备网 版权所有 |