基础知识
机器学习中常见函数求导
-
幂次
( x u ) ′ = u x u − 1 (x^u)^\prime=ux^{u-1} (xu)′=uxu−1 -
指数
( e x ) ′ = e x (e^x)^\prime=e^{x} (ex)′=ex -
对数
( log a x ) ′ = 1 x ln a (\log _ax)^\prime=\frac{1}{x\ln a} (logax)′=xlna1
( l n x ) ′ = 1 x (ln x)^\prime=\frac{1}{x} (lnx)′=x1
求导四则运算
(
u
±
v
)
=
u
′
±
v
′
(u \pm v) = u^\prime \pm v^\prime
(u±v)=u′±v′
(
C
u
)
′
=
C
u
′
(Cu)^\prime=Cu^\prime
(Cu)′=Cu′
(
u
v
)
′
=
u
′
v
+
u
v
′
(uv)^\prime=u^\prime v + u v^\prime
(uv)′=u′v+uv′
(
u
v
)
′
=
u
′
v
−
u
v
′
v
2
(\frac{u}{v})^ \prime=\frac{u^\prime v - uv^\prime}{v^2}
(vu)′=v2u′v−uv′
显然除法的公式可以从乘法公式推导出来
复合函数求导
一个函数的自变量是另一个函数的因变量,前者称为复合函数。
y
=
f
(
g
(
x
)
)
y=f(g(x))
y=f(g(x))其中
y
=
f
(
u
)
y=f(u)
y=f(u),
u
=
g
(
x
)
u=g(x)
u=g(x)都可导,则
d y d x = d f d g d g d x \frac{dy}{dx}=\frac{df}{dg}\frac{dg}{dx} dxdy=dgdfdxdg
上面比较简单,因为
f
f
f中只有一个函数
g
g
g, 如果
y
=
f
(
g
1
(
x
)
,
g
2
(
x
)
,
g
3
(
x
)
,
.
.
.
,
g
n
(
x
)
)
y=f(g_1(x), g_2(x),g_3(x),...,g_n(x))
y=f(g1(x),g2(x),g3(x),...,gn(x))
则
d
y
d
x
=
∑
i
=
1
n
d
f
d
g
i
d
g
i
d
x
\frac{dy}{dx}=\sum_{i=1}^{n}\frac{df}{dg_i}\frac{dg_i}{dx}
dxdy=∑i=1ndgidfdxdgi
f f f中包括多个函数,则每个函数都对 x x x求导,结果相加
再复杂一点
y
=
f
(
g
1
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
m
)
,
g
2
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
m
)
,
g
3
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
m
)
,
.
.
.
,
g
n
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
m
)
)
y=f(g_1(x_1,x_2,x_3,...,x_m), g_2(x_1,x_2,x_3,...,x_m),g_3(x_1,x_2,x_3,...,x_m),...,g_n(x_1,x_2,x_3,...,x_m))
y=f(g1(x1,x2,x3,...,xm),g2(x1,x2,x3,...,xm),g3(x1,x2,x3,...,xm),...,gn(x1,x2,x3,...,xm))
则
d
y
d
x
j
=
∑
i
=
1
n
d
f
d
g
i
d
g
i
d
x
j
\frac{dy}{dx_j}=\sum_{i=1}^{n}\frac{df}{dg_i}\frac{dg_i}{dx_j}
dxjdy=∑i=1ndgidfdxjdgi
求导的网络表示
数值求导
数值求导是严格按照导数定义进行的
f
(
x
)
′
=
f
(
x
+
d
x
)
−
f
(
x
)
d
x
f(x)^\prime = \frac{f(x+dx) - f(x)}{dx}
f(x)′=dxf(x+dx)−f(x)
给定(x,dx),只要dx足够小,在一定误差范围内,把(x,dx)数值带入上式可以得到
f
(
x
)
f(x)
f(x)在
x
x
x处的导数。这种方法是有误差的,而且随着参数增加,计算量也线性提高,实用性不高。但是它可以用来校验求导代码的正确性:完成求导代码同时也要完成前向代码,对输入和参数设置初始值,前向计算输出,然后对某个参数施加扰动,重新前向计算输出,两个输出的差除以扰动得到的就是该参数在当前输入下的扰动,在误差允许范围内,应该和求导代码给出的导数一致。
f ( x ) = w x = 2 x f(x) = wx = 2x f(x)=wx=2x
x x x | d x dx dx | f ( x + d x ) − f ( x ) f(x+dx)-f(x) f(x+dx)−f(x) | $f^\prime = w =2 $ |
---|---|---|---|
1 | 0.01 | 2.02 - 2 | 2.02 − 2 0.01 = 2 \frac{2.02-2}{0.01}=2 0.012.02−2=2 |
10 | 0.1 | 20.2 - 20 | 20.2 − 20 0.1 = 2 \frac{20.2-20}{0.1}=2 0.120.2−20=2 |
0.5 | 0.001 | 1.002 - 1 | 1.002 − 1 0.001 = 2 \frac{1.002-1}{0.001}=2 0.0011.002−1=2 |
f ( x ) = x 2 f(x) = x^2 f(x)=x2
x x x | d x dx dx | f ( x + d x ) − f ( x ) f(x+dx)-f(x) f(x+dx)−f(x) | $f^\prime = 2x $ |
---|---|---|---|
1 | 0.01 | 1.0201 - 1 | 1.0201 − 1 0.01 = 2.010 ≃ 2 x \frac{1.0201 - 1}{0.01}=2.010 \simeq 2x 0.011.0201−1=2.010≃2x |
10 | 0.1 | 102.01 - 100 | 102.01 − 100 0.1 = 20.1 ≃ 2 x \frac{102.01 - 100}{0.1}= 20.1 \simeq 2x 0.1102.01−100=20.1≃2x |
0.5 | 0.001 | 0.251001 - 0.25 | 0.251001 − 0.25 0.001 = 1.001 ≃ 2 x \frac{0.251001 - 0.25}{0.001}=1.001 \simeq 2x 0.0010.251001−0.25=1.001≃2x |
f ( x ) = e x f(x) = e^x f(x)=ex
x x x | d x dx dx | f ( x + d x ) − f ( x ) f(x+dx)-f(x) f(x+dx)−f(x) | $f^\prime = e^x $ |
---|---|---|---|
1 | 0.01 | 2.7456 - 2.7182 | 2.7456 − 2.7182 0.01 = 2.7319 ≃ e 1 \frac{2.7456 - 2.7182}{0.01}=2.7319 \simeq e^1 0.012.7456−2.7182=2.7319≃e1 |
10 | 0.1 | 24343.0094 - 22026.46579 | 24343.0094 − 22026.46579 0.1 = 23165.436 ≃ e 10 \frac{24343.0094 - 22026.46579}{0.1}= 23165.436 \simeq e^{10} 0.124343.0094−22026.46579=23165.436≃e10 |
0.5 | 0.001 | 1.65037 - 1.648721 | 1.65037 − 1.648721 0.001 = 1.64954590 ≃ e 0.5 \frac{1.65037 - 1.648721}{0.001}=1.64954590 \simeq e^{0.5} 0.0011.65037−1.648721=1.64954590≃e0.5 |
为什么梯度负方向是局部下降最快的方向
证明: f ( x ) f(x) f(x)在 x 0 x_0 x0附近最小值是 x 1 x_1 x1, 则下降最快的方向和向量 x 1 − x 0 x_1 - x_0 x1−x0方向一致
-
关键点
- 假设
x
0
x_0
x0附近的最小值点是
x
1
x_1
x1,则下降最快的射线是
x
1
−
x
0
x_1 - x_0
x1−x0,而不是
x 0 − x 1 x_0 - x_1 x0−x1 - 同样在1中假设下, f ( x 1 ) − f ( x 0 ) < 0 f(x_1) - f(x_0) < 0 f(x1)−f(x0)<0
- 假设
x
0
x_0
x0附近的最小值点是
x
1
x_1
x1,则下降最快的射线是
x
1
−
x
0
x_1 - x_0
x1−x0,而不是
-
推导
考虑泰勒展开式,忽略一阶以上的项
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x) = f(x_0) + f^\prime(x_0)(x-x_0) f(x)=f(x0)+f′(x0)(x−x0)
→
f
(
x
)
−
f
(
x
0
)
=
f
′
(
x
0
)
(
x
−
x
0
)
\rightarrow f(x) - f(x_0) = f^\prime(x_0)(x-x_0)
→f(x)−f(x0)=f′(x0)(x−x0)
当前点是
x
0
x_0
x0,令
x
1
x_1
x1是
x
0
x_0
x0附近的局部极小值点,则
x
1
−
x
0
x_1 - x_0
x1−x0是
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0附近下降最快的方向
→
f
(
x
1
)
−
f
(
x
0
)
=
f
′
(
x
0
)
(
x
1
−
x
0
)
=
∣
a
∣
∣
b
∣
c
o
s
(
θ
)
∈
[
−
∣
a
∣
∣
b
∣
,
∣
a
∣
∣
b
∣
]
\rightarrow f(x_1) - f(x_0) = f^\prime(x_0)(x_1-x_0) = |a||b|cos(\theta) \in [-|a||b|, |a||b|]
→f(x1)−f(x0)=f′(x0)(x1−x0)=∣a∣∣b∣cos(θ)∈[−∣a∣∣b∣,∣a∣∣b∣]
其中
∣
a
∣
|a|
∣a∣是
f
′
(
x
0
)
f^\prime(x_0)
f′(x0)的模,
∣
b
∣
|b|
∣b∣是
x
1
−
x
0
x_1-x_0
x1−x0的模,
θ
\theta
θ是二者的夹角。
因为 x 1 x_1 x1是 x 0 x_0 x0附近的最小值点,则 f ( x 1 ) − f ( x 0 ) = − ∣ a ∣ ∣ b ∣ → c o s θ = − 1 → θ = 180 f(x_1) - f(x_0) = -|a||b| \rightarrow cos\theta = -1 \rightarrow \theta = 180 f(x1)−f(x0)=−∣a∣∣b∣→cosθ=−1→θ=180,即向量 x 1 − x 0 x_1-x_0 x1−x0这个梯度下降最快的方向和 f ′ ( x ) f^\prime(x) f′(x)夹角180,方向相反