误差反向传播中的链式求导法则

1 复合函数和可微性

有函数 y = f ( u ) y= f(u) y=f(u) , 同时有另一个函数 u = g ( x ) u= g(x) u=g(x), 当 y 表示为 x 的函数时,可以变为 y = f ( g ( x ) ) y= f(g(x)) y=f(g(x)) 的嵌套结构。嵌套结构 f ( g ( x ) ) f(g(x)) f(g(x)) 称为 f ( u ) f(u) f(u) g ( x ) g(x) g(x)复合函数

对于函数 f 的可微性,我们说函数 f 在 x0 点可微,也即是函数 f 在点 x0 处的极限存在:
在这里插入图片描述

2 单变量函数链式法则

单变量函数 y = f ( u ) y= f(u) y=f(u), u 表示为单变量函数 u = g ( x ) u= g(x) u=g(x) 时,复合函数 f ( g ( x ) ) f(g(x)) f(g(x)) 的导函数可以通过下式求出:
d y d x = d y d u d u d x (1) \frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx} \tag{1} dxdy=dudydxdu(1)

:对 x 的函数 y = 1 1 + e − ( w x + b ) y=\frac{1}{1+e^{-(wx+b)}} y=1+e(wx+b)1 (w, b 为常数)求导

解: 设函数 y = 1 1 + e − u y=\frac{1}{1+e^{-u}} y=1+eu1, u = w x + b u=wx+b u=wx+b,第一个式子为 sigmoid 函数,导数为 d y d u = y ( 1 − y ) \frac{dy}{du}=y(1-y) dudy=y(1y), 第二个式子 d u d x = w \frac{du}{dx}=w dxdu=w
所以,可以得到:
d y d x = d y d u d u d x = y ( 1 − y ) w = w 1 + e − ( w x + b ) ( 1 − 1 1 + e − ( w x + b ) ) \frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}=y(1-y)w=\frac{w}{1+e^{-(wx+b)}}(1-\frac{1}{1+e^{-(wx+b)}}) dxdy=dudydxdu=y(1y)w=1+e(wx+b)w(11+e(wx+b)1)

补充: 关于 sigmoid 函数 s ( x ) = 1 1 + e − x s(x)=\frac{1}{1+e^{-x}} s(x)=1+ex1 的求导:

# 定义 sigmoid 函数,将soimoid 每一步都分解为一个函数
def sigmoid(x):
    f = -x
    g = math.exp(f)
    w = 1 + g
    v = 1 / w
    return v

在这里插入图片描述
S ′ = e − x ( 1 + e − x ) 2 = 1 + e − x − 1 ( 1 + e − x ) 2 = S − S 2 = S ( 1 − S ) S^{'}=\frac{e^{-x}}{(1+e^{-x})^2}=\frac{1+e^{-x}-1}{(1+e^{-x})^2}=S-S^2=S(1-S) S=(1+ex)2ex=(1+ex)21+ex1=SS2=S(1S)

3 多变量函数链式法则

3.1 多变量函数求导

多变量通用函数可以看作是 n 维的数据映射到 m 维数据, f : R n − > R m f:R^n->R^m f:Rn>Rm, 输出的 m个数据的每一个值都可以看作是由输入的 n 个变量计算而来的

如果我们将输出向量的每个分量 y i y_i yi i ∈ [ 1 , m ] i∈[1,m] i[1,m] ,看作一个独立的多元变量函数,那我们就可以对 y i y_i yi 的每个 x j x_j xj j ∈ [ 1 , n ] j∈[1,n] j[1,n] 求偏导数:
[ ∂ y i ∂ x 1 , ∂ y i ∂ x 2 , ⋯   , ∂ y i ∂ x n ] \left[ \frac{\partial y_i }{\partial x_1}, \frac{\partial y_i }{\partial x_2},\cdots,\frac{\partial y_i }{\partial x_n} \right] [x1yi,x2yi,,xnyi]
将每个 y i y_i yi 的梯度组合就得到了雅各比矩阵
J = ( ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ) \begin{aligned}J=\left(\begin{array}{ccc} \frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}}\\ \vdots & \ddots & \vdots\\ \frac{\partial y_{m}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}} \end{array}\right)\end{aligned} J=x1y1x1ymxny1xnym
也可写作:
J = ∂ ( y 1 , … , y m ) ∂ ( x 1 , … , x n ) J=\frac{\partial(y_1,…,y_m)}{\partial(x_1,…,x_n)} J=(x1,,xn)(y1,,ym)
雅可比矩阵表示了函数 f 在每一处可导点的导数。具体地说,设 Δx 为一在 x 处的位移向量(假设为列向量),则 J(x)⋅Δx 就是函数值的位移向量(类似一元数值函数里 Δy=y′(x)∗Δx),该函数值的位移向量即为 x 处的f(x)增量的最佳线性逼近(更熟悉点的词叫全微分)。类似于导数,雅可比矩阵是函数局部的线性化,使用矩阵形式来表示微分(线性逼近)这个线性变换

