精华内容
下载资源
问答
  • 美好的目标函数求未知数的偏导数是一个漂亮表达式,会让你惊叹到数学如此婀娜多娇。    如果有人能够求得未知变量的解析表达式,那该是多么幸福的事情,现实是残酷的。(我知道你想说伪逆是最小二乘的解析表达式...

    前记

       无论是机器学习还是深度学习,都是构造目标函数,这个目标函数内部有很多未知变量,我们的目标就是求得这些未知变量。
       那么如何构造目标函数?这是一个非常优美的话题(本文未讲,先欠着)。美好的目标函数求未知数的偏导数是一个漂亮表达式,会让你惊叹到数学如此婀娜多娇。
       如果有人能够求得未知变量的解析表达式,那该是多么幸福的事情,现实是残酷的。(我知道你想说伪逆是最小二乘的解析表达式,然后呢……难道你就打算只学会一个最简单的最小二乘吗?)。为此大部分都是采用梯度下降(那些别的神奇的算法都是基于梯度下降),那何为梯度下降?
       如: L = f ( x ) L=f(x) L=f(x),采用泰勒(不认识泰勒,就假装不存在这两个字)一阶导数展开:
    f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x) = f(x_0)+f^{'}(x_0)(x-x_0) f(x)=f(x0)+f(x0)(xx0)
       想求得 f ( x ) f(x) f(x)的最小值,我先蒙一个 x 0 x_0 x0,然后我就拼命的更新 x n e w x^{new} xnew,令每次更新的差值为 Δ x = x n e w − x 0 \Delta x = x^{new}-x_0 Δx=xnewx0,则:
    f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = f ( x 0 ) + f ′ ( x 0 ) Δ x f(x) = f(x_0)+f^{'}(x_0)(x-x_0)= f(x_0)+f^{'}(x_0)\Delta x f(x)=f(x0)+f(x0)(xx0)=f(x0)+f(x0)Δx
    Δ x = − η ⋅ f ′ ( x 0 ) ( η > 0 ) \Delta x = -\eta \cdot f^{'}(x_0) (\eta>0) Δx=ηf(x0)η>0时,
    f ( x ) = f ( x 0 ) − η ⋅ f ′   2 ( x 0 ) f(x) = f(x_0) - \eta \cdot f^{'^~2}(x_0) f(x)=f(x0)ηf 2(x0)
       至少我每次 f ( x n e w ) f(x^{new}) f(xnew)总比我之前 f ( x 0 ) f(x_0) f(x0) 要减少一点点 η ⋅ f ′   2 ( x 0 ) \eta \cdot f^{'^~2}(x_0) ηf 2(x0)吧(此话不严谨,因为学习率很大的时候,你就会筐瓢)。那个 η \eta η就是梯度学习率。
       如果你觉得不够精确,我要在二阶泰勒展开,那就是“牛顿法”。
       本文通篇就是在围绕着如何求一阶导数展开。

    如何求解一阶导数

       学习数学,总是在学习的时候很痛苦,这个鬼画符得出的结论要表达什么?我学了有什么用?用起来的时候发现“数学真香”。所以本文尽量每讲一个知识点时都拼凑深度学习或者机器学习中的知识点。
       先刷一个链式法则:
       所谓的链式法则,其实就是把一个个好大巴大的函数当做一个整体,求全微分,然后逐步肢解一个个内部函数。
    在这里插入图片描述
       如图所示, J = F ( f ( x ) , g ( x ) ) J = F(f(x),g(x)) J=F(f(x),g(x));
       求全微分:
    Δ J = F f ′ ⋅ Δ f + F g ′ ⋅ Δ g \Delta J = F^{'}_{f}\cdot \Delta f + F^{'}_{g}\cdot \Delta g ΔJ=FfΔf+FgΔg
       又因为: Δ f = f ′ ⋅   Δ x ; Δ g = g ′ ⋅   Δ x \Delta f = f^{'}\cdot\ \Delta x;\Delta g = g^{'}\cdot\ \Delta x Δf=f ΔxΔg=g Δx从而:
    Δ J = F f ′ ⋅ f ′ ⋅   Δ x + F g ′ ⋅ g ′ ⋅   Δ x \Delta J = F^{'}_{f}\cdot f^{'}\cdot\ \Delta x+ F^{'}_{g}\cdot g^{'}\cdot\ \Delta x ΔJ=Fff Δx+Fgg Δx
    写成链式:
    ∂ J ∂ x = ∂ J ∂ f ⋅ ∂ f ∂ x + ∂ J ∂ g ⋅ ∂ g ∂ x \frac{\partial J}{\partial x} = \frac{\partial J}{\partial f}\cdot\frac{\partial f}{\partial x}+\frac{\partial J}{\partial g}\cdot\frac{\partial g}{\partial x} xJ=fJxf+gJxg
      总结一下链式法则,总是需要找到变量至目标的路径,然后依次从后往前展开。

    1.实数对向量求偏导

    f ( x ) = a T x = x T a f(x) = \bm{a}^T\bm{x}= \bm{x}^T\bm{a} f(x)=aTx=xTa
    其中 x = [ x 1 , x 2 , x i , . . .   , x n ] T , a = [ a 1 , a 2 , a i , . . .   , a n ] T \bm{x}=[x_1,x_2,x_i,...\ ,x_n]^T,\bm{a}=[a_1,a_2,a_i,...\ ,a_n]^T x=[x1,x2,xi,... ,xn]T,a=[a1,a2,ai,... ,an]T
    ∵ f ( x ) = ∑ i = 1 n a i x i \because f(x) = \sum\limits_{i=1}^n a_ix_i f(x)=i=1naixi
    ∂ f ∂ x i = a i \frac{\partial f}{\partial x_i} = a_i xif=ai
    ∴ ∂ f ∂ x = [ a 1 , a 2 , a i , . . .   , a n ] T = a \therefore\quad\frac{\partial f}{\partial \bm{x}} =[a_1,a_2,a_i,...\ ,a_n]^T=\bm{a} xf=[a1,a2,ai,... ,an]T=a
      一个实数对一个列向量求导数,结果还是一个列向量。其实记忆起来就按照 f ( x ) = a ⋅ x , ( a , x 为 实 数 ) f(x) =a\cdot x,(a,x为实数) f(x)=axa,x来记忆,只是结果必须要与维度对齐。
      个人建议所有的导数在不太熟悉的情况下,对向量以及矩阵求导都要带上维度
      比如 f ( x ) = x T a f(x) = \bm{x}^T\bm{a} f(x)=xTa, f ( x ) f(x) f(x)对x求导数立马想到 f ( x ) = a ⋅ x f(x)=a\cdot x f(x)=ax,这个肯定知道一元函数的导数: f ′ ( x ) = a f'(x)=a f(x)=a,但是还在犹豫当对向量求偏导数时,结果为 a a a还是 a T a^T aT ?显然对列向量偏导数应该还是为列向量,因此:
    f ′ ( x ) n × 1 = a n × 1 \mathop{f'(x)}\limits_{n\times1}=\mathop{\bm{a}}\limits_{n\times1} n×1f(x)=n×1a
      现在就可以轻松应对机器学习中的LR(逻辑斯蒂回归)分析(仅考虑一个样本样本,该样本的信息为 x \bm{x} x向量,标签为y取值等于0或者等于1)。
    z = ω T x z = \bm{\omega}^T\bm{x} z=ωTx
    a = f ( z ) = 1 1 + e − z a = f(z)=\frac{1}{1+e^{-z}} a=f(z)=1+ez1
    损 失 函 数 : J = − y l n ( a ) − ( 1 − y ) l n ( 1 − a ) 损失函数:J=-yln(a)-(1-y)ln(1-a) :J=yln(a)(1y)ln(1a)
    求得 ∂ J / ∂ z = ( ∂ J / ∂ a ) ⋅ ( ∂ a / ∂ z ) = ( a − y ) \partial J/\partial z =(∂J/∂a)\cdot(∂a/∂z)= (a-y) J/z=(J/a)(a/z)=(ay)
    由实数对向量求偏导的结论, ∂ z / ∂ ω = x \partial z/\partial\bm{\omega} = \bm{x} z/ω=x
    ∂ J / ∂ ω = ( ∂ J / ∂ z ) ⋅ ( ∂ z / ∂ ω ) = ( a − y ) ⋅   x \partial J/\partial \bm{\omega} =(∂J/∂z)\cdot(∂z/∂\bm{\omega})= (a-y)\cdot \ \bm{x} J/ω=(J/z)(z/ω)=(ay) x
      是不是发现 b b b不见了,将 x \bm{x} x扩展为 [ x ; 1 ] [\bm{x};1] [x1], ω \bm{\omega} ω扩展为 [ ω ; b ] [\bm{\omega};b] [ωb]即可。

    2.向量对向量、矩阵求偏导

      先给出多层全连接神经网络并经过 s o f t m a x softmax softmax进行m个分类的结构图。
    在这里插入图片描述
      目的是求得所有层之间的V和b参数,因为所有的 z i → a i z^i\to a^i ziai为非线性函数,且未含有任何需要辨识的参数。除了最后的 s o f t m a x softmax softmax,甚至所有的非线性函数都是单输入单输出函数。

    2.1从后往前递推,先求 ∂ J / ∂ z L \partial J/\partial z^L J/zL,其结论为:

    ∂ J / ∂ z L = a L − y \partial J/\partial z^L=a^L-\bm{y} J/zL=aLy
      似曾相识,和LR中 ∂ J / ∂ z = ( ∂ J / ∂ a ) ⋅ ( ∂ a / ∂ z ) = ( a − y ) \partial J/\partial z =(∂J/∂a)\cdot(∂a/∂z)= (a-y) J/z=(J/a)(a/z)=(ay)型式相同,这就是前记中描述的,构造较好的目标函数能够得到漂亮的数学型式。
      关于 s o f t m a x softmax softmax层的偏导数求法,本文不做进一步分析,搜索“softmax反向传播”,都有详细的推导。只说一下思路,以对 z i L z^L_i ziL一个元素求偏导为例,先要 J J J对所有的 a j L a^L_j ajL求偏导,因为 a L a^L aL层所有元素都与 z i L z^L_i ziL有关系,而且当 j ≠ i j \not= i j=i时, a j L a^L_j ajL仅有分母中含有 z i L z^L_i ziL j = i j=i j=i时, a j L a^L_j ajL分子、分母中含有 z i L z^L_i ziL(这就是上图中softmax层我将水平连接线画成了虚线,以与 j ≠ i j \not= i j=i区别开)。

    2.2继续求 ∂ J / ∂ a L − 1 \partial J/\partial a^{L-1} J/aL1

      上面已经求得 ∂ J / ∂ z L \partial J/\partial z^L J/zL,现在找其与 ∂ J / ∂ a L − 1 \partial J/\partial a^{L-1} J/aL1的关系。
    z L = V L ⋅   a L − 1 z^L = V^L\cdot \ a^{L-1} zL=VL aL1
    ∴ Δ z L ⟹ V L ⋅   Δ a L − 1 \therefore \Delta z^L \Longrightarrow V^L\cdot \ \Delta a^{L-1} ΔzLVL ΔaL1
    Δ J ⇒ ( ∂ J ∂ z L ) T ⋅ Δ z L ⇒ ( ∂ J ∂ z L ) T ⋅   ( V L ⋅   Δ a L − 1 ) ⇒ ( ∂ J ∂ z L ) T ⋅   V L ⋅ Δ a L − 1 ⇒ ( ( V L ) T ⋅ ∂ J ∂ z L ) T ⋅ Δ a L − 1 \begin{aligned} \Delta J & \Rightarrow (\frac{\partial J}{\partial z^L})^T\cdot\Delta z^L\\ & \Rightarrow (\frac{\partial J}{\partial z^L})^T\cdot\ (V^L\cdot \ \Delta a^{L-1}) \\ &\Rightarrow (\frac{\partial J}{\partial z^L})^T\cdot\ V^L\cdot\Delta a^{L-1}\\ &\Rightarrow ((V^{L})^T\cdot\frac{\partial J}{\partial z^L})^T\cdot\Delta a^{L-1}\\ \end{aligned} ΔJ(zLJ)TΔzL(zLJ)T (VL ΔaL1)(zLJ)T VLΔaL1((VL)TzLJ)TΔaL1
      同时:
    Δ J ⇒ ( ∂ J ∂ a L − 1 ) T ⋅ Δ a L − 1 \Delta J \Rightarrow (\frac{\partial J}{\partial a^{L-1}})^T\cdot\Delta a^{L-1} ΔJ(aL1J)TΔaL1
      与上面的“等式”对比可知:
    ∴ ∂ J ∂ a L − 1 = ( V L ) T ⋅ ∂ J ∂ z L (1) \therefore\frac{\partial J}{\partial a^{L-1}} = (V^{L})^T\cdot\frac{\partial J}{\partial z^L} \tag{1} aL1J=(VL)TzLJ(1)

       “ ⇒ ” “\Rightarrow” 这个符号在本文中意味着啥?先别急,你就当做一个等于号来看待最后再解释。

    2.3继续求 ∂ J / ∂ V L \partial J/\partial V^{L} J/VL

      这次打算从最基本的 V L V^L VL矩阵单个元素 V i j L V^L_{ij} VijL处理开始,然后逐步分析行 V i 行 L V^L_{i行} ViL,然得出整个矩阵的偏导数 ∂ J / ∂ V L \partial J/\partial V^{L} J/VL
    ∵ ∂ z i L ( z i L = V i 行 ⋅ a L − 1 ) ∂ V i j = a j L − 1 \because \frac{\partial z^L_i(z^L_i = V_{i行}\cdot a^{L-1})}{\partial V_{ij}} =a^{L-1}_j VijziL(ziL=ViaL1)=ajL1
    ∴ ∂ J ∂ V i j = ∂ J ∂ z i L ⋅ ∂ z i L ∂ V i j = ∂ J ∂ z i L ⋅ a j L − 1 (对单个元素求偏导) \therefore \frac{\partial J}{\partial V_{ij}} = \frac{\partial J}{\partial z^L_i} \cdot \frac{\partial z^L_i}{\partial V_{ij}} = \frac{\partial J}{\partial z^L_i}\cdot a^{L-1}_j \tag{对单个元素求偏导} VijJ=ziLJVijziL=ziLJajL1()
    ∴ ∂ J ∂ V i 行 = ∂ J ∂ z i L ⋅ ( a L − 1 ) T (对行求偏导) \therefore \frac{\partial J}{\partial V_{i行}} = \frac{\partial J}{\partial z^L_i}\cdot (a^{L-1})^T \tag{对行求偏导} ViJ=ziLJ(aL1)T()
      扩展至对矩阵求偏导:
    ∴ ∂ J ∂ V = [ ∂ J ∂ z 1 L ⋅ ( a L − 1 ) T ⋮ ∂ J ∂ z m L ⋅ ( a L − 1 ) T ] = ∂ J ∂ z L ⋅ ( a L − 1 ) T (2) \therefore \frac{\partial J}{\partial V} =\left[ \begin{matrix} \frac{\partial J}{\partial z^L_1}\cdot (a^{L-1})^T \\ \vdots \\ \frac{\partial J}{\partial z^L_m}\cdot (a^{L-1})^T \end{matrix} \right] = \frac{\partial J}{\partial z^L}\cdot (a^{L-1})^T \tag{2} VJ=z1LJ(aL1)TzmLJ(aL1)T=zLJ(aL1)T(2)
      关于对 V V V的偏导数求法是按照定义,一五一十一板一眼的求,后面在解释" ⇒ \Rightarrow "符号时,会进一步通过矩阵的方法来获得相同的表达式。

    继续求 ∂ J / ∂ z L − 1 \partial J/\partial z^{L-1} J/zL1

      以图中 a L − 1 = δ ( z L − 1 ) a^{L-1} = \delta(z^{L-1}) aL1=δ(zL1)为例,显然: ∂ a i L − 1 / ∂ z i L − 1 = δ ( z i L − 1 ) ⋅ ( 1 − δ ( z i L − 1 ) ) \partial a^{L-1}_i/\partial z^{L-1}_i = \delta(z^{L-1}_i)\cdot(1-\delta(z^{L-1}_i)) aiL1/ziL1=δ(ziL1)(1δ(ziL1))
    ∴ ∂ J / ∂ z = ∂ J ∂ a ⊙ ∂ a ∂ z = ∂ J ∂ a ⊙ δ ( z L − 1 ) ⊙ ( 1 − δ ( z L − 1 ) ) \therefore \partial J/\partial z =\frac{\partial J}{\partial a} \odot \frac{\partial a}{\partial z}= \frac{\partial J}{\partial a} \odot \delta(z^{L-1})\odot(1-\delta(z^{L-1})) J/z=aJza=aJδ(zL1)(1δ(zL1))
      检查一下这个表达式中,所有 ⊙ \odot 两边的表达式都为 k × 1 k\times1 k×1维的列向量。个人感觉上式凭直觉是显而易见的,下面开始推导:
    ∂ J ∂ a ⊙ Δ a ⇒ ∂ J ∂ a ⊙ [ δ ( z L − 1 ) ⊙ ( 1 − δ ( z L − 1 ) ) ⊙ Δ z ] ⇒ [ ∂ J ∂ a ⊙ δ ( z L − 1 ) ⊙ ( 1 − δ ( z L − 1 ) ) ] ⊙ Δ z \begin{aligned} \frac{\partial J}{\partial a} \odot \Delta a &\Rightarrow\frac{\partial J}{\partial a}\odot [\delta(z^{L-1})\odot(1-\delta(z^{L-1}))\odot \Delta z] \\ &\Rightarrow [\frac{\partial J}{\partial a} \odot\delta(z^{L-1})\odot(1-\delta(z^{L-1}))]\odot \Delta z\end{aligned} aJΔaaJ[δ(zL1)(1δ(zL1))Δz][aJδ(zL1)(1δ(zL1))]Δz
      上式为左右两个列向量"相等",代表 两个列向量所有元素对应相等,那两边向量元素和也必然相等
    Δ J ⇒ ( ∂ J ∂ a ) T ⋅ Δ a ⇒ [ ∂ J ∂ a ⊙ δ ( z L − 1 ) ⊙ ( 1 − δ ( z L − 1 ) ) ] T ⋅   Δ z \Delta J \Rightarrow(\frac{\partial J}{\partial a})^T \cdot \Delta a \Rightarrow [\frac{\partial J}{\partial a} \odot\delta(z^{L-1})\odot(1-\delta(z^{L-1}))]^T\cdot\ \Delta z ΔJ(aJ)TΔa[aJδ(zL1)(1δ(zL1))]T Δz
      同时: Δ J ⇒ ( ∂ J ∂ z L − 1 ) T ⋅ Δ z L − 1 \Delta J \Rightarrow(\frac{\partial J}{\partial z^{L-1}})^T\cdot\Delta z^{L-1} ΔJ(zL1J)TΔzL1
       ∴ ∂ J / ∂ z L − 1 = ∂ J ∂ a L − 1 ⊙ δ ( z L − 1 ) ⊙ ( 1 − δ ( z L − 1 ) ) (3) \therefore\partial J/\partial z^{L-1} =\frac{\partial J}{\partial a^{L-1}} \odot\delta(z^{L-1})\odot(1-\delta(z^{L-1})) \tag{3} J/zL1=aL1Jδ(zL1)(1δ(zL1))(3)
      老实说,公式(3)的推导我也不知道是不是在画蛇添足……
      先将第2节内容《向量对向量、矩阵求偏导》做个总结:
      公式1,对向量的偏导数传递至向量的偏导数;两个向量关系为矩阵相乘。
      公式2,对向量的偏导数传递至矩阵的偏导数;
      公式3,对向量的偏导数传递至向量的偏导数;两个向量之间元素为一一对应的函数关系。
      有了以上公式三联,就可以通过梯度下降实现全连接神经网络多分类的参数辨识。2.1节能够得到对 z L z^L zL的偏导数,然后通过公式(2)得到 L L L层的参数 V L V^L VL,结合公式(1)(3)即可往前推进一层至 L − 1 L-1 L1层,依次类推(本文没有考虑偏置项 b b b,原理类似)。

    3.Hadamard积求偏导

      其实上述2.3节里面就有hadamard积的微分,这里还是单独陈列出来。
      已知: z = x ⊙ y ; J = f ( z ) ; z=x \odot y;J=f(z); z=xy;J=f(z);各个变量的维度: z [ m × 1 ] , x [ m × 1 ] , y [ m × 1 ] , J [ 1 × 1 ] z[m\times1],x[m\times1],y[m\times1],J[1\times1] z[m×1],x[m×1],y[m×1],J[1×1]
    求: ∂ J / ∂ x ? \partial J/\partial x? J/x?
    ∂ J / ∂ x = [ ∂ J ∂ x 1   ⋮ ∂ J ∂ x m ] = [ ∂ J ∂ z 1 ⋅ y 1   ⋮ ∂ J ∂ z m ⋅ y m ] = ∂ J ∂ z ⊙ y = y ⊙ ∂ J ∂ z (4) \partial J/\partial x = \left[ \begin{matrix} \frac{\partial J}{\partial x_1}\ \\ \vdots \\ \frac{\partial J}{\partial x_m} \end{matrix} \right] =\left[ \begin{matrix} \frac{\partial J}{\partial z_1}\cdot y_1\ \\ \vdots \\ \frac{\partial J}{\partial z_m}\cdot y_m \end{matrix} \right]= \frac{\partial J}{\partial z}\odot y=y \odot \frac{\partial J}{\partial z}\tag{4} J/x=x1J xmJ=z1Jy1 zmJym=zJy=yzJ(4)
      可我还是喜欢上面画蛇添足的思路。

    4.所有偏导推导思路

      4.1当仅有华山一条道,且仅改变单个变量时,可以有如下表达式:
    Δ J = ( ∂ J / ∂ f ) T ⋅ Δ f = ( ∂ J / ∂ x ) T ⋅ Δ x (I) \Delta J = (\partial J/ \partial f)^T\cdot \Delta f= (\partial J/ \partial x)^T\cdot \Delta x \tag{I} ΔJ=(J/f)TΔf=(J/x)TΔx(I)
    其中维度: f [ m × 1 ] , x [ k × 1 ] , J [ 1 × 1 ] f[m\times1],x[k\times1],J[1\times1] f[m×1],x[k×1],J[1×1]
      何为华山一条道?以全微分图为例,你会发现上式是不对的,但是如果去掉 g g g路径则没有问题。
      何为仅改变单个变量?以 z L = V L ⋅   a L − 1 z^L = V^L\cdot \ a^{L-1} zL=VL aL1为例,实则:
    Δ z L = Δ V L ⋅   a L − 1 + V L ⋅ Δ a L − 1 \Delta z^L = \Delta V^L\cdot \ a^{L-1}+V^L\cdot \Delta a^{L-1} ΔzL=ΔVL aL1+VLΔaL1
      但是如果仅考虑对单个变量 a L − 1 a^{L-1} aL1求偏导(即认为别的变量为常量,如 V L V^L VL变量),是可以认为:
    Δ J = ( ∂ J / ∂ z L ) T ⋅ Δ z L ⇒ ( ∂ J / ∂ a L − 1 ) T ⋅ Δ a L − 1 \Delta J =(\partial J/ \partial z^L)^T\cdot \Delta z^L \Rightarrow (\partial J/ \partial a^{L-1})^T\cdot \Delta a^{L-1} ΔJ=(J/zL)TΔzL(J/aL1)TΔaL1
      这也是为什么之前说" ⇒ \Rightarrow “符号直接当作等号”="来看。有了4.1则公式(1)的推导手到擒来。
      在满足4.1的条件下,矩阵偏导数全微分表达式又是如何呢?
      4.2矩阵偏导数全微分表达式
      显然不是 Δ J = ( ∂ J / ∂ V ) T ⋅ Δ V \Delta J = (\partial J/ \partial V)^T\cdot \Delta V ΔJ=(J/V)TΔV,维度对不上,正确的表达式应该是:
    Δ J = T r ( ( ∂ J / ∂ V ) T ⋅ Δ V ) (II) \Delta J = Tr((\partial J/ \partial V)^T\cdot \Delta V)\tag{II} ΔJ=Tr((J/V)TΔV)(II)
      其中 T r ( ) Tr() Tr()为矩阵的迹,矩阵的迹有性质: T r ( A ⋅ B ) = T r ( B ⋅ A ) Tr(A\cdot B)=Tr(B\cdot A) Tr(AB)=Tr(BA)。公式(II)看起来很复杂实则就是两个表达式的对应元素相乘的和。
      为此,再把公式(2)用4.2的知识推导一遍:
    Δ J = ( ∂ J / ∂ z ) T ⋅ Δ z ( ∵ Δ z ⇒ Δ V ⋅ a ) = ( ∂ J / ∂ z ) T ⋅ ( Δ V ⋅ a ) ( ∵ 行 向 量 乘 以 列 向 量 等 于 列 向 量 乘 以 行 向 量 的 迹 ) = T r ( ( Δ V ⋅ a ) ⋅ ( ∂ J / ∂ z ) T ) = T r ( Δ V ⋅ a ⋅ ( ∂ J / ∂ z ) T ) = T r ( Δ V ⋅ ( ∂ J / ∂ z ⋅ a T ) T ) = T r ( ( ∂ J / ∂ z ⋅ a T ) T ⋅ Δ V ) \begin{aligned} \Delta J & =(\partial J/ \partial z)^T\cdot \Delta z \qquad (\because\Delta z \Rightarrow \Delta V \cdot a)\\ & = (\partial J/ \partial z)^T\cdot (\Delta V \cdot a)\\ & (\because 行向量乘以列向量等于列向量乘以行向量的迹)\\ & =Tr( (\Delta V \cdot a)\cdot (\partial J/ \partial z)^T) \\ & =Tr( \Delta V \cdot a\cdot (\partial J/ \partial z)^T) \\ & =Tr( \Delta V \cdot (\partial J/ \partial z\cdot a^T)^T)\\ & =Tr((\partial J/ \partial z\cdot a^T)^T \cdot \Delta V) \end{aligned} ΔJ=(J/z)TΔz(ΔzΔVa)=(J/z)T(ΔVa)()=Tr((ΔVa)(J/z)T)=Tr(ΔVa(J/z)T)=Tr(ΔV(J/zaT)T)=Tr((J/zaT)TΔV)
      与公式(II)对比便知: ∂ J / ∂ V = ∂ J / ∂ z ⋅ a T \partial J/ \partial V = \partial J/ \partial z\cdot a^T J/V=J/zaT,可见利用4.1以及4.2的知识,可以相对较为轻松的完成公式(1)(2)的推导。
      关于hadamard积的微分求导,也可以利用4.1,4.2的知识(再次重复公式(3))。
    ∂ J / ∂ z ⊙ Δ z = ∂ J / ∂ z ⊙ ( y ⊙ Δ x ) = ( ∂ J / ∂ z ⊙ y ) ⊙ Δ x \partial J/ \partial z\odot\Delta z = \partial J/ \partial z\odot (y\odot\Delta x)=(\partial J/ \partial z\odot y)\odot\Delta x J/zΔz=J/z(yΔx)=(J/zy)Δx
      等式左右两个向量相等则其所有元素之和相等。
    ( ∂ J / ∂ z ) T ⋅ Δ z = ( ∂ J / ∂ z ⊙ y ) T ⋅ Δ x (\partial J/ \partial z)^T\cdot\Delta z =(\partial J/ \partial z\odot y)^T\cdot\Delta x (J/z)TΔz=(J/zy)TΔx
    ∴ ∂ J / ∂ x = ∂ J / ∂ z ⊙ y \therefore \partial J/ \partial x = \partial J/ \partial z\odot y J/x=J/zy
      实际上, a T ⋅ ( b ⊙ c ) = ( a ⊙ b ) T ⋅ c a^T\cdot(b\odot c) = (a\odot b)^T\cdot c aT(bc)=(ab)Tc(凭直觉该式应该是没错的, 到底有没有这个性质我也没去查)
    ( ∂ J / ∂ z ) T ⋅ Δ z = ( ∂ J / ∂ z ) T ⋅ ( y ⊙ Δ x ) = ( ∂ J / ∂ z ⊙ y ) T ⋅ Δ x (\partial J/ \partial z)^T\cdot\Delta z = (\partial J/ \partial z)^T\cdot (y\odot\Delta x)=(\partial J/ \partial z\odot y)^T\cdot\Delta x (J/z)TΔz=(J/z)T(yΔx)=(J/zy)TΔx
      通过总结再回过来看偏微分的链式表达式,似乎能够闭卷了,可是如果纯粹靠推导难免有点容易出错。此时想起来高中数学的对联“奇变偶不变,符号看象限”。如果用这种型式描述偏微分就是:“型式由原式决定,左右转置看维度”。"型式由原式决定”:比如hadamard积的微分传递还是hadamard积的形式; z = V ⋅ a z=V\cdot a z=Va微分传递后还是矩阵相乘的形式,“左右转置看维度”: ∂ J / ∂ a \partial J/\partial a J/a ∂ J / ∂ z \partial J/\partial z J/z定相差一个 V T V^T VT,,至于该转置应该左乘还是右乘 ∂ J / ∂ z \partial J/\partial z J/z则看维度匹配。 ∂ J / ∂ a \partial J/\partial a J/a维度为 [ k × 1 ] [k\times 1] [k×1], ∂ J / ∂ z \partial J/\partial z J/z维度为 [ m × 1 ] [m\times 1] [m×1], V V V维度为 [ m × k ] [m\times k] [m×k],在维度匹配上, [ k × 1 ] = [ m × k ] T ⋅ [ m × 1 ] [k\times 1] = [m\times k]^T\cdot [m\times 1] [k×1]=[m×k]T[m×1]
    ∴ ∂ J / ∂ a = V T ⋅ ∂ J / ∂ z \therefore \partial J/\partial a=V^T\cdot\partial J/\partial z J/a=VTJ/z

    5.展望

      这篇文章写完也算给自己对反向传播的一个总结吧,也是对自己的一个交代。还有卷积神经网络中对卷积内核的偏导数求导和层之间偏导链式没有写,也不晓得要哪天才会再来写,毕竟敲公式太遭罪了,还是一笔一纸的流畅。
      真理总是越辩越明,如果觉得以上博文有任何问题欢迎留言。

    展开全文
  • 重温微积分 —— 微分与链式法则

    万次阅读 2016-08-11 13:01:10
    (partial)针对的是多变量微分,

    偏(partial)针对的是多变量微分,

    0. 复合函数求导的链式法则

    f(u(x)) 是复合函数,则 f(u(x)) 关于 x 的导数为:

    (f(u(x)))=f(u(x))u(x)

    注意表示求一阶导的撇(')所在的位置:

    • (f(u(x))) :表示对 x 求导;
    • f(u(x)) 则表示对 u() 求导;

    复合函数的另一种表达形式为:

    dydx=dydzdzdx

    1. 偏导下链式法则的证明

    ψ(x,y)=ψ(x,y(x))ddxψ(x,y)=ψx+ψydydx

    ψ=f1(x)g1(y)++fn(x)gn(y) ,求 dψdx

    =f1(x)g1(y)+f1(x)g1(y)dydx++fn(x)gn(y)+fn(x)gn(y)dydx=(f1g1+f2g2++fngn)+(f1g1+f2g2++fngn)dydx=ψx+ψydydx

    2. 二阶偏导的记号

    y(xψ)=2ψyx=ψxy

    • 注意记号的顺序
    • 偏导之后的函数是连续的, ψxy=ψyx
    展开全文
  • 链式法则

    千次阅读 2019-12-05 21:39:16
    链式法则是微积分中的求导法则,用于求一个...链式法则是求复合函数的导数(偏导数)的法则,若 I,J 是直线上的开区间,函数 f(x) 在 I 上有定义处可微,函数 g(y) 在 J 上有定义,在 f(a) 处可微,则复合函数在 a...
  • 文章目录前言一、极限和连续二、偏导数三、方向导数四、可微五、梯度六、链式法则七、Hessian矩阵 前言 多元函数 y对某一个变量的导数是偏导数偏导数的结果可以推广到任意方向,也就是方向导数; 方向导数只跟这...
  • 作者: wugenqiang ...文章目录第 5 讲 偏导数5.1 偏导数的对称性5.2 链式法则5.3 梯度算符5.4 拉氏算符 5.1 偏导数的对称性 【例题】 5.2 链式法则 5.3 梯度算符 5.4 拉氏算符 拉普拉斯算符 ...
  • 多元函数概念和偏导数

    千次阅读 2020-04-21 14:56:48
    偏导数 注意:偏导数的表示是一个整体 并且这种情况只能用定义来做 1.偏导数的概念 2.偏导数的几何意义 对多元函数而言,即使函数的各个偏导数都存在,也不能保证函数在该点连续。 即是可导不一定连续 3.高级偏导...
  • 微积分拾遗——链式法则

    万次阅读 2018-12-25 17:52:14
    链式法则(chain rule)微积分中... 链式法则:两个函数组合起来的复合函数,导数等于里面函数代入外函数值的乘以里面函数之导数;  链式法则有两种形式:    应用链式法则求复合函数导数最基础的还是函数的...
  • 偏导数与梯度

    千次阅读 2019-02-07 12:36:15
    文章目录偏导数[^1]链式法则梯度[^2]梯度解释与微分算子拉普拉斯算子[^3] 偏导数1 定义 假设fff是个多元函数,例如: f(x,y)=x2y+sin⁡(y)f(x,y) = x^2y+\sin (y)f(x,y)=x2y+sin(y) 函数fff可以解释为yyy为自变量而...
  • 链式法则 理解应用

    2021-07-29 20:59:23
    链式法则是微积分中的求导法则,用于求一个复合函数的导数,是在微积分的求导运算中一种常用的方法。复合函数的导数将是构成复合这有限个函数在相应点的 导数的乘积,就像锁链一样一环套一环,故称链式法则。 为啥提...
  • 1.Mul(哈达玛积:对应相乘)  设: ... 可见矩阵的偏导数是另一个矩阵的转置,但是在用链式法则的时候需要保持和原来一直的顺序,意思是原来矩阵乘的元素在前面时,应用链式法则的时候还在前面...
  • 深度学习数学基础之链式法则

    千次阅读 2020-03-14 10:56:28
    上次讲了导数和偏导数的基础,那么这些还不足以使用起来,今天就来讲讲误差反向传播中用来解决复杂函数求导的链式法则。 1 复合函数 已知函数y=f(u),当u表示为u=g(x)时,y作为x的函数就可以表示为y=f(g(x))这样的...
  • 矢量求导的微分法则: 链式法则

    千次阅读 2019-12-21 18:10:36
    矢量求导的微分法则: 链式法则介绍核心原理矢量求导矩阵求导链式法则 介绍 这篇博文推导了矢量情形下, 标量函数对矢量进行求导的微分法则,从定义出发推导了链式法则的形式。 核心原理 核心原理: 标量情形下, 由...
  • 反向传播算法基于多元函数链式... 如果函数$u=\varphi(t)$及$v=\psi(t)$都在点$t$可导,函数$z = f(u,v)$在对应点$(u,v)$具有连续偏导数(重点),那么复合函数$z = f[\varphi(t),\psi(t)]$在点$t$可导,且有: $...
  • 复合函数求导的链式法则

    千次阅读 2021-02-20 17:01:18
    定义 若有两个一元函数 f(x)f(x)f(x) 和 g(x)g...如果我们已知上述两个函数 f(x)f(x)f(x) 和 g(x)g(x)g(x) 的函数 f′(x)f^{\prime}(x)f′(x) 和 g′(x)g^{\prime}(x)g′(x) ,那么我们可以通过以下公式求复合函数 f
  • 多元函数的微分有个确切的名字,叫全微分。在求解全微分时,链式法则是一个必不可少的工具,有了链式法则,我们就可以求得多元函数的积分
  • 矩阵(矢量)求导的链式法则及应用

    千次阅读 2020-03-31 11:44:08
    矢量对矢量求导的定义 链式求导法则 链式法则的应用1:Jacobi矩阵的逆 链式法则的应用2:标量对矩阵的求导
  • 链式求导法则

    万次阅读 2018-05-30 13:46:16
    g(f(x))就是一个复合函数,并且g(f(x))=3x+3链式法则(chain rule):若h(x)=f(g(x)),则h'(x)=f'(g(x))g'(x)链式法则用文字描述,就是“由两个函数凑起来的复合函数,其导数等于里边函数代入外边函数的值之...
  • 逻辑回归中偏导数的推导详解

    千次阅读 2019-03-02 14:33:35
     偏导数推导的原理是链式法则,即:若有 y = f ( g ( x ) ) y=f(g(x)) y = f ( g ( x ) ) ,则有 ∂ y ∂ x = ∂ f ∂ g ⋅ ∂ g ∂ x \frac{\partial{y}}{\partial{x}}=\frac{\partial{f}}{\partial{g}}\cdot{\...
  • 矩阵求导的链式法则

    2020-02-03 10:31:13
  • 链式法则和高阶函数求导

    千次阅读 2017-01-13 14:01:00
    链式法则求导也就是我们熟悉的符合函数求导。设置U 来进行求导。 比较简单,这里忽略了设置U,知识在心中想象一下罢了。 高阶函数求导。 就像这样就是二阶导数。继续进行求导 U。。。= -cos 。当阶数...
  • 目录简化版教程知乎马同学教程 简化版教程 该教程提出导数的方向概念,导数可以认为是向量。...(转)导数、偏导数、方向导数、梯度、梯度下降 知乎马同学教程 微分和导数 全微分 全导数 梯度 ...
  • 1.单层感知机 单层感知机的主要步骤: ...4.根据loss,以及前边所求得的值,求得loss对各个w的偏导数 5.更新w值 # 单层感知机梯度的推导 # 要进行优化的是w,对w进行梯度下降 a=torch.ran...
  • 1. 问题引入——一元复合函数的求导法则:依次求导,沿线相乘(链式法则) 2. 多元复合函数的几种情形(一个自变量的情形;多个自变量的情形) 3. 多元复合函数求导数的链式法则(树形图方法:沿线相乘,...
  • 但是计算题有一个非常厉害的地方在于它不仅仅能正向计算(计算表达式的结果)也可以反向计算(求出导数,利用函数求导的链式法则)。 今天我们就来见识一下这个计算图。 计算图的表示 在计算图上,用结点来表示符号...
  • 导数、偏导数、梯度

    2018-12-19 11:04:23
    所以要求函数关于一个变量的偏导数,只需要将其他变量看作常数,如 f ( x , y ) = b y 2 + a x y + c x + d f(x,y)=by^2+axy+cx+d f ( x , y ) = b y 2 + a x y + c x + d 求 f f f 关于 y y y 的偏导数就是把 x x x...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,619
精华内容 1,847
关键字:

偏导数链式法则