Day12 梯度下降法的含义与公式
Day12 梯度下降法的含义与公式
应用数学最重要的任务之一就是寻找函数取最小值的点。
梯度下降法(Gradient Descent)是一种广泛应用于机器学习和深度学习中的优化算法,主要用于求解最小化目标函数的问题。
一、梯度下降法的理解
多变量函数的最小值条件
-
回顾Day9 神经网络的偏导数基础中关于“多变量函数的最小值条件”:对于多变量函数 f ( x 1 , x 2 , … , x n ) f(x_1, x_2, \ldots, x_n) f(x1,x2,…,xn),取得最小值的必要条件是该函数在该点的所有偏导数都为零,求解公式如下:
∂ f ∂ x 1 ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) = 0 \frac{\partial f}{\partial x_1}(x_1^*, x_2^*, \ldots, x_n^*) = 0 ∂x1∂f(x1∗,x2∗,…,xn∗)=0
∂ f ∂ x 2 ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) = 0 \frac{\partial f}{\partial x_2}(x_1^*, x_2^*, \ldots, x_n^*) = 0 ∂x2∂f(x1∗,x2∗,…,xn∗)=0
⋮ \vdots ⋮
∂ f ∂ x n ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) = 0 \frac{\partial f}{\partial x_n}(x_1^*, x_2^*, \ldots, x_n^*) = 0 ∂xn∂f(x1∗,x2∗,…,xn∗)=0 -
然而,在实际问题中,上式通常不容易求解,那么该如何解决呢?
- 梯度下降法是一种具有代表性的替代方法。
- 该方法不直接求解方程,而是通过慢慢地移动图像上的点进行摸索,从而找出函数的最小值。
本Day后,会发现这里的“慢慢”并不单纯地指移动速度慢,而是指每一次尝试移动的距离可能很短,移动的频次可能很密集,所以导致通过利用梯度下降法追求最小值的过程速度可能会很慢。
梯度下降法?“坡度”下降法!
- 假如 f ( x , y ) f(x,y) f(x,y)生成的图像是一个凹凸不平的斜坡,在斜坡上放一个篮球,然后轻轻地松开手,球会沿着最陡的坡面开始滚动(参考图中红色箭头反向),待球稍微前进一点后,把球止住,然后从止住的位置再次松手,球会从这个点再次沿着最陡的坡面开始滚动。
- 把上面这个过程抽象如下:
补充理解:
- Gradient Descent 作为专业名词 翻译为 “梯度下降法” 并不见得容易让人理解,因为”梯度“是一个纯数学概念,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。
- 其实Gradient这个单词常见释意是坡度,坡度这个概念更贴近生活,缺少了专业数学定义反而容易让人理解,结合上面两张图像说明,可以不专业称之为“坡度下降法”:就是沿着最陡坡面下降的方法。
- 坡度就是坡的陡峭程度,就是梯度,具体指的就是该点的导数。
- 实在对梯度不"感冒"的话,不妨在大脑里将梯度理解为“最陡的坡度方向”。
用”成龙跳空调“解释梯度下降法
场景设定
在电影《宝贝计划》中,成龙有一个经典的片段,他被人追杀到大厦楼顶,需要从高楼外跳踩空调机,一层一层地跳下来。
想象一下,成龙站在一栋大楼的顶层,他的目标是跳到地面上(即找到函数的最小值点,这里地面代表最低点或最优解)。但是,他不能直接跳下去,因为那样太危险了(直接跳到最低点通常不现实,也可能错过最优解)。大楼的每一层都代表函数值的一个点,楼层越高,函数值越大;楼层越低,函数值越小,直到地面代表最小值。
梯度下降过程
-
初始位置:成龙一开始站在楼顶,这就像梯度下降法中的初始参数值。这些参数值是随机初始化的,或者是根据某种策略设置的。
-
观察梯度:在每一次跳跃前,成龙需要确定下一步往哪个方向跳才能更接近地面。这相当于计算损失函数关于当前参数的梯度。
-
迈出一步:根据观察到的梯度,成龙决定向哪个方向跳(即沿着梯度下降的方向)。他不会一次性跳到地面,而是选择跳到下一层或几层下的某个位置,这个位置使得他的高度(即函数值)有所下降。
-
重复过程:每跳到一层新的楼层,成龙都会重复上述过程:观察新的梯度,决定下一步的跳跃方向,然后再次跳跃。这个过程会一直持续,直到他跳到地面(或接近地面的某个位置,这取决于算法的停止条件,比如梯度接近于零或达到了预设的迭代次数)。
-
到达地面:最终,通过一步步的小心跳跃,成龙成功到达了地面(或接近最优解的位置)。这个过程就是梯度下降法寻找函数最小值的直观体现。
关键点对应
- 成龙:代表算法中的“搜索者”或“优化器”。
- 大楼的楼层:代表函数值的不同点。
- 梯度:指示函数值下降最快的方向。
- 跳跃:代表算法在每一步中沿着梯度方向进行的更新。
- 到达地面:代表找到函数的局部最小值。
通过这个类比,我们可以更直观地理解梯度下降法的工作原理和过程。它就像成龙在复杂地形中不断寻找最佳路径以安全到达地面一样,梯度下降法也在不断地调整参数以最小化损失函数。
在数值分析领域,梯度下降法也称为最速下降法。这个名称表示沿着图像上的最短路径下降。
二、梯度下降法的公式表示
多变量函数的近似公式
- 回顾Day11 梯度下降法的基础:多变量函数的近似公式中“多变量函数的近似公式”:
若有: f ( x + △ x , y + △ y ) ≐ f ( x , y ) + ∂ f ( x , y ) ∂ x △ x + ∂ f ( x , y ) ∂ y △ y 若有:f(x+\triangle x, y+\triangle y)\doteq f(x, y)+\frac{{\partial}f(x, y)}{\partial x}\triangle x+\frac{{\partial}f(x, y)}{\partial y}\triangle y 若有:f(x+△x,y+△y)≐f(x,y)+∂x∂f(x,y)△x+∂y∂f(x,y)△y
定义: z = f ( x , y ) , △ z = f ( x + △ x , y + △ y ) − f ( x , y ) 定义:z= f(x,y),\triangle z=f(x+\triangle x, y+\triangle y)-f(x, y) 定义:z=f(x,y),△z=f(x+△x,y+△y)−f(x,y)
可得: △ z = ∂ z ∂ x △ x + ∂ z ∂ y △ y 可得:\triangle z=\frac{{\partial}z}{\partial x}\triangle x+\frac{{\partial}z}{\partial y}\triangle y 可得:△z=∂x∂z△x+∂y∂z△y
近似公式的向量表示
- 回顾Day11 梯度下降法的基础:多变量函数的近似公式中“近似公式的向量表示”:
若有: z = f ( x , y ) , △ z = ∂ z ∂ x △ x + ∂ z ∂ y △ y 若有:z =f(x,y),\triangle z=\frac{{\partial}z}{\partial x}\triangle x+\frac{{\partial}z}{\partial y}\triangle y 若有:z=f(x,y),△z=∂x∂z△x+∂y∂z△y
定义:向量 ∇ z = ( ∂ z ∂ x , ∂ z ∂ y ) , 向量 △ x = ( △ x , △ y ) 定义:向量\nabla z=(\frac{{\partial}z}{\partial x},\frac{{\partial}z}{\partial y}),向量\bigtriangleup x=(\bigtriangleup x,\bigtriangleup y) 定义:向量∇z=(∂x∂z,∂y∂z),向量△x=(△x,△y)
则:近似公式可以表示为两个向量的内积 ( ∇ z ⃗ ⋅ △ x ⃗ ) 的形式,即: △ z = ∇ z ⃗ ⋅ △ x ⃗ 则:近似公式可以表示为两个向量的内积(\vec{\nabla z}\cdot \vec{\bigtriangleup x})的形式,即:\triangle z = \vec{\nabla z}\cdot \vec{\bigtriangleup x} 则:近似公式可以表示为两个向量的内积(∇z⋅△x)的形式,即:△z=∇z⋅△x
向量的内积
-
回顾Day6 神经网络的向量基础中"向量的内积":
梯度下降法的基本式
-
根据对近似公式和向量内积的回顾,可以得出:
- 当 ∇ z ⃗ \vec{\nabla z} ∇z和 △ x ⃗ \vec{\bigtriangleup x} △x这两个向量反向正好相反时, △ z \triangle z △z取得最小值,此时函数 z z z减小得最快
-
综上所述,从点 ( x , y ) (x, y) (x,y) 向点 ( x + ∆ x , y + ∆ y ) (x + ∆x, y +∆y) (x+∆x,y+∆y) 移动时,当满足以下关系式时,函数 z = f ( x , y ) z = f (x, y) z=f(x,y) 减小得最快,这个关系式就是二变量函数的梯度下降法的基本式:
( Δ x , Δ y ) = − η ( ∂ f ( x , y ) ∂ x , ∂ f ( x , y ) ∂ y ) (\Delta x, \Delta y) = -{\eta} \left( \frac{\partial f(x, y)}{\partial x}, \frac{\partial f(x, y)}{\partial y} \right) (Δx,Δy)=−η(∂x∂f(x,y),∂y∂f(x,y))△ x ⃗ = − η ∇ z ⃗ \vec{\bigtriangleup x} = -{\eta}\vec{\nabla z} △x=−η∇z
其中, η \eta η(读作 i t a ita ita)是一个正的微小常数,用于表示变化的程度。
在实际使用计算机进行计算时,如何恰当地确定这个 η 是一个大问题。
η 可以看作人移动时的“步长”,根据 η 的值,可以确定下一步移动到哪个点。如果步长较大,那么可能会到达最小值点,也可能会直接跨过了最小值点(左图)。而如果步长较小,则可能会滞留在极小值点(右图)。在神经网络的世界中,η 称为学习率。遗憾的是,它的确定方法没有明确的标准,只能通过反复试验来寻找恰当的值。
-
上面式子中的向量 ( ∂ f ( x , y ) ∂ x , ∂ f ( x , y ) ∂ y ) (\frac{\partial f(x, y)}{\partial x}, \frac{\partial f(x, y)}{\partial y}) (∂x∂f(x,y),∂y∂f(x,y))或 ∇ z \nabla z ∇z表示的就是函数 f ( x , y ) f(x, y) f(x,y) 在点 ( x , y ) (x, y) (x,y) 处的梯度(gradient),可以开始解决问题了:
①给定函数 f ( x , y ) f(x, y) f(x,y)以及起始点 ( x , y ) (x, y) (x,y)计算出梯度
②根据梯度下降法,计算出向量 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy)和 ( x + Δ x , y + Δ y ) (x+\Delta x, y+\Delta y) (x+Δx,y+Δy)
③根据梯度的定义,从点 ( x , y ) (x,y) (x,y)向点 ( x + Δ x , y + Δ y ) (x+\Delta x, y+\Delta y) (x+Δx,y+Δy)移动,代表沿着函数减小得最快的方向移动。
④反复重复①②③,不出意外的话就能找到该函数的最小值点。
针对以上步骤,下一Day会利用最简单的工具(Excel)来体验梯度下降法的迭代过程
梯度下降法的推广
- 二变量函数的梯度下降法的基本式可以很容易地推广到三个变量以上的情形。
- 当函数 f f f 由 n n n 个自变量 x 1 , x 2 , ⋯ , x n x_1, x_2, \cdots, x_n x1,x2,⋯,xn 构成时,梯度下降法的基本式可以像下面这样进行推广:
- 设 η \eta η 为正的微小常数,变量 x 1 , x 2 , ⋯ , x n x_1, x_2, \cdots, x_n x1,x2,⋯,xn 改变为 x 1 + △ x 1 , x 2 + △ x 2 , ⋯ , x n + △ x n x_1 + \triangle x_1, x_2 + \triangle x_2, \cdots, x_n + \triangle x_n x1+△x1,x2+△x2,⋯,xn+△xn,当满足以下关系式时,函数 f f f 减小得最快。
( △ x 1 , △ x 2 , ⋯ , △ x n ) = − η ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , ⋯ , ∂ f ∂ x n ) (\triangle x_1, \triangle x_2, \cdots, \triangle x_n) = -\eta \left(\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \cdots, \frac{\partial f}{\partial x_n}\right) (△x1,△x2,⋯,△xn)=−η(∂x1∂f,∂x2∂f,⋯,∂xn∂f)
这里,向量 ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , ⋯ , ∂ f ∂ x n ) (\frac{\partial f}{\partial x_{1}}, \frac{\partial f}{\partial x_{2}}, \cdots, \frac{\partial f}{\partial x_{n}}) (∂x1∂f,∂x2∂f,⋯,∂xn∂f)称为函数 f f f 在点 ( x 1 , x 2 , ⋯ , x n ) (x_1, x_2, \cdots, x_n) (x1,x2,⋯,xn) 处的梯度。
与二变量函数的情况一样,如果从点 ( x 1 , x 2 , ⋯ , x n ) (x_{1}, x_{2}, \cdots, x_{n}) (x1,x2,⋯,xn)向点 ( x 1 + △ x 1 , x 2 + △ x 2 , ⋯ , x n + △ x n ) (x_{1}+\triangle x_{1}, x_{2}+\triangle x_{2}, \cdots, x_{n}+\triangle x_{n}) (x1+△x1,x2+△x2,⋯,xn+△xn)移动就能够沿着函数减小得最快的方向移动。因此,反复如此移动,就能够在 n 维空间中找到最小值点。这就是 n 变量情况下的梯度下降法。
三、回顾梯度下降法的要点
- 初始化参数:选择适当的初始值作为优化的起点。
- 计算梯度:根据目标函数计算当前点的梯度。
- 更新参数:按照梯度的反方向和步长更新参数。
- 判断停止条件:根据预设的停止条件(如迭代次数、目标函数值的变化量等)判断是否停止迭代。