精华内容
下载资源
问答
  • 文章目录矩阵向量求导说明1说明21.定义法1. 用定义法求解标量对向量求导举个例子2.用定义法求解标量对矩阵求导举个例子3....向量向量求导法则2.标量对多个向量的链式求导法则例子3.标量对多个矩阵的链式求导法则

    矩阵向量求导

    摘自: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. 矩阵对矩阵的求导
    展开全文
  • 多元复合函数求导法则

    千次阅读 2017-11-04 00:34:17
    多元复合函数求导法则 注:复合函数向量函数

    注:复合函数为向量值函数。

    链式求导法则

    若: m,p,nN,m,p,n1,
    fm×1=f1fm:RpRm,gp×1=g1gp:RnRp,
    zm×1=f(yp×1),yp×1=g(xn×1),
    dz=f(y)dy,dydx=(yixj)p×n,

    则: dzdx=f(g(x))g(x)

    证明:
    iN,1im,
    Δzi=pk=1ziykΔyk+pk=1Δyk2αi(y,Δy)
    其中 Δy=0αi(y,Δy)=0,limΔy0αi(y,Δy)=0
    则:jN,1jn,
    ΔziΔxj=pk=1ziykΔykΔxj+|Δxj|Δxjpk=1(ΔykΔxj)2αi(y,Δy)
    易知: limΔxj0Δy=0,limΔxj0αi(y,Δy)=0
    于是: zixj=limΔxj0ΔziΔxj=pk=1ziykykxj
    (dzdx)ij=pk=1(f(g(x)))ik(g(x))kj

    一阶全微分的形式不变性

    dz=f(g(x))g(x)dx=f(y)dy

    展开全文
  • 矩阵求导法则与性质

    万次阅读 多人点赞 2018-07-04 16:04:52
    介绍矩阵求导法则,以及常用的求导公式、迹函数、行列式求导结论 矩阵求导法则 矩阵求导应该分为标量求导、向量求导、矩阵求导三个方面来介绍,公式繁多,但仔细看看其实是有规律可循的。 标量求导 无论是...

    介绍矩阵求导法则,以及常用的求导公式、迹函数、行列式求导结论

    矩阵求导法则

    矩阵求导应该分为标量求导、向量求导、矩阵求导三个方面来介绍,公式繁多,但仔细看看其实是有规律可循的。

    标量求导

    无论是矩阵、向量对标量求导,或者是标量对矩阵、向量求导,其结论都是一样的:等价于对矩阵(向量)的每个分量求导,并且保持维数不变。

    例如,我们可以计算标量对向量求导:

    y为一个元素,xT=[x1...xq]q维行向量,则:

    yxT=[yx1...yxq]

    向量求导

    对于向量求导,我们可以先将向量看做一个标量,然后使用标量求导法则,最后将向量形式化为标量进行。

    例如,我们可以计算行向量对列向量求导:

    yT=[y1...yn]n维行向量,x=[x1,...,xp]p维列向量,则:

    yTx=[y1x...ynx]=[y1x1...ynx1.........y1xp...ynxp]

    矩阵求导

    与向量求导类似,先将矩阵化当做一个标量,再使用标量对矩阵的运算进行。

    例如,我们可以计算矩阵对列向量求导:

    Y=[y11...y1n.........ym1...ymn]m×n矩阵,x=[x1,...,xp]p维列向量,则:

    Yx=[Yx1,...,Yxp]

    矩阵微积分

    常见求导性质

    实值函数相对于实向量的梯度

    f(x)=x=[x1,...,xn]T

    f(x)xT=xxT=In×n

    (f(x))Tx=xTx=In×n

    f(x)x=xx=vec(In×n)

    (f(x))TxT=xTxT=vec(In×n)T

    其中,vec表示向量化矩阵,按列将矩阵表示为向量,具体可见Wikipedia。

    常见性质

    1. f(x)=Ax,则

      f(x)xT=(Ax)xT=A

    2. f(x)=xTAx,则

      f(x)x=(xTAx)x=Ax+ATx

    3. f(x)=aTx,则

      aTxx=xTax=a

    4. f(x)=xTAy,则

      xTAyx=Ay

      xTAyA=xyT

    5. df(X)=tr((f(X)X)TdX)

    6. 矩阵微分也满足线性法则、乘积法则。

    7. 矩阵的逆的微分

      d(X1)=X1(dX)X1