机器学习中的求导

基础知识

机器学习中常见函数求导

  • 幂次
    ( x u ) ′ = u x u − 1 (x^u)^\prime=ux^{u-1} (xu)=uxu1

  • 指数
    ( 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)=uv+uv
( u v ) ′ = u ′ v − u v ′ v 2 (\frac{u}{v})^ \prime=\frac{u^\prime v - uv^\prime}{v^2} (vu)=v2uvuv
显然除法的公式可以从乘法公式推导出来

复合函数求导

一个函数的自变量是另一个函数的因变量,前者称为复合函数。
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 $
10.012.02 - 2 2.02 − 2 0.01 = 2 \frac{2.02-2}{0.01}=2 0.012.022=2
100.120.2 - 20 20.2 − 20 0.1 = 2 \frac{20.2-20}{0.1}=2 0.120.220=2
0.50.0011.002 - 1 1.002 − 1 0.001 = 2 \frac{1.002-1}{0.001}=2 0.0011.0021=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 $
10.011.0201 - 1 1.0201 − 1 0.01 = 2.010 ≃ 2 x \frac{1.0201 - 1}{0.01}=2.010 \simeq 2x 0.011.02011=2.0102x
100.1102.01 - 100 102.01 − 100 0.1 = 20.1 ≃ 2 x \frac{102.01 - 100}{0.1}= 20.1 \simeq 2x 0.1102.01100=20.12x
0.50.0010.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.2510010.25=1.0012x

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 $
10.012.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.74562.7182=2.7319e1
100.124343.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.009422026.46579=23165.436e10
0.50.0011.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.650371.648721=1.64954590e0.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 x1x0方向一致

  • 关键点

    1. 假设 x 0 x_0 x0附近的最小值点是 x 1 x_1 x1,则下降最快的射线是 x 1 − x 0 x_1 - x_0 x1x0,而不是
      x 0 − x 1 x_0 - x_1 x0x1
    2. 同样在1中假设下, f ( x 1 ) − f ( x 0 ) &lt; 0 f(x_1) - f(x_0) &lt; 0 f(x1)f(x0)<0
  • 推导
    考虑泰勒展开式,忽略一阶以上的项
    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)(xx0)

→ 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)(xx0)
当前点是 x 0 x_0 x0,令 x 1 x_1 x1 x 0 x_0 x0附近的局部极小值点,则 x 1 − x 0 x_1 - x_0 x1x0 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)(x1x0)=abcos(θ)[ab,ab]
其中 ∣ a ∣ |a| a f ′ ( x 0 ) f^\prime(x_0) f(x0)的模, ∣ b ∣ |b| b x 1 − x 0 x_1-x_0 x1x0的模, θ \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)=abcosθ=1θ=180,即向量 x 1 − x 0 x_1-x_0 x1x0这个梯度下降最快的方向和 f ′ ( x ) f^\prime(x) f(x)夹角180,方向相反

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值