深度学习基础 - 偏导数、方向导数、梯度

深度学习的基础 - 偏导数、方向导数、梯度

flyfish

柯西将极限的定义引入了微积分,很创新。因为微积分的创造者们没有把一件事说明白,他用新的概念把这件事说明白了。问题变了,思维方式就变了,之前的人的问题是什么什么是多少,他的问题是如何定义“什么什么”的问题。他定义的框架把微积分的严谨度向前迈了一大步,所以问什么样的问题最重要。微积分的现代体系就是他建的。

数学有些地方又是借鉴物理知识,可以在后面的深度学习部分看到。从芝诺用不是数学的语言-大白话描述它,到现在都2500多年了。中国的先人们发现的什么什么定理领先西方多少多少年,到了明朝后期比较尴尬了,19世纪末期清代的李善兰把这个知识引入到中国。别人是先进的,那就无论好坏对错全盘吸收,然后持续积累改进迭代。如果后人把问题再变了,那又会离“微积分真理”又进了一步。人的语言可以表达不存在的东西,因相信而这不存在东西也就变得存在。

说梯度的时候,还得理解方向导数,偏导数。
最小化 f(x)的问题,如果是一元的,一个 导数的概念就够了;如果是多元的,就出现了偏导数,方向导数,梯度的概念。
导数精确描述了函数变化率,变化率可理解为变量的变化“快慢”问题。研究变化率的问题之前的 y=kx+b,就一个未知数x,x也叫自变量,可以说一元函数,研究多元函数的时候就出现了偏导。偏可以理解成部分,多元就是一个自变量固定,在编程里叫常量。三维可以可视化易于理解,超过三维在我看来只能逻辑推理,所以用一元,二元来可视化理解。假设一个二元函数的偏导数,它反应的是函数沿坐标轴方向的变化率。一个点画线的时候可以朝着坐标轴方向,也可以朝着其他方向,其他方向就成了方向导数

偏导数
式子 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 ) = lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x f _ { x } ^ { \prime } \left( x _ { 0 } , y _ { 0 } \right) = \lim _ { \Delta x \rightarrow 0 } \frac { f \left( x _ { 0 } + \Delta x , y _ { 0 } \right) - f \left( x _ { 0 } , y _ { 0 } \right) } { \Delta x } fx(x0,y0)=Δx0limΔxf(x0+Δx,y0)f(x0,y0)
函数在点 ( x 0 , y 0 ) (x_0,y_0) x0,y0沿着 y y y轴方向的变化率
f y ′ ( x 0 , y 0 ) = lim ⁡ Δ y → 0 f ( x 0 , y 0 + Δ y ) − f ( x 0 , y 0 ) Δ y f _ { y } ^ { \prime } \left( x _ { 0 } , y _ { 0 } \right) = \lim _ { \Delta y \rightarrow 0 } \frac { f \left( x _ { 0 } , y _ { 0 } + \Delta y \right) - f \left( x _ { 0 } , y _ { 0 } \right) } { \Delta y } fy(x0,y0)=Δy0limΔyf(x0,y0+Δy)f(x0,y0)
定义偏导数是可以使用导数来定义,也可以使用极限来定义,甚至可以使用方向导数来定义

下面用数学语言来描述方向导数,用数学语言作为标杆,优点严谨,强逻辑,不产生歧义,缺点不易懂。之后我用大白话说明是什么问题。多本教科书均有定义,这里采用 同济大学《高等数学 第七版 下册》103页的《方向导数与梯度》
原图是这样的
在这里插入图片描述

l l l x O y xOy xOy平面上以 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0(x0,y0)为始点的一条射线, e l = ( cos ⁡ α , cos ⁡ β ) e_l=(\cos \alpha,\cos \beta) el=(cosα,cosβ)是与 l l ll同方向的单位向量,射线 l l l的参数方程为