3.2 多变量函数链式法则

根据输出为标量还是为向量,分为两种情况

情况1 如果多变函数形式为 f : R n − > R 1 f:R^n->R^1 f:Rn>R1 ,即输出为标量,而不是向量

下面是两个变量的情况, z 为 u,v 的函数,而 u , v 又分别为 x, y 的函数。从下图可以看出 x 对 z 的贡献有两条通道,一条经过 u, 一条经过 v,所以当 z 对 x 求导时也需要分成两部分,即:
∂ z ∂ x = ∂ z ∂ u ∂ u ∂ x + ∂ z ∂ v ∂ v ∂ x \frac{\partial{z}}{\partial{x}}=\frac{\partial{z}}{\partial{u}}\frac{\partial{u}}{\partial{x}}+\frac{\partial{z}}{\partial{v}}\frac{\partial{v}}{\partial{x}} xz=uzxu+vzxv
在这里插入图片描述
同理对 y 变量求导
∂ z ∂ y = ∂ z ∂ u ∂ u ∂ y + ∂ z ∂ v ∂ v ∂ y \frac{\partial{z}}{\partial{y}}=\frac{\partial{z}}{\partial{u}}\frac{\partial{u}}{\partial{y}}+\frac{\partial{z}}{\partial{v}}\frac{\partial{v}}{\partial{y}} yz=uzyu+vzyv

情况2 如果多变函数形式为 f : R n − > R m f:R^n->R^m f:Rn>Rm ,即输出为向量,情形如下面的简图所示,输入 x i x_i xi 经过层层函数最后输出 y 向量
在这里插入图片描述
y 1 y_1 y1 v 1 v_1 v1 求导时,需要经过 u 中的 n 个函数:
在这里插入图片描述
y 对 所有 u 层求导可以表示为之前提到的形式,矩阵大小为 (m,n)
J y ( u ) = ∂ ( y 1 , … , y m ) ∂ ( u 1 , … , u n ) J_y{(u)}=\frac{\partial(y_1,…,y_m)}{\partial(u_1,…,u_n)} Jy(u)=(u1,,un)(y1,,ym)
而 u 层对所有的 v 求导又可以表示为下面的形式,矩阵大小为(n,n)
J u ( v ) = ∂ ( u 1 , … , u n ) ∂ ( v 1 , … , v n ) J_u{(v)}=\frac{\partial(u_1,…,u_n)}{\partial(v_1,…,v_n)} Ju(v)=(v1,,vn)(u1,,un)
每一层都可以写为雅各比矩阵形式,y 对 v 整个多元复合函数的求导过程可以表述成更简洁的形式,大小为 (m,n)

J y ( u ) = J y ( u ( v ) ) J u ( v ) J_{y(u)}=J_y{(u(v))}J_u{(v)} Jy(u)=Jy(u(v))Ju(v)
也即两个矩阵相乘:
∂ ( y 1 , … , y m ) ∂ ( v 1 , … , v n ) = ∂ ( y 1 , … , y m ) ∂ ( u 1 , … , u n ) ∂ ( u 1 , … , u n ) ∂ ( v 1 , … , v n ) \frac{\partial(y_1,…,y_m)}{\partial(v_1,…,v_n)}=\frac{\partial(y_1,…,y_m)}{\partial(u_1,…,u_n)}\frac{\partial(u_1,…,u_n)}{\partial(v_1,…,v_n)} (v1,,vn)(y1,,ym)=(u1,,un)(y1,,ym)(v1,,vn)(u1,,un)
从直观上理解一下这个等式。首先,我们知道雅可比矩阵的“成因”是用矩阵来表示一阶微分的,也就是把一阶微分的算子当成一个线性变换,而复合函数等于是一个嵌套,也就是函数的函数,对应到线性变换里,也就是线性变换的线性变换,而我们又知道用矩阵表示线性变换时这种“线性变换的线性变换”,就是相当于两个矩阵的乘积。到这里。我们把微积分和线性代数两种工具结合到了一起,就得到了这个结果。

参考

1 The Chain Rule of Calculus
2 深度学习中的数学
3 向量函数的雅可比矩阵与链式法则
4 复杂多元复合函数的导数和雅克比矩阵

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值