精华内容
下载资源
问答
  • 在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义中,我们讨论了定义求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,同时排列求导出的结果也很麻烦。因此我们需要其他的...

     在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法中,我们讨论了定义法求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,同时排列求导出的结果也很麻烦。因此我们需要其他的一些求导方法。本文我们讨论使用微分法来求解标量对向量的求导,以及标量对矩阵的求导。

        本文的标量对向量的求导,以及标量对矩阵的求导使用分母布局。如果遇到其他资料求导结果不同,请先确认布局是否一样。

    1. 矩阵微分

        在高数里面我们学习过标量的导数和微分,他们之间有这样的关系:df=f′(x)dxdf=f′(x)dx。如果是多变量的情况,则微分可以写成:

    df=∑i=1n∂f∂xidxi=(∂f∂x)Tdxdf=∑i=1n∂f∂xidxi=(∂f∂x)Tdx

        从上次我们可以发现标量对向量的求导和它的向量微分有一个转置的关系。

        现在我们再推广到矩阵。对于矩阵微分,我们的定义为:

    df=∑i=1m∑j=1n∂f∂XijdXij=tr((∂f∂X)TdX)df=∑i=1m∑j=1n∂f∂XijdXij=tr((∂f∂X)TdX)

        其中第二步使用了矩阵迹的性质,即迹函数等于主对角线的和。即

    tr(ATB)=∑i,jAijBijtr(ATB)=∑i,jAijBij

        从上面矩阵微分的式子,我们可以看到矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即:

    df=tr((∂f∂X)TdX)df=tr((∂f∂x)Tdx)df=tr((∂f∂X)TdX)df=tr((∂f∂x)Tdx)

    2. 矩阵微分的性质

        我们在讨论如何使用矩阵微分来求导前,先看看矩阵微分的性质:

        1)微分加减法:d(X+Y)=dX+dY,d(X−Y)=dX−dYd(X+Y)=dX+dY,d(X−Y)=dX−dY

        2)  微分乘法:d(XY)=(dX)Y+X(dY)d(XY)=(dX)Y+X(dY)

        3)  微分转置:d(XT)=(dX)Td(XT)=(dX)T

        4)  微分的迹:dtr(X)=tr(dX)dtr(X)=tr(dX)

        5)  微分哈达马乘积: d(X⊙Y)=X⊙dY+dX⊙Yd(X⊙Y)=X⊙dY+dX⊙Y

        6) 逐元素求导:dσ(X)=σ′(X)⊙dXdσ(X)=σ′(X)⊙dX

        7) 逆矩阵微分:dX−1=−X−1dXX−1dX−1=−X−1dXX−1

        8) 行列式微分:d|X|=|X|tr(X−1dX)d|X|=|X|tr(X−1dX) 

        有了这些性质,我们再来看看如何由矩阵微分来求导数。

    3. 使用微分法求解矩阵向量求导

        由于第一节我们已经得到了矩阵微分和导数关系,现在我们就来使用微分法求解矩阵向量求导。

        若标量函数ff是矩阵XX经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对ff求微分,再使用迹函数技巧给dfdf套上迹并将其它项交换至dXdX左侧,那么对于迹函数里面在dXdX左边的部分,我们只需要加一个转置就可以得到导数了。

        这里需要用到的迹函数的技巧主要有这么几个:

        1)  标量的迹等于自己:tr(x)=xtr(x)=x

        2)  转置不变:tr(AT)=tr(A)tr(AT)=tr(A)

        3)  交换率:tr(AB)=tr(BA)tr(AB)=tr(BA),需要满足A,BTA,BT同维度。

        4)  加减法:tr(X+Y)=tr(X)+tr(Y),tr(X−Y)=tr(X)−tr(Y)tr(X+Y)=tr(X)+tr(Y),tr(X−Y)=tr(X)−tr(Y)

        5) 矩阵乘法和迹交换:tr((A⊙B)TC)=tr(AT(B⊙C))tr((A⊙B)TC)=tr(AT(B⊙C)),需要满足A,B,CA,B,C同维度。

        我们先看第一个例子,我们使用上一篇定义法中的一个求导问题:

    y=aTXb,∂y∂Xy=aTXb,∂y∂X

        首先,我们使用微分乘法的性质对ff求微分,得到:

    dy=daTXb+aTdXb+aTXdb=aTdXbdy=daTXb+aTdXb+aTXdb=aTdXb

        第二步,就是两边套上迹函数,即:

    dy=tr(dy)=tr(aTdXb)=tr(baTdX)dy=tr(dy)=tr(aTdXb)=tr(baTdX)

        其中第一到第二步使用了上面迹函数性质1,第三步到第四步用到了上面迹函数的性质3.

        根据我们矩阵导数和微分的定义,迹函数里面在dXdX左边的部分baTbaT,加上一个转置即为我们要求的导数,即:

    ∂f∂X=(baT)T=abT∂f∂X=(baT)T=abT

        以上就是微分法的基本流程,先求微分再做迹函数变换,最后得到求导结果。比起定义法,我们现在不需要去对矩阵中的单个标量进行求导了。

        再来看看

    y=aTexp(Xb),∂y∂Xy=aTexp(Xb),∂y∂X

        

    dy=tr(dy)=tr(aTdexp(Xb))=tr(aT(exp(Xb)⊙d(Xb)))=tr((a⊙exp(Xb))TdXb)=tr(b(a⊙exp(Xb))TdX)dy=tr(dy)=tr(aTdexp(Xb))=tr(aT(exp(Xb)⊙d(Xb)))=tr((a⊙exp(Xb))TdXb)=tr(b(a⊙exp(Xb))TdX)

        其中第三步到第4步使用了上面迹函数的性质5. 这样我们的求导结果为:

    ∂y∂X=(a⊙exp(Xb))bT∂y∂X=(a⊙exp(Xb))bT

        以上就是微分法的基本思路。

    4. 迹函数对向量矩阵求导

        由于微分法使用了迹函数的技巧,那么迹函数对对向量矩阵求导这一大类问题,使用微分法是最简单直接的。下面给出一些常见的迹函数的求导过程,也顺便给大家熟练掌握微分法的技巧。

        首先是∂tr(AB)∂A=BT,∂tr(AB)∂B=AT∂tr(AB)∂A=BT,∂tr(AB)∂B=AT,这个直接根据矩阵微分的定义即可得到。

        再来看看∂tr(WTAW)∂W∂tr(WTAW)∂W:

    d(tr(WTAW))=tr(dWTAW+WTAdW)=tr(dWTAW)+tr(WTAdW)=tr((dW)TAW)+tr(WTAdW)=tr(WTATdW)+tr(WTAdW)=tr(WT(A+AT)dW)d(tr(WTAW))=tr(dWTAW+WTAdW)=tr(dWTAW)+tr(WTAdW)=tr((dW)TAW)+tr(WTAdW)=tr(WTATdW)+tr(WTAdW)=tr(WT(A+AT)dW)

        因此可以得到:

    ∂tr(WTAW)∂W=(A+AT)W∂tr(WTAW)∂W=(A+AT)W

        最后来个更加复杂的迹函数求导:∂tr(BTXTCXB)∂X∂tr(BTXTCXB)∂X:

    d(tr(BTXTCXB))=tr(BTdXTCXB)+tr(BTXTCdXB)=tr((dX)TCXBBT)+tr(BBTXTCdX)=tr(BBTXTCTdX)+tr(BBTXTCdX)=tr((BBTXTCT+BBTXTC)dX)d(tr(BTXTCXB))=tr(BTdXTCXB)+tr(BTXTCdXB)=tr((dX)TCXBBT)+tr(BBTXTCdX)=tr(BBTXTCTdX)+tr(BBTXTCdX)=tr((BBTXTCT+BBTXTC)dX)

        因此可以得到:

    ∂tr(BTXTCXB)∂X=(C+CT)XBBT∂tr(BTXTCXB)∂X=(C+CT)XBBT

    5. 微分法求导小结

        使用矩阵微分,可以在不对向量或矩阵中的某一元素单独求导再拼接,因此会比较方便,当然熟练使用的前提是对上面矩阵微分的性质,以及迹函数的性质熟练运用。

        还有一些场景,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。如果我们可以利用一些常用的简单求导结果,再使用链式求导法则,则会非常的方便。因此下一篇我们讨论向量矩阵求导的链式法则。

    展开全文
  • 今天我们就讨论下其中的标量对向量求导,标量矩阵求导, 以及向量对向量求导这三种场景的基本求解思路。  对于本文中的标量向量或矩阵求导这两种情况,如前文所说,以分母布局为默认布局。向量对向量求导,以...

     在机器学习中的矩阵向量求导(一) 求导定义与求导布局中,我们讨论了向量矩阵求导的9种定义与求导布局的概念。今天我们就讨论下其中的标量对向量求导,标量对矩阵求导, 以及向量对向量求导这三种场景的基本求解思路。

        对于本文中的标量对向量或矩阵求导这两种情况,如前文所说,以分母布局为默认布局。向量对向量求导,以分子布局为默认布局。如遇到其他文章中的求导结果和本文不同,请先确认使用的求导布局是否一样。另外,由于机器学习中向量或矩阵对标量求导的场景很少见,本系列不会单独讨论这两种求导过程。

    1. 用定义法求解标量对向量求导

        标量对向量求导,严格来说是实值函数对向量的求导。即定义实值函数f:Rn→Rf:Rn→R,自变量xx是n维向量,而输出yy是标量。对于一个给定的实值函数,如何求解∂y∂x∂y∂x呢?

        首先我们想到的是基于矩阵求导的定义来做,由于所谓标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导,最后找到规律,得到求导的结果向量。

        首先我们来看一个简单的例子:y=aTxy=aTx,求解∂aTx∂x∂aTx∂x

        根据定义,我们先对xx的第i个分量进行求导,这是一个标量对标量的求导,如下:

     

    ∂aTx∂xi=∂∑j=1najxj∂xi=∂aixi∂xi=ai∂aTx∂xi=∂∑j=1najxj∂xi=∂aixi∂xi=ai

        可见,对向量的第i个分量的求导结果就等于向量aa的第i个分量。由于我们是分母布局,最后所有求导结果的分量组成的是一个n维向量。那么其实就是向量aa。也就是说:

    ∂aTx∂x=a∂aTx∂x=a

        同样的思路,我们也可以直接得到:

    ∂xTa∂x=a∂xTa∂x=a

        给一个简单的测试,大家看看自己能不能按定义法推导出:

    ∂xTx∂x=2x∂xTx∂x=2x

        再来看一个复杂一点点的例子:y=xTAxy=xTAx,求解∂xTAx∂x∂xTAx∂x

        我们对xx的第k个分量进行求导如下:

     

    ∂xTAx∂xk=∂∑i=1n∑j=1nxiAijxj∂xk=∑i=1nAikxi+∑j=1nAkjxj∂xTAx∂xk=∂∑i=1n∑j=1nxiAijxj∂xk=∑i=1nAikxi+∑j=1nAkjxj

        这个第k个分量的求导结果稍微复杂些了,仔细观察一下,第一部分是矩阵AA的第k列转置后和xx相乘得到,第二部分是矩阵AA的第k行和xx相乘得到,排列好就是:

    ∂xTAx∂x=ATx+Ax∂xTAx∂x=ATx+Ax

        从上面可以看出,定义法求导对于简单的实值函数是很容易的,但是复杂的实值函数就算求出了任意一个分量的导数,要排列出最终的求导结果还挺麻烦的,因此我们需要找到其他的简便一些的方法来整体求导,而不是每次都先去针对任意一个分量,再进行排列。

    2. 标量对向量求导的一些基本法则

        在我们寻找一些简单的方法前,我们简单看下标量对向量求导的一些基本法则,这些法则和标量对标量求导的过程类似。

        1) 常量对向量的求导结果为0。

        2)线性法则:如果f,gf,g都是实值函数,c1,c2c1,c2为常数,则:

    ∂(c1f(x)+c2g(x)∂x=c1∂f(x)∂x+c2∂g(x)∂x∂(c1f(x)+c2g(x)∂x=c1∂f(x)∂x+c2∂g(x)∂x

        3) 乘法法则:如果f,gf,g都是实值函数,则:

    ∂f(x)g(x)∂x=f(x)∂g(x)∂x+∂f(x)∂xg(x)∂f(x)g(x)∂x=f(x)∂g(x)∂x+∂f(x)∂xg(x)

        要注意的是如果不是实值函数,则不能这么使用乘法法则。

        4) 除法法则:如果f,gf,g都是实值函数,且g(x)≠0g(x)≠0,则:

    ∂f(x)/g(x)∂x=1g2(x)(g(x)∂f(x)∂x−f(x)∂g(x)∂x)∂f(x)/g(x)∂x=1g2(x)(g(x)∂f(x)∂x−f(x)∂g(x)∂x)

    3. 用定义法求解标量对矩阵求导

         现在我们来看看定义法如何解决标量对矩阵的求导问题。其实思路和第一节的标量对向量的求导是类似的,只是最后的结果是一个和自变量同型的矩阵。

        我们还是以一个例子来说明。y=aTXby=aTXb,求解∂aTXb∂X∂aTXb∂X

        其中, aa是m维向量,bb是n维向量,  XX是m×nm×n的矩阵。

        我们对矩阵XX的任意一个位置的XijXij求导,如下:

    ∂aTXb∂Xij=∂∑p=1m∑q=1napApqbq∂Xij=∂aiAijbj∂Xij=aibj∂aTXb∂Xij=∂∑p=1m∑q=1napApqbq∂Xij=∂aiAijbj∂Xij=aibj

        即求导结果在(i.j)(i.j)位置的求导结果是aa向量第i个分量和bb第j个分量的乘积,将所有的位置的求导结果排列成一个m×nm×n的矩阵,即为abTabT,这样最后的求导结果为:

    ∂aTXb∂X=abT∂aTXb∂X=abT

        简单的求导的确不难,但是如果是比较复杂的标量对矩阵求导,比如y=aTexp(Xb)y=aTexp(Xb),对任意标量求导容易,排列起来还是蛮麻烦的,也就是我们遇到了和标量对向量求导一样的问题,定义法比较适合解决简单的问题,复杂的求导需要更简便的方法。这个方法我们在下一篇来讲。

        同时,标量对矩阵求导也有和第二节对向量求导类似的基本法则,这里就不累述了。

    4.用定义法求解向量对向量求导

        这里我们也同样给出向量对向量求导的定义法的具体例子。

        先来一个简单的例子: y=Axy=Ax,其中AA为n×mn×m的矩阵。x,yx,y分别为m,nm,n维向量。需要求导∂Ax∂x∂Ax∂x,根据定义,结果应该是一个n×mn×m的矩阵

        先求矩阵的第i行和向量的内积对向量的第j分量求导,用定义法求解过程如下:

    ∂Aix∂xj=∂Aijxj∂xj=Aij∂Aix∂xj=∂Aijxj∂xj=Aij

        可见矩阵 AA的第i行和向量的内积对向量的第j分量求导的结果就是矩阵 AA的(i,j)(i,j)位置的值。排列起来就是一个矩阵了,由于我们分子布局,所以排列出的结果是AA,而不是 ATAT

    5. 定义法矩阵向量求导的局限

        使用定义法虽然已经求出一些简单的向量矩阵求导的结果,但是对于复杂的求导式子,则中间运算会很复杂,同时求导出的结果排列也是很头痛的。下一篇我们讨论使使用矩阵微分和迹函数的方法来求解矩阵向量求导。 

    展开全文
  • 用定义求解标量对向量求导举个例子2.用定义求解标量矩阵求导举个例子3.用定义求解向量向量的求导举个例子小结2. 微分1.矩阵微分1.单变量2.多变量3.矩阵微分迹函数==统一表示==2.矩阵微分性质和迹函数的...

    矩阵向量求导

    摘自:https://www.cnblogs.com/pinard/p/10825264.html,并加入了自己的一丢丢想法。

    说明1

    • 在矩阵向量求导中,可以采用定义法,微分法和链式求导法。
    • 选择:优先选择链式求导法,其次选择微分法,最后使用定义法。
    • 无论采用哪种方法都涉及到求导布局的问题,应首先掌握求导布局。

    说明2

    • 符号约定:
      • xx小写字母表示标量。
      • x\mathbf{x}小写黑体字母表示向量(默认是列向量)。
      • XX大写字母表示矩阵。
    • 求导布局约定:
      1. 标量对向量求导和标量对矩阵求导均采用分母布局,保证求导的结果使得和向量或矩阵同型。
      2. 向量对标量求导和矩阵对标量求导均采用分子布局,保证求导的结果使得和向量或矩阵同型。
      3. 向量对向量求导采用分子布局,即雅克比式
    • 其他约定:
      • 不涉及以下求导
        1. 标量对标量求导【因为这个相比较其他的求导方式来说,简单了】
        2. 向量对矩阵的求导【遇到的不多】
        3. 矩阵对矩阵的求导【遇到的不多】
        4. 矩阵对矩阵的求导【遇到的不多】
        5. 想深入了解,请参见:https://www.cnblogs.com/pinard/p/10930902.html

    1.定义法

    • 标量对向量或对矩阵求导,采用分母布局;向量对向量求导采用分子布局。

    1. 用定义法求解标量对向量求导

    • 解决\frac{标量}{向量}

    • 标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导,最后找到规律,得到求导的结果向量

      • 操作步骤:
        • 各个元素展开,并表示。【简单的元素好表示,复杂的就不怎么好表示了;这就是局限该方法的局限性】
        • 每个元素均进行求导操作。
        • 选定一种求导布局,排列好求导完各个元素的顺序。

    举个例子

    y=aTx\mathbf{y}=\mathbf{a}^T\mathbf{x},求解yx\frac{\partial \mathbf{y}}{\partial \mathbf{x}}

    • 将标量(分子)完全展开

    yxi=aTxxi=j=1najxjxi=ai \frac{\partial \mathbf{y}}{\partial x_i} =\frac{\partial \mathbf{a}^T\mathbf{x}}{x_i} =\frac{\partial \sum_{j=1}^{n} a_j x_j}{\partial x_i} =a_i

    • 因为采用分母布局,结果应该和分母(列向量)同型,所以
      aTxx=a \frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}}=\mathbf{a}

    • 同理,采用分母布局计算xTax\frac{\partial \mathbf{x}^T\mathbf{a}}{\partial \mathbf{x}}
      xTax=a \frac{\partial \mathbf{x}^T\mathbf{a}}{\partial \mathbf{x}}=\mathbf{a}

    y=xTx\mathbf{y}=\mathbf{x}^T\mathbf{x},求解yx\frac{\partial \mathbf{y}}{\partial \mathbf{x}}

    • 将标量(分子)完全展开
      yxi=xTxxi=j=1nxjxjxi=2xj \frac{\partial \mathbf{y}}{\partial x_i} =\frac{\partial \mathbf{x}^T\mathbf{x}}{x_i} =\frac{\partial \displaystyle\sum_{j=1}^{n} x_j x_j}{\partial x_i} =2x_j

    • 因为采用分母布局,结果应该和分母(列向量)同型,所以

    • aTxx=2x \frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}}=2\mathbf{x}

    y=xTAx\mathbf{y}=\mathbf{x}^T A\mathbf{x},求解yx\frac{\partial \mathbf{y}}{\partial \mathbf{x}}

    • 将标量(分子)完全展开
      xTAxxk=i=1nj=1nxiAijxjxk=i=1nAikxk+i=jnAjkxk=ATx+Ax \frac{\partial \mathbf{x}^T A\mathbf{x}}{\partial x_k} =\frac{\partial \displaystyle \sum_{i=1}^{n}\sum_{j=1}^{n} {x_i A_{ij} x_j}}{\partial x_k} =\sum_{i=1}^{n}A_{ik}x_k+\sum_{i=j}^{n}A_{jk}x_k =A^T\mathbf{x}+A\mathbf{x}

    • 可以发现,这个最后写成矩阵表达形式不像上面那么简单。

      • 具体操作,相乘的地方用"十"字表示。

    定义法求导对于简单的实值函数是很容易的,但是复杂的实值函数就算求出了任意一个分量的导数,要排列出最终的求导结果还挺麻烦的,因此我们需要找到其他的简便一些的方法来整体求导,而不是每次都先去针对任意一个分量,再进行排列。

    2.用定义法求解标量对矩阵求导

    • 解决\frac{标量}{矩阵}

    举个例子

    y=aTXb\mathbf{y}=\mathbf{a}^TX\mathbf{b},求解aTXbX\frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X}Xmn,am1,bn1X_{m*n},\mathbf{a}_{m*1},\mathbf{b}_{n*1}

    • 将标量(分子)完全展开
      aTXbX=p=1mq=1napXpabqXij=aiXijbjXij=aibj \frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X} =\frac{\partial \displaystyle \sum_{p=1}^{m}\sum_{q=1}^{n} a_p X_{pa} b_q}{\partial X_{ij}} =\frac{\partial a_i X_{ij} b_j}{\partial X_{ij}} =a_ib_j

    • 采用分母布局,最终结果为mnm*n的矩阵。所以有
      aTXbX=abT \frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X} =\mathbf{a}\mathbf{b}^T

    3.用定义法求解向量对向量的求导

    • 解决\frac{向量}{向量}

    举个例子

    y=Ax\mathbf{y}=A\mathbf{x},求解Axx\frac{\partial A\mathbf{x}}{\partial\mathbf{x}}Amn,xn1,ym1A_{m*n},\mathbf{x}_{n*1},\mathbf{y}_{m*1}

    • 根据向量对向量的求导的结果应该为mnm*n维的矩阵。

    • 先求矩阵的第ii行和向量的内积对向量的第jj分量求导,用定义法求解过程如下:
      Aixxj=k=1nAikxkxj=Aij \frac{\partial A_i \mathbf{x}}{\partial x_{j}} =\frac{\partial \displaystyle \sum_{k=1}^{n}A_{ik}x_k}{\partial x_j} =A_{ij}

    • 矩阵 AA的第ii行和向量的内积对向量的第jj分量求导的结果就是矩阵 AA(i,j)(i,j)位置的值。

    • 因为采用了分子布局,所以求导结果为AA;而不是采用分母布局后的ATA^T

      • 可见求导布局对于最后结果的输出的影响是很大的。结果上差一个转置。

    小结

    ​ ==使用定义法虽然已经求出一些简单的向量矩阵求导的结果,但是对于复杂的求导式子,则中间运算会很复杂,=同时求导出的结果排列也是很麻烦。==所以需要引入微分法。

    2. 微分法

    • 使用微分法来求解标量对向量的求导,以及标量对矩阵的求导。
    • 标量对向量的求导,以及标量对矩阵的求导使用分母布局。

    1.矩阵微分

    • 解决(,\frac{标量}{向量},\frac{标量}{矩阵})。

    1.单变量

    • 解决\frac{标量}{标量},这里不做探讨。

    • 单变量的微分和导入关系如下:
      df=f(x)dx df=f'(x)dx

    2.多变量

    • 解决\frac{标量}{向量}

    • 多元变量下的微分和导数的关系如下:
      df=i=1nfxidxi=(fx)Tdx df=\sum_{i=1}^{n}\frac{\partial f}{\partial x_i} dx_i=(\frac{\partial f}{\partial \mathbf{x}})^T d \mathbf{x}

    3.矩阵微分

    • 解决\frac{标量}{矩阵}

    • 矩阵下的微分和导数的关系如下:
      df=i=1mj=1nfXijdXij=tr((fX)TdX) df=\displaystyle \sum_{i=1}^{m}\sum_{j=1}^{n}\frac{\partial f}{\partial X_{ij}}dX_{ij}=tr((\frac{\partial f}{X})^TdX)

    迹函数

    i=1mj=1nAijBji=tr(ATB) \displaystyle \sum_{i=1}^{m} \sum_{j=1}^{n}A_{ij}B_{ji}=tr(A^TB)

    • 其中A,BA,B同型。

    • 举个例子:
      X=(x11x12x21x22x31x31)dX=(dx11dx12dx21dx22dx31dx31)df=fx11dx11+fx21dx21+fx31dx31+fx12dx12+fx22dx22+fx32dx32 X= \begin{pmatrix} x_{11}& x_{12}\\ x_{21}& x_{22}\\ x_{31}& x_{31} \end{pmatrix}\\ dX= \begin{pmatrix} dx_{11}& dx_{12}\\ dx_{21}& dx_{22}\\ dx_{31}& dx_{31} \end{pmatrix}\\ \therefore df = \frac{\partial f}{\partial x_{11}}dx_{11}+\frac{\partial f}{\partial x_{21}}dx_{21}+\frac{\partial f}{\partial x_{31}}dx_{31} +\frac{\partial f}{\partial x_{12}}dx_{12}+\frac{\partial f}{\partial x_{22}}dx_{22}+\frac{\partial f}{\partial x_{32}}dx_{32}

      df=tr((fx11fx12fx21fx22fx31fx23)T(dx11dx12dx21dx22dx31dx31)) \therefore df= tr( \begin{pmatrix} \frac{\partial f}{\partial x_{11}}& \frac{\partial f}{\partial x_{12}}\\ \frac{\partial f}{\partial x_{21}}& \frac{\partial f}{\partial x_{22}}\\ \frac{\partial f}{\partial x_{31}}& \frac{\partial f}{\partial x_{23}} \end{pmatrix}^T \begin{pmatrix} dx_{11}& dx_{12}\\ dx_{21}& dx_{22}\\ dx_{31}& dx_{31} \end{pmatrix})

      其中:
      (fx11fx12fx21fx22fx31fx23)T(dx11dx12dx21dx22dx31dx31)=(fx11dx11+fx21dx21+fx31dx31fx12dx12+f22dx22+fx32dx32) \begin{pmatrix} \frac{\partial f}{\partial x_{11}}& \frac{\partial f}{\partial x_{12}}\\ \frac{\partial f}{\partial x_{21}}& \frac{\partial f}{\partial x_{22}}\\ \frac{\partial f}{\partial x_{31}}& \frac{\partial f}{\partial x_{23}}\end{pmatrix}^T\begin{pmatrix} dx_{11}& dx_{12}\\ dx_{21}& dx_{22}\\ dx_{31}& dx_{31}\end{pmatrix}=\begin{pmatrix} \frac{\partial f}{\partial x_{11}}dx_{11}+\frac{\partial f}{\partial x_{21}}dx_{21}+\frac{\partial f}{\partial x_{31}}dx_{31}& *\\ *& \frac{\partial f}{\partial x_{12}}dx_{12}+\frac{\partial f}{\partial 22}dx_{22}+\frac{\partial f}{\partial x_{32}}dx_{32}\\ \end{pmatrix}
      所以:
      df=tr((fX)TdX) df=tr((\frac{\partial f}{X})^TdX)

    统一表示

    • 上面矩阵微分的式子,可以看到矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示。即:
      :df=tr((fx)Tdx):df==tr((fX)TdX) 向量微分:df=tr((\frac{\partial f}{\partial \mathbf{x}})^T d \mathbf{x})\\ 矩阵微分:df==tr((\frac{\partial f}{X})^TdX)

    2.矩阵微分性质和迹函数的性质

    矩阵微分的性质

    • 在后面的求导中有运用。
    1. 微分加减法:d(X+Y)=dX+dYd(X+Y)=dX+dY
    2. 微分乘法:d(XY)=(dX)Y+X(dY)d(XY)=(dX)Y+X(dY)
    3. 微分转置d(xT)=(dX)Td(x^T)=(dX)^T
    4. 微分的迹tr(dX)=d(tr(X))tr(dX)=d(tr(X))
    5. 微分的哈达玛积d(XY)=d(X)d(Y)d(X\odot Y)=d(X)\odot d(Y)
    6. 逐个元素求导d(σ(X))=σ(X)d(X)d(\sigma'(X))=\sigma'(X)\odot d(X)
    7. 逆矩阵微分:d(X1)=X1d(X)X1d(X^{-1})=-X^{-1}d(X)X^{-1}
    8. 行列式微分:d(X)=Xtr(X1dX)d(|X|)=|X|tr(X^{-1}dX)

    说明:

    1. 其中的哈达玛积的计算,一般表示为ABA\odot BABA \circ B,参考百度即可:哈达玛积
    2. 上述的逆矩阵的微分和行列式的微分,个人并没有推导。

    迹函数的性质

    • 在后面的求导中有运用。
    1. 标量的迹等于它本身tr(y)=ytr(y)=y
    2. 矩阵转置不改变迹的值tr(AT)=tr(A)tr(A^T)=tr(A)
    3. 迹满足交换律tr(AB)=tr(BA)tr(AB)=tr(BA),其中A,BTA,B^T同型。
    4. 迹的加减法tr(X+Y)=tr(X)+tr(Y);tr(XY)=tr(X)tr(Y)tr(X+Y)=tr(X)+tr(Y);tr(X-Y)=tr(X)-tr(Y)
    5. 矩阵乘法和迹交换tr((AB)TC)=tr(AT(BC))tr((A\odot B)^T\odot C)=tr(A^T(B \odot C))。其中A,B,CA,B,C同型。

    3.使用微分法对矩阵向量求导

    1.法则

    ​ 若标量函数ff是矩阵XX经加减乘法、逆、行列式、逐元素函数等运算构成。

    1. 则使用相应的运算法则对ff求微分。
    2. 再使用迹函数技巧给dfdf套上迹。
    3. 并将其它项交换至dXdX左侧。
    4. 那么对于迹函数里面在dXdX左边的部分,我们只需要加一个转置就可以得到导数了。

    2.例子

    例1

    y=aTXby=a^TXb,求yX\frac{\partial y}{\partial X}am1,Xmn,bn1,y11a_{m*1},X_{m*n},b_{n*1},y_{1*1}。类型\frac{标量}{矩阵}yy是一个标量,dydy也是一个标量。

    求解步骤:

    1. 使用微分法的乘法对ff求微分。
      dy=d(aT)Xb+aTd(X)b+aTXd(b)=aTd(X)b dy=d(a^T)Xb+a^Td(X)b+a^TXd(b)=a^Td(X)b

      • 因为最终是对XX求导(dXdX),那么微分中不含dXdX的最终结果都为00
    2. 等式两边进行取迹(trtr)操作。
      dy=tr(dy)=tr(aTd(X)b)=tr(baTd(X)) dy=tr(dy)=tr(a^Td(X)b)=tr(ba^Td(X))

      • 第一个等式成立是因为,标量的迹等于它本身,
      • 第二等式成立是因为,那本身等式的两边取迹。
      • 第三个等式成立是为,迹函数的性质三。
    3. 已经将dXdX放在迹内的最右侧了,那么其前面的部分加上转置就是求导后的结果。
      fX=(baT)T=abT \frac{\partial f}{\partial X}=(ba^T)^T=ab^T
      查表Scalar-by-matrix identities的第8行,结果一致。采用分母布局。

    例2

    y=aTexp(Xb)y=a^Texp(Xb),求yX\frac{\partial y}{\partial X}am1,Xmn,bn1,y11a_{m*1},X_{m*n},b_{n*1},y_{1*1}。类型\frac{标量}{矩阵}yy是一个标量,dydy也是一个标量。

    1. dy=d(a)exp(Xb)+aTd(exp(Xb))=aTd(exp(Xb))=aTexp(Xb)d(Xb)=aTexp(Xb)(d(X)b) dy=d(a)exp(Xb)+a^Td(exp(Xb))\\ =a^Td(exp(Xb))\\ =a^Texp(Xb)\odot d(Xb)\\ =a^Texp(Xb)\odot (d(X)b)\\

      1. 第三个等式成立,是很显然的,用到哈达玛积。
      2. 第四个等式成立,目标是要剥离出dXdX,同时这样的写法是没用问题的。bb对于XX来说是常数。可以展开来详细看看。
    2. dy=tr(dy)=tr(aTexp(Xb)(d(X)b))=tr((aexp(Xb))T(d(X)b))=tr((aexp(Xb))TdXb)=tr(b(aexp(Xb))TdX) dy=tr(dy)=tr(a^Texp(Xb)\odot (d(X)b))\\ =tr((a \odot exp(Xb))^T(d(X)b))\\ =tr((a \odot exp(Xb))^TdXb)\\ =tr(b(a \odot exp(Xb))^TdX)

      1. 第一个等号是因为,标量的迹等于它本身。
      2. 第三个等号成立是因为,迹函数的技巧5,矩阵乘法和迹交换.
      3. 第六个等号成立是因为,去掉dXdX的符号和原来一样,目标也是要把dXdX给剥离出来。
      4. 最后一个等号成立是因为,迹的交换律。
    3. 所以最终结论为:
      yX=(b(aexp(Xb))T)T=(aexp(Xb))bT \frac{\partial y}{\partial X}=(b(a \odot exp(Xb))^T)^T=(a\odot exp(Xb))b^T

    4.使用迹函数对矩阵向量求导

    1.基本形式

    tr(AB)A\frac{\partial tr(AB)}{\partial A},其中Amn,BnmA_{m*n},B_{n*m}tr(AB)(11)tr(AB)_{(1*1)}是个标量。类型\frac{标量}{矩阵}

    1. 展开
      d(tr(AB))=tr(d(AB))=tr(d(A)B+AdB)=tr(d(A)B)=tr(BdA) d(tr(AB))=tr(d(AB))=tr(d(A)B+AdB)=tr(d(A)B)=tr(BdA)

      1. 第一个等式成立是以为,dd操作和trtr操作可以互换。矩阵微分性质4,微分的迹。
      2. 第二个等式成立是因为,矩阵微分2,微分乘法。
      3. 第三个等式成立是因为,做种求的是关于dAdA,所以不含d(A)d(A)的项最终值均为00,故舍去。
      4. 第四个等式成立是因为,迹函数技巧3,迹的交换律。
    2. 结果,加个转置
      tr(AB)A=BT \frac{\partial tr(AB)}{\partial A}=B^T

    tr(AB)B\frac{\partial tr(AB)}{\partial B},其中Amn,BnmA_{m*n},B_{n*m}tr(AB)(11)tr(AB)_{(1*1)}是个标量。

    • tr(AB)B=AT \frac{\partial tr(AB)}{\partial B}=A^T

    2.例子

    tr(WTAW)W=(WTAW)W\frac{\partial tr(W^TAW)}{\partial W}=\frac{\partial (W^TAW)}{\partial W}Wn1,AnnW_{n*1},A_{n*n},WTAW(11)W^TAW_{(1*1)}是一个标量。类型\frac{标量}{向量}

    1. d(tr(WTAW))=tr(d(WTAW))=tr(d(WT)AW+WTAd(W))=tr((d(W)TAW+WTAd(W))=tr((d(W))TAW)+tr(WTAd(W))=tr((AW)Td(W))+tr(WTAd(W)) d(tr(W^TAW))=tr(d(W^TAW))\\ =tr(d(W^T)AW+W^TAd(W))\\ =tr((d(W)^TAW+W^TAd(W))\\ =tr((d(W))^TAW)+tr(W^TAd(W))\\ =tr((AW)^Td(W))+tr(W^TAd(W))

    2. 所以,
      tr(WTAW)W=((AW)T)T+(WTA)T=AW+ATW=(A+AT)W \frac{\partial tr(W^TAW)}{\partial W}=((AW)^T)^T+(W^TA)^T=AW+A^TW=(A+A^T)W

    小结

    1. 使用矩阵微分,可以在不对向量或矩阵中的某一元素单独求导再拼接,因此会比较方便,当然熟练使用的前提是对上面矩阵微分的性质,以及迹函数的性质熟练运用。
    2. 还有一些场景,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。如果我们可以利用一些常用的简单求导结果,再使用链式求导法则。

    3.链式法

    ​ 求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。使用矩阵向量求导链式法则,快速求出导数结果。

    • 标量对向量的求导,标量对矩阵的求导使用分母布局, 向量对向量的求导使用分子布局。

    1.向量对向量的求导法则

    假设存在多个向量的依赖关系,如xyz\mathbf{x}\rightarrow \mathbf{y} \rightarrow \mathbf{z}。其中xp1,ym1,zn1\mathbf{x}_{p*1},\mathbf{y}_{m*1},\mathbf{z}_{n*1}

    • zx\frac{\partial \mathbf{z}}{\partial \mathbf{x}}应该是(np)(n*p)维。采用分子布局,雅克比式。

    • 所以有:
      zx=zyyx \frac{\partial \mathbf{z}}{\partial \mathbf{x}}=\frac{\partial \mathbf{z}}{\partial \mathbf{y}}\frac{\partial \mathbf{y}}{\partial \mathbf{x}}
      注意:这个写法只在全是向量的依存关系时,才是对的

    • 拓展:xy1ynz\mathbf{x}\rightarrow \mathbf{y_1} \cdots\rightarrow \mathbf{y_n}\rightarrow \mathbf{z}
      zx=zynynyn1yx \frac{\partial \mathbf{z}}{\partial \mathbf{x}}= \frac{\partial \mathbf{z}}{\partial \mathbf{y_n}} \frac{\partial \mathbf{y_n}}{\partial \mathbf{y_{n-1}}} \cdots \frac{\partial \mathbf{y}}{\partial \mathbf{x}}

    2.标量对多个向量的链式求导法则

    ​ 在机器学习算法中,最终要优化的一般是一个标量损失函数,因此最后求导的目标是标量。所以这个更常用一点。

    假设存在多个向量的依赖关系,如xyz\mathbf{x}\rightarrow \mathbf{y} \rightarrow z。其中xp1,ym1,z11\mathbf{x}_{p*1},\mathbf{y}_{m*1},\mathbf{z}_{1*1}zz是标量。

    • zx\frac{\partial z}{\partial \mathbf{x}}应该是(p1)(p*1)维。采用分母布局。

    • zy\frac{\partial z}{\partial \mathbf{y}}(m1)(m*1)维,采用分母布局。yx\frac{\partial \mathbf{y}}{\partial \mathbf{x}}(mp)(m*p)维。

    • 要使上述的链式求导时维度可以相容,即
      p1=pmm1 维度_{p*1}=维度_{p*m}*维度_{m*1}

      zx=(yx)Tzy \frac{\partial z}{\partial \mathbf{x}}=(\frac{\partial \mathbf{y}}{\partial \mathbf{x}})^T\frac{\partial z}{\partial \mathbf{y}}

    • 推论:xy1ynz\mathbf{x}\rightarrow \mathbf{y_1} \cdots\rightarrow \mathbf{y_n}\rightarrow z
      zx=(ynyn1yn1yn2y1x)Tzyn \frac{\partial \mathbf{z}}{\partial \mathbf{x}}= ( \frac{\partial \mathbf{y_n}}{\partial \mathbf{y_{n-1}}} \frac{\partial \mathbf{y_{n-1}}}{\partial \mathbf{y_{n-2}}} \cdots \frac{\partial \mathbf{y_{1}}}{\partial \mathbf{x}} )^T \frac{\partial z}{\partial \mathbf{y_n}}

    例子

    设有列向量θ\theta,列向量z=Xθy\mathbf{z}=X\theta-\mathbf{y},标量l=zTzl=z^Tzθn1,Xmn,ym1,l11\theta_{n*1},X_{m*n},\mathbf{y}_{m*1},l_{1*1}

    构成:θzl\theta \rightarrow \mathbf{z} \rightarrow l,求lθ\frac{\partial l}{\partial \theta}
    lθ=(zθ)Tlz \frac{\partial l}{\partial \theta}=(\frac{\partial \mathbf{z}}{\partial \theta})^T\frac{\partial l}{\partial \mathbf{z}}

    • zθ=(Xθy)θ=(Xθ)θ==X \frac{\partial \mathbf{z}}{\partial \theta}=\frac{\partial (X\theta-\mathbf{y})}{\partial \theta}=\frac{\partial (X\theta)}{\partial \theta}=\frac{向量}{向量}=X

      • 采用分子布局,(Xθ)θ\frac{\partial (X\theta)}{\partial \theta}是(mnm*n)维。所以结果是XmnX_{m*n},而不是XTX^T
    • lz=zTzz==2z \frac{\partial l}{\partial \mathbf{z}}=\frac{\partial z^Tz}{\partial z}=\frac{标量}{向量}=2z

      • 这个计算,可以用定义法求解。前面已经求过了。
    • lθ=(zθ)Tlz=XT(2z)=2XT(Xθy) \frac{\partial l}{\partial \theta}=(\frac{\partial \mathbf{z}}{\partial \theta})^T\frac{\partial l}{\partial \mathbf{z}}=X^T(2\mathbf{z})=2X^T(X\theta - \mathbf{y})

    3.标量对多个矩阵的链式求导法则

    假设有XYzX \rightarrow Y \rightarrow z。其中Xpq,Ymn,z11X_{p*q},Y_{m*n},z_{1*1}X,YX,Y是矩阵,$z是标量。求网络的参数。

    • 矩阵对矩阵的求导是比较复杂的定义,不给出基于矩阵整体的链式求导法则。参考

    • 给出对矩阵中一个标量的链式求导方法。

    • 虽然我们没有全局的标量对矩阵的链式求导法则,但是对于一些线性关系的链式求导,还是可以得到一些有用的结论的。
      zxij=k,lzYklYklxij=tr((zY)TYxij) \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}}=tr((\frac{\partial z}{\partial Y})^T \frac{\partial Y}{\partial x_{ij}})

      • 其中k,lk,l分别从YY的行数和列数中取值(或列数和行数)。
      • 第一等式成立是以为,在XX中的一个元素xijx_{ij}都和YY中的元素ykly_{kl}相关。同时对于YY的某个确定的ykly_{k_{*}l_{*}}ykly_{k_{*}l_{*}}总是和zz相关。所以出现对YY中的每个元素对xijx_{ij}求导,zz对每个YY中的元素求导,然后用链式穿起来(因为都是标量,所以谁前谁后没关系)。
      • 第二等式成立是以为,前面矩阵微分已经详细说明了,并且举了例子。

    经典例子

    A,X,B,YA,X,B,Y都是矩阵,zz是标量,其中z=f(Y),Y=AX+Bz=f(Y),Y=AX+B。求zX\frac{\partial z}{\partial X}就是经典的机器学习中问题。AA是参数矩阵,XX是数据集构成的矩阵。其中Xmn,Apm,Ypn,z11,BpnX_{m*n},A_{p*m},Y_{p*n},z_{1*1},B_{p*n}

    1. 标量的链式求导法则求zxij\frac{\partial z}{\partial x_{ij}}
      zxij=k,lzYklYklxij \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}}

    2. 对于Yklxij\frac{\partial Y_{kl}}{\partial x_{ij}}
      Yklxij=s(Aksxsl)xij=(Akixil)xij={Aki,l=j0,lj=Akiδlj.l=jδlj=1;lj,δlj=0. \frac{\partial Y_{kl}}{\partial x_{ij}}=\frac{\partial \displaystyle \sum_{s}(A_{ks}x_{sl})}{\partial x_{ij}}=\frac{\partial (A_{ki}x_{il})}{\partial x_{ij}}=\begin{cases}A_{ki},l=j \\0,l\neq j\end{cases}=A_{ki}\delta_{lj}.\\当l=j时,\delta_{lj}=1;当l \neq j时,\delta_{lj}=0.

      1. 第一个等号成立是因为,为了方便第二个等式的推导。其实没必要给出,给出的目的只是为了强化矩阵的乘法。
        • 算的的标量的求导,那么对于xijx_{ij}的偏导一定是一个变量,说白了就是矩阵相乘时xijx_{ij}前的系数。这个系数的计算肯定用到矩阵的乘法。
      2. 第二个等式成立是因为:
        • XXAA相乘,现在已经知道是对XijX_{ij}求导,它在第ii行出现,对应的AklA_{kl}一定在第ii列。所以s=is=i。所以锁定AkiA_{ki}。其中的kk是已经确定的,相当于知道了是AA的第kk行。
        • AkiA_{ki}相乘的元素,对应XX中的第ii行,可以表示为AkixilA_{ki}x_{il},ll取尽XX中的所有列。因为要求的是xijx_{ij}的导数,所以在l=jl=j时,对它的导数为AkiA_{ki},在ljl \neq j时,对它的导数00
    3. 所以
      zxij=k,lzYklYklxij=kzYkjAkiδlj=kzYkjAk \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}}=\sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{ki}\delta_{lj}=\sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{k}

      • 第二个等式成立是因为,取尽所有YY中的列数得出的结果。
        • ljl \neq j时,δ\delta00l=jl = j时,δ\delta11
      • 第三个等式成立是因为,去掉δ\delta并不会该变其值。因为δ\delta的取值只有010或1
    4. 对于kzYkjAki\sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{ki}

      • 这个可以写成矩阵的表达形式。

      • 以为是对kk进行遍历求和,而给出的只有(ki)(k*i)(kl)(k*l)。通过矩阵相乘的概念,kk应该出现在矩阵相乘维度相容的中间,即(ik)(kl)(i*k)和(k*l)(lk)(ki)(l*k)和*(k*i)

      • 若采用(ik)(kl)(i*k)和(k*l),矩阵ATA^T的第ii行和zY\frac{\partial z}{\partial Y}的第jj列的内积。
        zX=ATzY \frac{\partial z}{\partial X}=A^T\frac{\partial z}{\partial Y}

        • 因为采用分布分母布局,所以zX\frac{\partial z}{\partial X}应该是$m*n维的。
          • ATA^Tmpm*p的,zY\frac{\partial z}{\partial Y}pnp*n的。
          • 所以上述是维度是匹配的(相容的)。
      • 若采用(lk)(ki)(l*k)和(k*i),矩阵(zY)T(\frac{\partial z}{\partial Y})^T的第ll行和AA的第ii列的内积。
        zX=(zY)TA \frac{\partial z}{\partial X}=(\frac{\partial z}{\partial Y})^TA

        • 因为采用的是分母布局,所以上述的表达式维度相容,故舍去。

    结论

    • 约定:采用分母布局。

    结论1

    1. A,X,B,YA,X,B,Y都是矩阵,zz是标量,其中z=f(Y),Y=AX+Bz=f(Y),Y=AX+B。求zX\frac{\partial z}{\partial X}

    z=f(Y),Y=AX+B z=f(Y),Y=AX+B

    ​ 则
    zX=ATzY \frac{\partial z}{\partial X}=A^T\frac{\partial z}{\partial Y}
    ​ 2. 设AA都是矩阵,x,y,b\mathbf{x},\mathbf{y},b是向量,zz是标量,其中z=f(Y),Y=Ax+bz=f(Y),Y=A\mathbf{x}+b。求zx\frac{\partial z}{\partial \mathbf{x}}
    z=f(Y),Y=Ax+b z=f(Y),Y=A\mathbf{x}+b

    zx=ATzy \frac{\partial z}{\partial \mathbf{x}}=A^T\frac{\partial z}{\partial \mathbf{y}}

    结论2

    • 如果要求导的自变量在左边,线性变换在右边,也有类似稍有不同的结论如下
    1. A,X,B,YA,X,B,Y都是矩阵,zz是标量,其中z=f(Y),Y=XA+Bz=f(Y),Y=XA+B。求zX\frac{\partial z}{\partial X}
      z=f(Y),Y=XA+B z=f(Y),Y=XA+B

      zX=zYAT \frac{\partial z}{\partial X}=\frac{\partial z}{\partial Y}A^T

    2. XX是矩阵,a,y,b\mathbf{a},\mathbf{y},b是向量,zz是标量,其中z=f(Y),Y=Xa+bz=f(Y),Y=X\mathbf{a}+b。求zx\frac{\partial z}{\partial \mathbf{x}}
      z=f(Y),Y=Xa+b z=f(Y),Y=X\mathbf{a}+b

      zX=zyaT \frac{\partial z}{\partial X}=\frac{\partial z}{\partial \mathbf{y}}\mathbf{a}^T

    技巧

    • 无论自变量在那边,均采用分母布局的方式处理\frac{标量}{矩阵}
    • zX=TzY\frac{\partial z}{\partial X}= 参数矩阵^T * \frac{\partial z}{\partial Y}zX=zYT\frac{\partial z}{\partial X}= \frac{\partial z}{\partial Y} * 参数矩阵^T。至于是那种形式,根据矩阵相乘时的维度相容即可判别。

    小结

    • 在同等情况下,优先考虑链式求导法,尤其后面的的四个结论。其次选择微分法、最后考虑定义法。
    • 没有结局的问题是,矩阵对矩阵的求导,还有矩阵对向量,向量对矩阵求导这三种形式。这个遇到的不多,具体参考:https://www.cnblogs.com/pinard/p/10930902.html。
    • 常见的形式是:,,,,,\frac{标量}{标量},\frac{标量}{向量},\frac{标量}{矩阵},\frac{向量}{标量},\frac{向量}{向量},\frac{矩阵}{标量}
      • 重点:,,\frac{标量}{向量},\frac{标量}{矩阵},\frac{向量}{向量}
    • (矩阵微分性质+迹函数技巧)是真的强大,,矩阵向量链式求导法则(向量对多个向量求导,标量对多个向量求导,标量对多个矩阵的求导)【维度相容】。

    参考:

    这个是真的大佬!

    1. 求导定义与求导布局
    2. 矩阵向量求导之定义法
    3. 矩阵向量求导之微分法
    4. 矩阵向量求导链式法则
    5. 矩阵对矩阵的求导
    展开全文
  • 以下内容是根据刘建平的求导博客做的相关笔记 一、导数的定义与布局 1. 相关说明 2.导数布局 导数部分有分子布局和分母布局两种情况。 分子布局和分母布局相差一个转置。...二、矩阵向量求导之定义 ...

    以下内容是根据刘建平的求导博客做的相关笔记

    一、导数的定义与布局

    1. 相关说明

    在这里插入图片描述

    2.导数布局

    导数部分有分子布局分母布局两种情况。
    分子布局和分母布局相差一个转置。

    • 标量对向量求导布局
      在这里插入图片描述
    • 向量对向量求导布局
      在这里插入图片描述
    • 求导布局总结
      在这里插入图片描述
    • 标量对向量或矩阵求导,以分母布局为主。向量对向量求导,以分母布局为主。

    二、矩阵向量求导之定义法

    写出单个元素间的求导关系,得出求导结果。
    思路简单,适用于求解简单关系的导数

    2.1 标量对向量求导

    在这里插入图片描述

    在这里插入图片描述

    2.2 标量对矩阵求导

    在这里插入图片描述

    2.3 向量对向量求导

    在这里插入图片描述

    三、矩阵向量求导之微分法

    3.1 矩阵微分

    在这里插入图片描述

    3.2 矩阵微分的性质

    矩阵迹相关
    在这里插入图片描述
    在这里插入图片描述
    AA=AA*A^{*}=\left|A\right|
    A=AA1A^{*}=\left|A\right|A^{-1}
    AA^{*}AA的伴随矩阵,AA相应位置的代数余子式构成的矩阵

    3.3使用微分法求解矩阵向量求导

    在这里插入图片描述
    在这里插入图片描述
    d(tr(X))=tr(d(x))d(tr(X))=tr(d(x))
    (uv)=uv+uv(uv)^{'}=u^{'}v+uv^{'}

    四、链式法则

    4.1 链式法则与矩阵相容

    链式关系成立的条件是,相互关联的变量都是向量。
    在这里插入图片描述
    x\bm{x}y\bm{y},z\bm{z}都是向量时,用上面的链式法则公式直接求解。
    当最终的变量是标量时,按上面公式计算会出现维度不相容的情况。需要按下面的方法计算:
    在这里插入图片描述

    展开全文
  • 在机器学习中的矩阵向量求导(三) 矩阵向量求导之微分中,我们讨论了使用微分来求解矩阵向量求导的方法。但是很多时候,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分使用起来也有些麻烦。...
  • 笔记原文链接声明一、求导定义与求导布局原文图片个人笔记二、矩阵向量求导之定义原文图片个人笔记三、矩阵向量求导之微分原文图片个人笔记四、矩阵向量求导链式法则原文图片个人笔记五、矩阵矩阵的求导原文...
  • 网上有一些向量求导的总结,把20多种情况一一考虑,很是麻烦,本文希望找出向量求导的...我总结的向量求导的基本推导准则是(以f(x)对向量求导为例): 1)先f(x)求向量分量的导数,也就是标量的导数,该导数可能...
  • 请思考: 维度为m的一个向量????一个标量????的求导,那么结果也是一个m维的向量:∂?...这个m维的求导结果排列成的m...为了解决矩阵向量求导的结果不唯一,我们引入求导布局。最基本的求导布局有两个:分子布局(numera
  • 前言:构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数模型参数的导数,再利用梯度下降等方法来更新参数。搭建计算图的过程,称为“正向传播”,这个是需要我们自己动手的,因为...
  • 多元函数矩阵求导

    千次阅读 2013-09-01 22:08:39
    图像处理中常常涉及二元函数二维向量求导,特此总结 如何在离散的图像中计算这些连续空间上的微分呢?需要采用有限元差分法求导,主要思路是联立泰勒展开
  • 前言与感谢以前就矩阵求导有心理阴影,到底要不要转置,哪个矩阵放在前面,哪个矩阵放在后面,链式法则怎么搞,由产生此类一系列让人头大的问题。其中,最令人智熄的是经常网上的一些算法公式推导是错误的,因为...
  • 前言与感谢以前就矩阵求导有心理阴影,到底要不要转置,哪个矩阵放在前面,哪个矩阵放在后面,链式法则怎么搞,由产生此类一系列让人头大的问题。其中,最令人智熄的是经常网上的一些算法公式推导是错误的,因为...
  • 解法一:由基本的实值函数对向量求导公式推导 解法二:使用线性变换的求导公式 解法三:元素,网上搜索的绝大部分推导过程都是此 下面只上面两种解法解析,具体如下: 求解BN的反向传播公式 1.BN算法...
  • 矩陣的導數

    千次阅读 2012-04-09 17:34:02
    标量对向量求导 設X,Y是3階列矩陣。 标量矩阵求导 設矩陣U是3 by 3旋轉矩陣。 向量间的求导 矩阵对向量求导 复合标量对向量求导 简记 愛因斯坦求和約定(Einstein notation) 与矩阵求导...
  • 学好线性代数矩阵论需要的不是逻辑...首先矩阵×向量有一种内存小的记:上式a是A的列向量,是向量x的元素(标量)。式(a)的左边上式乘积的角元素为式(a)的右边得证。是正定矩阵,其中为可逆矩阵(nonsingular,行...
  • 学好线性代数矩阵论需要的不是逻辑...首先矩阵×向量有一种内存小的记:上式a是A的列向量,是向量x的元素(标量)。式(a)的左边上式乘积的角元素为式(a)的右边得证。是正定矩阵,其中为可逆矩阵(nonsingular,行...
  • 梯度与梯度下降1 前言2 导数3 导数与偏导数4 导数与方向导数5导数与梯度6 导数与向量7 梯度下降8 梯度下降与机器学习9 梯度下降的缺点10 补充:向量函数求导的问题10.1标量求导10.2对向量求导 1 前言  ...
  • SVM支持向量机总结

    2018-06-13 20:22:00
    一、拉格朗日乘子 一般,在有等式约束时使用拉格朗日乘子,在有不等约束时使用KKT条件。...是不是直接f各个x求导等于0,,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0吧,这样f=0了,...
  • 梯度下降和牛顿的总结与比较机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量。最终建立模型通常用到的优化方法:梯度下降方法、牛顿、拟牛顿等。这些优化方法...
  • 【机器学习笔记】Hessian矩阵

    千次阅读 2017-10-03 14:35:21
    看牛顿的时候,遇到的这...θ:=θ−l′(θ)l′′(θ)\theta := \theta - \frac{l^{'}(\theta)}{l^{''}(\theta)}如果 θ\theta 为向量,就会想,函数对向量求导怎么求? 所以查了一下:1. 标量对向量求导:结果是向量
  • 线性回归中梯度下降向量化 将梯度式写为 此处,X0(i)== 1。 若将上式转置,则可分解为 或者直接写为下式: 由此,可我们之前的代码进行修改,如下: def dJ(theta,X_b,y): # res = np.empty(len(theta))...
  • 中心差分

    2019-02-18 16:10:41
    运动方程中的速度向量和加速度向量用位移的某种组合来表示,将微分方程组的求解问题转化为代数方程组的求解问题,并在... 中心差分是一种显示的积分,它基于用有限差分代替位移时间的求导(即速度和加速度)。
  •  首先,说明称切向量垂直梯度曲线,这是梯度方向的向矢量方向: 设曲线x=x(t)。...z=z(t)满足方程u(x,y,z)=c,即u(x(t),y(t),z(t))=c,利用复合函数求导法则,方程两边同一时候t求导数,得 ...

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

对法向量求导