x = x 0 + t cos ⁡ α y = y 0 + t cos ⁡ β t ⩾ 0 \begin{array} { c } { x = x _ { 0 } + t \cos \alpha } \\ { y = y _ { 0 } + t \cos \beta } \\ { t \geqslant 0 } \end{array} x=x0+tcosαy=y0+tcosβt0

设函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0(x0,y0)的某个领域 U ( P 0 ) U(P_0) U(P0)内有定义, P ( x 0 + t c o s α , y 0 + t c o s β ) P(x_{0}+tcos\alpha,y_{0}+tcos\beta) P(x0+tcosα,y0+tcosβ) l l l上的另一点,且 P ∈ U ( P 0 ) P\in U(P_{0}) PU(P0)。如果函数增量 f ( x 0 + t c o s α , y 0 + t c o s β ) − f ( x 0 , y 0 ) {f(x_{0}+tcos\alpha,y_{0}+tcos\beta)-f(x_{0},y_{0})} 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的比值
f ( x 0 + t c o s α , y 0 + t c o s β ) − f ( x 0 , y 0 ) t \frac{f(x_{0}+tcos\alpha,y_{0}+tcos\beta)-f(x_{0},y_{0})}{t} tf(x0+tcosα,y0+tcosβ)f(x0,y0)

P P P沿着 l l l趋向于 P 0 ( 即 t → 0 + ) P_{0}(即t\rightarrow0^{+}) P0(t0+)时的极限存在,则称此极限为函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 P_0 P0沿方向ll的方向导数

