梯度与梯度上升/下降法
这是一个我一直没有弄透彻的概念,特地整理总结一下,希望在这个过程中思路得以拓展。
在引入梯度的概念之前,先介绍一下以下几个概念:导数,偏导数,方向导数。
1. 导数
导数的定义如下:
f ′ ( x 0 ) = l i m Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x f'(x_0)=lim_{\Delta x \to 0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x} f′(x0)=limΔx→0Δxf(x0+Δx)−f(x0)
表示的是函数 f ( x ) f(x) f(x)在某一点 x 0 x_0 x0沿着 x x x轴正方向的变化率/变化趋势。当 f ′ ( x 0 ) f'(x_0) f′(x0)>0时,说明 f ( x ) f(x) f(x)的函数值在 x 0 x_0 x0点沿x轴正方向是趋于增加的,反之,则是趋于减少的。
2.偏导数
偏导数与导数类似,是指一个多变量的函数,关于其中一个变量的导数,而其他变量保持不变。
三变量函数 f ( x , y , z ) f(x,y,z) f(x,y,z)的偏导数的定义如下:
∂ f ( x 0 , y 0 , z 0 ) ∂ y = l i m Δ y → 0 f ( x 0 , y 0 + Δ y , z 0 ) − f ( x 0 , y 0 , z 0 ) Δ y \frac{\partial f(x_0,y_0,z_0)}{\partial y}=lim_{\Delta y \to 0}\frac{f(x_0,y_0+\Delta y,z_0)-f(x_0,y_0,z_0)}{\Delta y} ∂y∂f(x0,y0,z0)=limΔy→0Δyf(x0,y0+Δy,z0)−f(x0,y0,z0)
表示的是三变量函数 f ( x , y , z ) f(x,y,z) f(x,y,z)在点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)处沿y轴正方向的变化率/变化趋势。
3.方向导数
导数和偏导数计算的都是沿某坐标轴正方向的变化率/变化趋势,方向导数计算的是沿某特定方向上的变化率/变化趋势。
三变量函数 f ( x , y , z ) f(x,y,z) f(x,y,z)的方向导数的定义如下:
∂ f ( x 0 , y 0 , z 0 ) ∂ v = l i m t → 0 f ( x 0 + t v 1 , y 0 + t v 2 , z 0 + t v 3 ) − f ( x 0 , y 0 , z 0 ) t = f x ′ ( x 0 , y 0 , z 0 ) v 1 + f y ′ ( x 0 , y 0 , z 0 ) v 2 + f z ′ ( x 0 , y 0 , z 0 ) v 3 \begin{aligned} \frac{\partial f(x_0,y_0,z_0)}{\partial v}&=lim_{t \to 0}\frac{f(x_0+tv_1,y_0+tv_2,z_0+tv_3)-f(x_0,y_0,z_0)}{t}\\ &=f'_x(x_0,y_0,z_0)v_1+ f'_y(x_0,y_0,z_0)v_2+f'_z(x_0,y_0,z_0)v_3 \end{aligned} ∂v∂f(x0,y0,z0)=limt→0tf(x0+tv1,y0+tv2,z0+tv3)−f(x0,y0,z0)=fx′(x0,y0,z0)v1+fy′(x0,y0,z0)v2+fz′(x0,y0,z0)v3
表示的是三变量函数 f ( x , y , z ) f(x,y,z) f(x,y,z)在点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)处沿 v = ( v 1 , v 2 , v 3 ) v=(v_1,v_2,v_3) v=(v1,v2,v3)方向的变化率/变化趋势。
4.梯度
梯度的方向就是函数在某点增长最快的方向,梯度的模为方向导数的最大值,梯度是偏导数的集合。
三变量函数 f ( x , y , z ) f(x,y,z) f(x,y,z)的梯度的定义如下:
如果函数 f ( x , y , z ) f(x,y,z) f(x,y,z)在点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)处存在偏导数 f x ′ ( x 0 , y 0 , z 0 ) f'_x(x_0,y_0,z_0) fx′(x0,y0,z0), f y ′ ( x 0 , y 0 , z 0 ) f'_y(x_0,y_0,z_0) fy′(x0,y0,z0)和 f z ′ ( x 0 , y 0 , z 0 ) f'_z(x_0,y_0,z_0) fz′(x0,y0,z0),则称向量 { f x ′ ( x 0 , y 0 , z 0 ) , f y ′ ( x 0 , y 0 , z 0 ) , f z ′ ( x 0 , y 0 , z 0 ) } \ \{f'_x(x_0,y_0,z_0), f'_y(x_0,y_0,z_0),f'_z(x_0,y_0,z_0)\} { fx′(x0,y0,z0),fy′(x0,y0,z0),fz′(x0,y0,z0)} 为函数 f ( x , y , z ) f(x,y,z) f(x,y,z)在点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)处的梯度,记作:
∇ f ∣ ( x 0 , y 0 , z 0 ) 或 g r a d f ∣ ( x 0 , y 0 , z 0 ) \nabla f|(x_0,y_0,z_0) \ 或\ gradf|(x_0,y_0,z_0) ∇f∣(x0,y0,z0) 或 gradf∣(x0,y0,z0)
梯度的大小: | ∇ f | = f x ′ ( x 0 , y 0 , z 0 ) 2 + f y ′ ( x 0 , y 0 , z 0 ) 2 + f z ′ ( x 0 , y 0 , z 0 ) 2 |\nabla f|=\sqrt{f'_x(x_0,y_0,z_0)^2+ f'_y(x_0,y_0,z_0)^2+f'_z(x_0,y_0,z_0)^2} |∇f|=fx′(x0,y0,z0)2+fy′(x0,y0,z0)2+fz′(x0,y0,z0)2 =方向导数的最大值
梯度的方向:函数变化率(即方向导数)最大的方向。
5.梯度下降/上升法
函数沿着梯度是上升最快的方向,那么沿着梯度的反方向就是下降最快的方向。
梯度下降法从函数 f f f的局部极小值的初始估计 x 0 x_0 x0出发,重复计算:
x n + 1 = x n − r ∇ f ( x n ) , n ≥ 0 x_{n+1}=x_n-r \nabla f(x_n),n\geq 0 xn+1=xn−r∇f(xn),n≥0 其中 r > 0 r>0 r>0且是一个极小值。顺利的话最终序列会收敛到局部最小值。
梯度上升法则是重复计算:
x n + 1 = x n + r ∇ f ( x n ) , n ≥ 0 x_{n+1}=x_n+r \nabla f(x_n),n\geq 0 xn+1=xn+r∇f(xn),n≥0
顺利的话最终序列会收敛到局部最大值。