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