∂ f ∂ l ∣ ( x 0 , y 0 ) = lim ⁡ t → 0 + f ( x 0 + t c o s α , y 0 + t c o s β ) − f ( x 0 , y 0 ) t ‘ \frac{\partial f}{\partial l} \mid_{(x_{0},y_{0})}=\lim_{t \rightarrow 0^{+}}\frac{f(x_{0}+tcos\alpha,y_{0}+tcos\beta)-f(x_{0},y_{0})}{t}` lf(x0,y0)=t0+limtf(x0+tcosα,y0+tcosβ)f(x0,y0)
它要表达的图是这样的,耗时的画图,看的图简化下
在这里插入图片描述

单位向量 e l = ( cos ⁡ α , cos ⁡ β ) e_l=(\cos \alpha,\cos \beta) el=(cosα,cosβ)怎么解释
首先得有个向量假设叫它a,长度不能为0,还有个向量e,与a方向一样,长度是1,那么这个e就叫做向量a的单位向量。就像在坐标轴上画刻度,至于多大间隔为1,自己定。

这就是上面提到的单位向量 e l e_l el
( cos ⁡ α , cos ⁡ β ) (\cos \alpha,\cos \beta) (cosα,cosβ)a是向量 e l e_l el的x轴坐标分量和y轴坐标分量,相当于直角三角形的斜边是1,根据前面的三角函数,知道了角度,可以计算对边和斜边。
图片中
t ∗ c o s ( a l p h a ) = t ∗ c o s ( α ) = Δ x t*cos(alpha)=t*cos(\alpha)=\Delta x tcos(alpha)=tcos(α)=Δx
t ∗ c o s ( b e t a ) = t ∗ c o s ( β ) = Δ y t*cos(beta)=t*cos(\beta)=\Delta y tcos(beta)=tcos(β)=Δy
就有了如下式子
ρ = ∣ P P 0 ∣ = Δ x 2 + Δ y 2   Δ z = f ( x + Δ x , y + Δ y ) − f ( x , y ) ∂ f ∂ l = lim ⁡ ρ → 0 f ( x + Δ x , y + Δ y ) − f ( x , y ) ρ \rho = \left| P P _ { 0 } \right| = \sqrt { \Delta x ^ { 2 } + \Delta y ^ { 2 } } \ \\ \Delta z = f ( x + \Delta x , y + \Delta y ) - f ( x , y ) \\ \frac { \partial f } { \partial l } = \lim _ { \rho \rightarrow 0 } \frac { f ( x + \Delta x , y + \Delta y ) - f ( x , y ) } { \rho } ρ=PP0=Δx2+Δy2  Δz=f(x+Δx,y+Δy)f(x,y)lf=ρ0limρf(x+Δx,y+Δy)f(x,y)

方向导数
方向导数就像我们给地球定义了东西南北,正南正北刮的就像偏导数,地球上的风是可以按照任意方向刮的,就像方向导数。
偏导数1

∂ f ∂ x ( a , b ) = lim ⁡ h → 0 f ( a + h , b ) − f ( a , b ) h . \frac{\partial f}{\partial x}(a,b) = \lim_{h\rightarrow 0} \frac{f(a+h,b) - f(a,b)}{h}. xf(a,b)=h0limhf(a+h,b)f(a,b).

偏导数2

∂ f ∂ y ( a , b ) = lim ⁡ h → 0 f ( a , b + h ) − f ( a , b ) h . \frac{\partial f}{\partial y}(a,b) = \lim_{h\rightarrow 0} \frac{f(a,b+h) - f(a,b)}{h}. yf(a,b)=h0limhf(a,b+h)f(a,b).

方向导数

符号

∇ v f ( x ) ∼ ∂ f ( x ) ∂ v ∼ f v ′ ( x ) ∼ D v f ( x ) ∼ D f ( x ) ( v ) ∼ ∂ v f ( x ) ∼ v ⋅ ∇ f ( x ) ∼ v ⋅ ∂ f ( x ) ∂ x {\displaystyle \nabla _{\mathbf {v}}{f}({\mathbf {x}})\sim {\frac {\partial {f({\mathbf {x}})}}{\partial {\mathbf {v}}}}\sim f'_{\mathbf {v} }({\mathbf {x}})\sim D_{\mathbf {v}}f({\mathbf {x}})\sim Df({\mathbf {x}})({\mathbf {v}})\sim \partial _{\mathbf {v}}f({\mathbf {x}})\sim \mathbf {v} \cdot {\nabla f({\mathbf {x}})}\sim {\mathbf {v}}\cdot {\frac {\partial f({\mathbf {x}})}{\partial {\mathbf {x}}}}} vf(x)vf(x)fv(x)Dvf(x)Df(x)(v)vf(x)vf(x)vxf(x)




扩展偏导得到的方向导数

f ( x ) = f ( x 1 , x 2 , … , x n ) f({x}) = f(x_1, x_2, \ldots, x_n) f(x)=f(x1,x2,,xn)

v = ( v 1 , … , v n ) {v} = (v_1, \ldots, v_n) v=(v1,,vn)

∇ v f ( x ) = lim ⁡ h → 0 f ( x + h v ) − f ( x ) h . \nabla_{{v}}{f}({x}) = \lim_{h \rightarrow 0}{\frac{f({x} + h{v}) - f({x})}{h}}. vf(x)=limh0hf(x+hv)f(x).

换种形式

D v f ( a ) = lim ⁡ h → 0 f ( a + h v ) − f ( a ) h . D_{{v}}f({a}) = \lim_{h \to 0} \frac{f({a}+h{v}) - f({a})}{h}. Dvf(a)=h0limhf(a+hv)f(a).

理解

导数:曲线上某一点沿着x轴方向变化的速率,即函数f(x)f(x)在该点的斜率
函数的导数就是函数的变化率

偏导数:
∂ f ∂ x 是函数 f ( x , y ) \frac{\partial f}{\partial x}\text{是函数}f(x,y) xf是函数f(x,y)沿着x轴方向的变化率

∂ f ∂ y 是函数 f ( x , y ) \frac{\partial f}{\partial y}\text{是函数}f(x,y) yf是函数f(x,y)沿着y轴方向的变化率

设函数z=f(X)=f(x,y) 在点P的某一邻域U§内有定义.自点引射线l.设x轴正向到射线l的转角为 φ(逆时针方向:
φ>0;顺时针方向:0),并设P’(x+△x,y+△y)为上的另一点且P’∈U§.我们考虑函数的增量f(x+△x,y+△y)-f(x,y)与P、P’两点间的距离 ρ = ( Δ x ) 2 + ( Δ y ) 2 \rho=\sqrt{(\Delta x)^2+(\Delta y)^2} ρ=(Δx)2+(Δy)2
的比值.当P’沿着l趋于P时,如果这个比的极限存在,则称这极限为函数f(x,y)在点P沿方向l的方向导数,记作



∂ f ∂ l = lim ⁡ ρ → 0 f ( x + Δ x , y + Δ y ) − f ( x , y ) ρ \frac{\partial f}{\partial {l}}=\lim_{\rho \to 0}\frac{f(x+\Delta x ,y+\Delta y)-f(x,y)}{\rho} lf=ρ0limρf(x+Δx,y+Δy)f(x,y)

换种形式

Δ x = ρ ⋅ c o s α ; Δ y = ρ ⋅ c o s β ; \Delta x= \rho \cdot cos\alpha; \Delta y= \rho \cdot cos\beta; Δx=ρcosα;Δy=ρcosβ;

∂ f ∂ l ⃗ = lim ⁡ ρ → 0 f ( x + ρ c o s α , y + ρ c o s β ) − f ( x , y ) ρ \frac{\partial f}{\partial \vec{l}}=\lim_{\rho \to 0}\frac{f(x+\rho cos\alpha,y+\rho cos\beta)-f(x,y)}{\rho} l f=ρ0limρf(x+ρcosα,y+ρcosβ)f(x,y)

因为

sin ⁡ ( θ ) = cos ⁡ ( π 2 − θ ) = 1 csc ⁡ ( θ ) \sin(\theta )=\cos \left({\frac {\pi }{2}}-\theta \right)={\frac {1}{\csc(\theta )}} sin(θ)=cos(2πθ)=csc(θ)1


α + β = π 2 \alpha + \beta={\frac {\pi }{2}} α+β=2π
还可以写成

∂ f ∂ l ⃗ = lim ⁡ ρ → 0 f ( x + ρ c o s α , y + ρ s i n α ) − f ( x , y ) ρ \frac{\partial f}{\partial \vec{l}}=\lim_{\rho \to 0}\frac{f(x+\rho cos\alpha,y+\rho sin\alpha)-f(x,y)}{\rho} l f=ρ0limρf(x+ρcosα,y+ρsinα)f(x,y)

方向导数:某一点沿着某一方向的变化率
在这里插入图片描述
根据上面的抛物线简化下
目的是找到抛物线中最低的点,也就是y轴中最小的那个坐标
先随意取一点,这条直线的斜率是三角形的高除以宽,也就是h/g,相当于tan(alpha)
看图知道如果切线平行于x轴,相当于tan0=0
当点向下移动时,斜率越来越小
t a n 6 0 ∘ = 3 tan60 ^ { \circ }=\sqrt { 3 } tan60=3
t a n 4 5 ∘ = 1 tan45 ^ { \circ }=1 tan45=1
t a n 3 0 ∘ = 3 3 tan30 ^ { \circ }=\frac { \sqrt { 3 } } { 3 } tan30=33
t a n 0 ∘ = 0 tan0 ^ { \circ }=0 tan0=0
在这里插入图片描述

方程 z = f ( x , y ) z=f(x,y) z=f(x,y) ,表示曲面 S S S
如果 z 0 = f ( x 0 , y 0 ) z_0=f(x_0,y_0) z0=f(x0,y0),那么点 P ( x 0 , y 0 , z 0 ) P(x_0,y_0,z_0) P(x0,y0,z0) S S S上 。
过P和 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0(x0,y0)的平行于 u u u的竖直平面交S于曲线 C C C
f沿着方向u的变化率是C在点P的切线的斜率。
u = i u=i u=i p 0 p_0 p0的方向导数是 ∂ f ∂ x \frac{\partial f}{\partial x} xf ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的值
u = j u=j u=j p 0 p_0 p0的方向导数是 ∂ f ∂ y \frac{\partial f}{\partial y} yf ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的值
方向导数可以求沿着任意方向,不仅仅是方向 i i i和方向 j j j的变化率
梯度
函数在某点的梯度是这样一个向量,它的方向是函数在这点方向导数取得最大值得方向,它的模为方向导数的最大值.

解释什么是向量的模?
向量的模就是向量的长度
假设平面有两个点 A ( x 1 , y 1 ) B ( x 2 , y 2 ) A \left( x _ { 1 } , y _ { 1 } \right) B \left( x _ { 2 } , y _ { 2 } \right) A(x1,y1)B(x2,y2),它们之间的距离是(还是勾股定理)
∣ A B ⃗ ∣ = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 | \vec { \mathbf { A B } } | = \sqrt { \left( \boldsymbol { x } _ { 2 } - \boldsymbol { x } _ { \mathbf { 1 } } \right) ^ { 2 } + \left( \boldsymbol { y } _ { 2 } - \boldsymbol { y } _ { \mathbf { 1 } } \right) ^ { 2 } } AB =(x2x1)2+(y2y1)2
这类距离也叫欧式距离,在机器学习中叫2-范数
nabla
换成表示方式就是
已知 ∣ a ⃗ ∣ = ( x , y ) | \vec { \boldsymbol { a } } | =( x , y ) a =(x,y),那么模就是
∣ a ⃗ ∣ = x 2 + y 2 | \vec { \boldsymbol { a } } | = \sqrt { \boldsymbol { x } ^ { 2 } + \boldsymbol { y } ^ { 2 } } a =x2+y2
梯度的符号是$\operatorname { grad } f(x_0,y_0) $或者 ∇ f ( x 0 , y 0 ) \nabla f(x_0,y_0) f(x0,y0),倒三角的符号是
梯度是这样的
gradf ⁡ ( x , y ) = ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 \operatorname { grad f } ( x , y ) = \sqrt { \left( \frac { \partial f } { \partial x } \right) ^ { 2 } + \left( \frac { \partial f } { \partial y } \right) ^ { 2 } } gradf(x,y)=(xf)2+(yf)2

以二元z=f(x,y)这样的曲面用等值线表示
先使用Python画一个

import numpy as np
import matplotlib.pyplot as plt

def f(x, y):
   return (x**2+y**2) 

n = 64
x = np.linspace(-1, 1, n)
y = np.linspace(-1, 1, n)

#画原图
fig = plt.figure()
x1,y1 = np.meshgrid(x,y)
pic1=fig.add_subplot(111,projection='3d')
pic1.plot_surface(x1,y1,f(x1,y1),rstride=3,cstride=3,cmap=plt.cm.jet)
plt.show()

#画等值线
fig = plt.figure()
x2, y2 = np.meshgrid(x, y)
t = plt.contour(x2, y2, f(x2, y2), 10)
plt.clabel(t, inline=True, fontsize=10)
plt.show()

原图
在这里插入图片描述
在吴恩达的机器学习视频教程 Gradient Descent For Linear Regression中也有类似的这样的图,this is called a convex function
关于函数的这个“凸”,各种书籍资料都没有统一,这个凹凸正好是中国的象形字,但老外用的是字母。所以看书的时候要注意书中的定义和上下文,例如在陈宝林《最优化理论与算法》中用的抛物线的开口向上为凸函数和抛物线的开口向下为凹函数,我后面的说法采用张景中的上凸和下凸,直观无歧义。在他的著作《直来直去的微积分》中描述了林群的不使用极限概念定义导数,目的是让数学变得更容易学习。就像例如同样是对速度的定义,哪个更容易懂些。
初中的定义:速度等于路程与时间之比。
高中的定义:速度等于位移和发生位移所用时间的比值。
大学的定义:速度是描述质点运动快慢和方向的物理量等于位移对时间的微分,
同时也等于加速度的积分。
我这里使用了极限的概念来理解,如果使用林群的“一致性不等式”定义导数证明泰勒公式变得简单了。
等值线
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值