精华内容
下载资源
问答
  • 文章目录矩阵向量求导说明1说明21.定义法1. 用定义法求解标量对向量求导举个例子2.用定义法求解标量对矩阵求导举个例子3.用定义法求解向量向量求导举个例子小结2. 微分法1.矩阵微分1.单变量2.多变量3.矩阵微分迹...

    矩阵向量求导

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

    说明1

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

    说明2

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

    1.定义法

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

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

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

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

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

    举个例子

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

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

    ∂ y ∂ x i = ∂ a T x x i = ∂ ∑ j = 1 n a j x j ∂ x i = a i \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 xiy=xiaTx=xij=1najxj=ai

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

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

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

    • 将标量(分子)完全展开
      ∂ y ∂ x i = ∂ x T x x i = ∂ ∑ j = 1 n x j x j ∂ x i = 2 x j \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 xiy=xixTx=xij=1nxjxj=2xj

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

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

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

    • 将标量(分子)完全展开
      ∂ x T A x ∂ x k = ∂ ∑ i = 1 n ∑ j = 1 n x i A i j x j ∂ x k = ∑ i = 1 n A i k x k + ∑ i = j n A j k x k = A T x + A x \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} xkxTAx=xki=1nj=1nxiAijxj=i=1nAikxk+i=jnAjkxk=ATx+Ax

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

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

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

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

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

    举个例子

    y = a T X b \mathbf{y}=\mathbf{a}^TX\mathbf{b} y=aTXb,求解 ∂ a T X b ∂ X \frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X} XaTXb X m ∗ n , a m ∗ 1 , b n ∗ 1 X_{m*n},\mathbf{a}_{m*1},\mathbf{b}_{n*1} Xmn,am1,bn1

    • 将标量(分子)完全展开
      ∂ a T X b ∂ X = ∂ ∑ p = 1 m ∑ q = 1 n a p X p a b q ∂ X i j = ∂ a i X i j b j ∂ X i j = a i b j \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 XaTXb=Xijp=1mq=1napXpabq=XijaiXijbj=aibj

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

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

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

    举个例子

    y = A x \mathbf{y}=A\mathbf{x} y=Ax,求解 ∂ A x ∂ x \frac{\partial A\mathbf{x}}{\partial\mathbf{x}} xAx A m ∗ n , x n ∗ 1 , y m ∗ 1 A_{m*n},\mathbf{x}_{n*1},\mathbf{y}_{m*1} Amn,xn1,ym1

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

    • 先求矩阵的第 i i i行和向量的内积对向量的第 j j j分量求导,用定义法求解过程如下:
      ∂ A i x ∂ x j = ∂ ∑ k = 1 n A i k x k ∂ x j = A i j \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} xjAix=xjk=1nAikxk=Aij

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

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

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

    小结

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

    2. 微分法

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

    1.矩阵微分

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

    1.单变量

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

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

    2.多变量

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

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

    3.矩阵微分

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

    • 矩阵下的微分和导数的关系如下:
      d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = t r ( ( ∂ f X ) T d X ) df=\displaystyle \sum_{i=1}^{m}\sum_{j=1}^{n}\frac{\partial f}{\partial X_{ij}}dX_{ij}=tr((\frac{\partial f}{X})^TdX) df=i=1mj=1nXijfdXij=tr((Xf)TdX)

    迹函数

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

    • 其中 A , B A,B A,B同型。

    • 举个例子:
      X = ( x 11 x 12 x 21 x 22 x 31 x 31 ) d X = ( d x 11 d x 12 d x 21 d x 22 d x 31 d x 31 ) ∴ d f = ∂ f ∂ x 11 d x 11 + ∂ f ∂ x 21 d x 21 + ∂ f ∂ x 31 d x 31 + ∂ f ∂ x 12 d x 12 + ∂ f ∂ x 22 d x 22 + ∂ f ∂ x 32 d x 32 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} X=x11x21x31x12x22x31dX=dx11dx21dx31dx12dx22dx31df=x11fdx11+x21fdx21+x31fdx31+x12fdx12+x22fdx22+x32fdx32

      ∴ d f = t r ( ( ∂ f ∂ x 11 ∂ f ∂ x 12 ∂ f ∂ x 21 ∂ f ∂ x 22 ∂ f ∂ x 31 ∂ f ∂ x 23 ) T ( d x 11 d x 12 d x 21 d x 22 d x 31 d x 31 ) ) \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}) df=tr(x11fx21fx31fx12fx22fx23fTdx11dx21dx31dx12dx22dx31)

      其中:
      ( ∂ f ∂ x 11 ∂ f ∂ x 12 ∂ f ∂ x 21 ∂ f ∂ x 22 ∂ f ∂ x 31 ∂ f ∂ x 23 ) T ( d x 11 d x 12 d x 21 d x 22 d x 31 d x 31 ) = ( ∂ f ∂ x 11 d x 11 + ∂ f ∂ x 21 d x 21 + ∂ f ∂ x 31 d x 31 ∗ ∗ ∂ f ∂ x 12 d x 12 + ∂ f ∂ 22 d x 22 + ∂ f ∂ x 32 d x 32 ) \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} x11fx21fx31fx12fx22fx23fTdx11dx21dx31dx12dx22dx31=(x11fdx11+x21fdx21+x31fdx31x12fdx12+22fdx22+x32fdx32)
      所以:
      d f = t r ( ( ∂ f X ) T d X ) df=tr((\frac{\partial f}{X})^TdX) df=tr((Xf)TdX)

    统一表示

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

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

    矩阵微分的性质

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

    说明:

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

    迹函数的性质

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

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

    1.法则

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

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

    2.例子

    例1

    y = a T X b y=a^TXb y=aTXb,求 ∂ y ∂ X \frac{\partial y}{\partial X} Xy a m ∗ 1 , X m ∗ n , b n ∗ 1 , y 1 ∗ 1 a_{m*1},X_{m*n},b_{n*1},y_{1*1} am1,Xmn,bn1,y11。类型 标 量 矩 阵 \frac{标量}{矩阵} y y y是一个标量, d y dy dy也是一个标量。

    求解步骤:

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

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

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

    例2

    y = a T e x p ( X b ) y=a^Texp(Xb) y=aTexp(Xb),求 ∂ y ∂ X \frac{\partial y}{\partial X} Xy a m ∗ 1 , X m ∗ n , b n ∗ 1 , y 1 ∗ 1 a_{m*1},X_{m*n},b_{n*1},y_{1*1} am1,Xmn,bn1,y11。类型 标 量 矩 阵 \frac{标量}{矩阵} y y y是一个标量, d y dy dy也是一个标量。

    1. d y = d ( a ) e x p ( X b ) + a T d ( e x p ( X b ) ) = a T d ( e x p ( X b ) ) = a T e x p ( X b ) ⊙ d ( X b ) = a T e x p ( X b ) ⊙ ( 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)\\ dy=d(a)exp(Xb)+aTd(exp(Xb))=aTd(exp(Xb))=aTexp(Xb)d(Xb)=aTexp(Xb)(d(X)b)

      1. 第三个等式成立,是很显然的,用到哈达玛积。
      2. 第四个等式成立,目标是要剥离出 d X dX dX,同时这样的写法是没用问题的。 b b b对于 X X X来说是常数。可以展开来详细看看。
    2. d y = t r ( d y ) = t r ( a T e x p ( X b ) ⊙ ( d ( X ) b ) ) = t r ( ( a ⊙ e x p ( X b ) ) T ( d ( X ) b ) ) = t r ( ( a ⊙ e x p ( X b ) ) T d X b ) = t r ( b ( a ⊙ e x p ( X b ) ) T d X ) 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) 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)

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

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

    1.基本形式

    ∂ t r ( A B ) ∂ A \frac{\partial tr(AB)}{\partial A} Atr(AB),其中 A m ∗ n , B n ∗ m A_{m*n},B_{n*m} Amn,Bnm t r ( A B ) ( 1 ∗ 1 ) tr(AB)_{(1*1)} tr(AB)(11)是个标量。类型 标 量 矩 阵 \frac{标量}{矩阵}

    1. 展开
      d ( t r ( A B ) ) = t r ( d ( A B ) ) = t r ( d ( A ) B + A d B ) = t r ( d ( A ) B ) = t r ( B d A ) 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. 第一个等式成立是以为, d d d操作和 t r tr tr操作可以互换。矩阵微分性质4,微分的迹。
      2. 第二个等式成立是因为,矩阵微分2,微分乘法。
      3. 第三个等式成立是因为,做种求的是关于 d A dA dA,所以不含 d ( A ) d(A) d(A)的项最终值均为 0 0 0,故舍去。
      4. 第四个等式成立是因为,迹函数技巧3,迹的交换律。
    2. 结果,加个转置
      ∂ t r ( A B ) ∂ A = B T \frac{\partial tr(AB)}{\partial A}=B^T Atr(AB)=BT

    ∂ t r ( A B ) ∂ B \frac{\partial tr(AB)}{\partial B} Btr(AB),其中 A m ∗ n , B n ∗ m A_{m*n},B_{n*m} Amn,Bnm t r ( A B ) ( 1 ∗ 1 ) tr(AB)_{(1*1)} tr(AB)(11)是个标量。

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

    2.例子

    ∂ t r ( W T A W ) ∂ W = ∂ ( W T A W ) ∂ W \frac{\partial tr(W^TAW)}{\partial W}=\frac{\partial (W^TAW)}{\partial W} Wtr(WTAW)=W(WTAW) W n ∗ 1 , A n ∗ n W_{n*1},A_{n*n} Wn1,Ann, W T A W ( 1 ∗ 1 ) W^TAW_{(1*1)} WTAW(11)是一个标量。类型 标 量 向 量 \frac{标量}{向量}

    1. d ( t r ( W T A W ) ) = t r ( d ( W T A W ) ) = t r ( d ( W T ) A W + W T A d ( W ) ) = t r ( ( d ( W ) T A W + W T A d ( W ) ) = t r ( ( d ( W ) ) T A W ) + t r ( W T A d ( W ) ) = t r ( ( A W ) T d ( W ) ) + t r ( W T A d ( 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)) 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))

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

    小结

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

    3.链式法

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

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

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

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

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

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

    • 拓展: x → y 1 ⋯ → y n → z \mathbf{x}\rightarrow \mathbf{y_1} \cdots\rightarrow \mathbf{y_n}\rightarrow \mathbf{z} xy1ynz
      ∂ z ∂ x = ∂ z ∂ y n ∂ y n ∂ y n − 1 ⋯ ∂ y ∂ x \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}} xz=ynzyn1ynxy

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

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

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

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

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

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

      ∂ z ∂ x = ( ∂ y ∂ x ) T ∂ z ∂ y \frac{\partial z}{\partial \mathbf{x}}=(\frac{\partial \mathbf{y}}{\partial \mathbf{x}})^T\frac{\partial z}{\partial \mathbf{y}} xz=(xy)Tyz

    • 推论: x → y 1 ⋯ → y n → z \mathbf{x}\rightarrow \mathbf{y_1} \cdots\rightarrow \mathbf{y_n}\rightarrow z xy1ynz
      ∂ z ∂ x = ( ∂ y n ∂ y n − 1 ∂ y n − 1 ∂ y n − 2 ⋯ ∂ y 1 ∂ x ) T ∂ z ∂ y n \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}} xz=(yn1ynyn2yn1xy1)Tynz

    例子

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

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

    • ∂ 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 θz=θ(Xθy)=θ(Xθ)==X

      • 采用分子布局, ∂ ( X θ ) ∂ θ \frac{\partial (X\theta)}{\partial \theta} θ(Xθ)是( m ∗ n m*n mn)维。所以结果是 X m ∗ n X_{m*n} Xmn,而不是 X T X^T XT
    • ∂ l ∂ z = ∂ z T z ∂ z = 标 量 向 量 = 2 z \frac{\partial l}{\partial \mathbf{z}}=\frac{\partial z^Tz}{\partial z}=\frac{标量}{向量}=2z zl=zzTz==2z

      • 这个计算,可以用定义法求解。前面已经求过了。
    • ∂ l ∂ θ = ( ∂ z ∂ θ ) T ∂ l ∂ z = X T ( 2 z ) = 2 X T ( 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}) θl=(θz)Tzl=XT(2z)=2XT(Xθy)

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

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

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

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

    • 虽然我们没有全局的标量对矩阵的链式求导法则,但是对于一些线性关系的链式求导,还是可以得到一些有用的结论的。
      ∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ x i j = t r ( ( ∂ z ∂ Y ) T ∂ Y ∂ x i j ) \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}}) xijz=k,lYklzxijYkl=tr((Yz)TxijY)

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

    经典例子

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

    1. 标量的链式求导法则求 ∂ z ∂ x i j \frac{\partial z}{\partial x_{ij}} xijz
      ∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ x i j \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}} xijz=k,lYklzxijYkl

    2. 对于 ∂ Y k l ∂ x i j \frac{\partial Y_{kl}}{\partial x_{ij}} xijYkl
      ∂ Y k l ∂ x i j = ∂ ∑ s ( A k s x s l ) ∂ x i j = ∂ ( A k i x i l ) ∂ x i j = { A k i , l = j 0 , l ≠ j = A k i δ l j . 当 l = j 时 , δ l j = 1 ; 当 l ≠ j 时 , δ l j = 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. xijYkl=xijs(Aksxsl)=xij(Akixil)={Aki,l=j0,l=j=Akiδlj.l=jδlj=1;l=j,δlj=0.

      1. 第一个等号成立是因为,为了方便第二个等式的推导。其实没必要给出,给出的目的只是为了强化矩阵的乘法。
        • 算的的标量的求导,那么对于 x i j x_{ij} xij的偏导一定是一个变量,说白了就是矩阵相乘时 x i j x_{ij} xij前的系数。这个系数的计算肯定用到矩阵的乘法。
      2. 第二个等式成立是因为:
        • X X X A A A相乘,现在已经知道是对 X i j X_{ij} Xij求导,它在第 i i i行出现,对应的 A k l A_{kl} Akl一定在第 i i i列。所以 s = i s=i s=i。所以锁定 A k i A_{ki} Aki。其中的 k k k是已经确定的,相当于知道了是 A A A的第 k k k行。
        • A k i A_{ki} Aki相乘的元素,对应 X X X中的第 i i i行,可以表示为 A k i x i l A_{ki}x_{il} Akixil, l l l取尽 X X X中的所有列。因为要求的是 x i j x_{ij} xij的导数,所以在 l = j l=j l=j时,对它的导数为 A k i A_{ki} Aki,在 l ≠ j l \neq j l=j时,对它的导数 0 0 0
    3. 所以
      ∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ x i j = ∑ k ∂ z ∂ Y k j A k i δ l j = ∑ k ∂ z ∂ Y k j A k \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} xijz=k,lYklzxijYkl=kYkjzAkiδlj=kYkjzAk

      • 第二个等式成立是因为,取尽所有 Y Y Y中的列数得出的结果。
        • l ≠ j l \neq j l=j时, δ \delta δ 0 0 0 l = j l = j l=j时, δ \delta δ 1 1 1
      • 第三个等式成立是因为,去掉 δ \delta δ并不会该变其值。因为 δ \delta δ的取值只有 0 或 1 0或1 01
    4. 对于 ∑ k ∂ z ∂ Y k j A k i \sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{ki} kYkjzAki

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

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

      • 若采用 ( i ∗ k ) 和 ( k ∗ l ) (i*k)和(k*l) (ik)(kl),矩阵 A T A^T AT的第 i i i行和 ∂ z ∂ Y \frac{\partial z}{\partial Y} Yz的第 j j j列的内积。
        ∂ z ∂ X = A T ∂ z ∂ Y \frac{\partial z}{\partial X}=A^T\frac{\partial z}{\partial Y} Xz=ATYz

        • 因为采用分布分母布局,所以 ∂ z ∂ X \frac{\partial z}{\partial X} Xz应该是$m*n维的。
          • A T A^T AT m ∗ p m*p mp的, ∂ z ∂ Y \frac{\partial z}{\partial Y} Yz p ∗ n p*n pn的。
          • 所以上述是维度是匹配的(相容的)。
      • 若采用 ( l ∗ k ) 和 ( k ∗ i ) (l*k)和(k*i) (lk)(ki),矩阵 ( ∂ z ∂ Y ) T (\frac{\partial z}{\partial Y})^T (Yz)T的第 l l l行和 A A A的第 i i i列的内积。
        ∂ z ∂ X = ( ∂ z ∂ Y ) T A \frac{\partial z}{\partial X}=(\frac{\partial z}{\partial Y})^TA Xz=(Yz)TA

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

    结论

    • 约定:采用分母布局。

    结论1

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

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

    ​ 则
    ∂ z ∂ X = A T ∂ z ∂ Y \frac{\partial z}{\partial X}=A^T\frac{\partial z}{\partial Y} Xz=ATYz
    ​ 2. 设 A A A都是矩阵, x , y , b \mathbf{x},\mathbf{y},b x,y,b是向量, z z z是标量,其中 z = f ( Y ) , Y = A x + b z=f(Y),Y=A\mathbf{x}+b z=f(Y),Y=Ax+b。求 ∂ z ∂ x \frac{\partial z}{\partial \mathbf{x}} xz
    z = f ( Y ) , Y = A x + b z=f(Y),Y=A\mathbf{x}+b z=f(Y),Y=Ax+b

    ∂ z ∂ x = A T ∂ z ∂ y \frac{\partial z}{\partial \mathbf{x}}=A^T\frac{\partial z}{\partial \mathbf{y}} xz=ATyz

    结论2

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

      ∂ z ∂ X = ∂ z ∂ Y A T \frac{\partial z}{\partial X}=\frac{\partial z}{\partial Y}A^T Xz=YzAT

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

      ∂ z ∂ X = ∂ z ∂ y a T \frac{\partial z}{\partial X}=\frac{\partial z}{\partial \mathbf{y}}\mathbf{a}^T Xz=yzaT

    技巧

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

    小结

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

    参考:

    这个是真的大佬!

    1. 求导定义与求导布局
    2. 矩阵向量求导之定义法
    3. 矩阵向量求导之微分法
    4. 矩阵向量求导链式法则
    5. 矩阵对矩阵的求导
    展开全文
  • 矩阵(向量求导

    万次阅读 2011-05-22 09:46:00
    矩阵(向量求导

    在网上看到有人贴了如下求导公式:

    Y = A * X --> DY/DX = A'

    Y = X * A --> DY/DX = A

    Y = A' * X * B --> DY/DX = A * B'

    Y = A' * X' * B --> DY/DX = B * A'

    于是把以前学过的矩阵求导部分整理一下:

    1. 矩阵Y对标量x求导:

       相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了

       Y = [y(ij)] --> dY/dx = [dy(ji)/dx]

    2. 标量y对列向量X求导:

       注意与上面不同,这次括号内是求偏导,不转置,对N×1向量求导后还是N×1向量

       y = f(x1,x2,..,xn) --> dy/dX = (Dy/Dx1,Dy/Dx2,..,Dy/Dxn)'

    3. 行向量Y'对列向量X求导:

       注意1×M向量对N×1向量求导后是N×M矩阵。

       将Y的每一列对X求偏导,将各列构成一个矩阵。

       重要结论:

       dX'/dX = I

       d(AX)'/dX = A'

    4. 列向量Y对行向量X’求导:

       转化为行向量Y’对列向量X的导数,然后转置。

       注意M×1向量对1×N向量求导结果为M×N矩阵。

       dY/dX' = (dY'/dX)'

    5. 向量积对列向量X求导运算法则:

       注意与标量求导有点不同。

       d(UV')/dX = (dU/dX)V' + U(dV'/dX)

       d(U'V)/dX = (dU'/dX)V + (dV'/dX)U'

       重要结论:

       d(X'A)/dX = (dX'/dX)A + (dA/dX)X' = IA + 0X' = A

       d(AX)/dX' = (d(X'A')/dX)' = (A')' = A

       d(X'AX)/dX = (dX'/dX)AX + (d(AX)'/dX)X = AX + A'X

    6. 矩阵Y对列向量X求导:

       将Y对X的每一个分量求偏导,构成一个超向量。

       注意该向量的每一个元素都是一个矩阵。

    7. 矩阵积对列向量求导法则:

       d(uV)/dX = (du/dX)V + u(dV/dX)

       d(UV)/dX = (dU/dX)V + U(dV/dX)

       重要结论:

       d(X'A)/dX = (dX'/dX)A + X'(dA/dX) = IA + X'0 = A

    8. 标量y对矩阵X的导数:

       类似标量y对列向量X的导数,

       把y对每个X的元素求偏导,不用转置。

       dy/dX = [ Dy/Dx(ij) ]

       重要结论:

       y = U'XV = ΣΣu(i)x(ij)v(j) 于是 dy/dX = = UV'

       y = U'X'XU 则 dy/dX = 2XUU'

       y = (XU-V)'(XU-V) 则 dy/dX = d(U'X'XU - 2V'XU + V'V)/dX = 2XUU' - 2VU' + 0 = 2(XU-V)U'

    9. 矩阵Y对矩阵X的导数:

       将Y的每个元素对X求导,然后排在一起形成超级矩阵。

    以上并非小虫原创,实际上小虫也正在理解这个问题,因此如有不对的地方,并非小虫之责

    作者:liuyi5052

    就是一般的多元函数求导,没有什么特别的

     

    http://blog.163.com/live_freely/blog/static/151142060201023154057339/

    展开全文
  • 1.标量对向量求导 标量可以直接对向量求导 import torch p = torch.tensor([2.0, 3.0, 5.0], requires_grad=True) q = p*2+1 z = torch.mean(q) z.backward() print(p.grad) print(p.grad*p) 结果: tensor([0.6667...

    1.标量对向量求导

    标量可以直接对向量求导

    import torch
    p = torch.tensor([2.0, 3.0, 5.0], requires_grad=True)
    q = p*2+1
    z = torch.mean(q)
    z.backward()
    print(p.grad)
    print(p.grad*p)
    

    结果:

    tensor([0.6667, 0.6667, 0.6667])
    tensor([1.3333, 2.0000, 3.3333], grad_fn=<MulBackward0>)
    

    解释如下:
    z = 1 / 3 ( 2 p + 1 ) z=1/3(2p+1)z=1/3(2p+1),z zz对p pp求导为2/3,因为p pp是向量,故为[0.6667, 0.6667, 0.6667],导数乘以p pp的值为[1.3333, 2.0000, 3.3333]。

    求导过程其实就是求一个雅可比矩阵:
    在这里插入图片描述

    2.向量对向量求导

    向量不能直接对向量求导,要想实现向量对向量求导就要先设置一个权重系数v,然后执行如下操作。这样对可以对向量y中的元素逐一求导,求导后分别乘以系数就是最终的值了。

    import torch
    x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
    print(x)
    y = x*2
    v = torch.tensor([0.1, 1, 0.01], dtype=torch.float)
    y.backward(v)
    print(x.grad)
    

    结果:

    tensor([1., 2., 3.], requires_grad=True)
    tensor([0.2000, 2.0000, 0.0200])
    

    解释如下:
    y = 2 x y=2xy=2x,y yy对x xx求导为2,因为x是向量,故为[2, 2, 2],乘上系数为[0.2000, 2.0000, 0.0200]。

    求导过程其实就是求一个雅可比向量积:
    在这里插入图片描述

    参考:
    https://blog.csdn.net/comli_cn/article/details/106521093

    展开全文
  • 今天早上遇到@tornadomeet在deep learning高质量群里问:一个列向量对一个列向量求导的结果,也就是下面的第一个公式:Y = A * X --> DY/DX = A’。我这才意识到矩阵里的很多知道又忘了,这些东西一旦不用,忘了...

    一个准则:按照单变量求导来做,然后调整下维数就可以了。 比如 对矩阵的求导,结果一定是和矩阵维数一致才对

    今天早上遇到@tornadomeet在deep learning高质量群里问:一个列向量对一个列向量求导的结果,也就是下面的第一个公式:Y = A * X --> DY/DX = A’。我这才意识到矩阵里的很多知道又忘了,这些东西一旦不用,忘了就很快。矩阵和概率论的东西真心很重要,下面分享别人的成果,希望你可以证明出来。

    在网上看到有人贴了如下求导公式:

    Y = A * X --> DY/DX = A’

    Y = X * A --> DY/DX = A

    Y = A’ * X * B --> DY/DX = A * B’

    Y = A’ * X’ * B --> DY/DX = B * A’

    于是把以前学过的矩阵求导部分整理一下:

    1. 矩阵Y对标量x求导:

      相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了

      Y = [y(ij)] --> dY/dx = [dy(ji)/dx]

    2. 标量y对列向量X求导:

      注意与上面不同,这次括号内是求偏导,不转置,对N×1向量求导后还是N×1向量

      y = f(x1,x2,…,xn) --> dy/dX = (Dy/Dx1,Dy/Dx2,…,Dy/Dxn)’

    3. 行向量Y’对列向量X求导:

      注意1×M向量对N×1向量求导后是N×M矩阵。

      将Y的每一列对X求偏导,将各列构成一个矩阵。

      重要结论:

      dX’/dX = I

      d(AX)’/dX = A’

    4. 列向量Y对行向量X’求导:

      转化为行向量Y’对列向量X的导数,然后转置。

      注意M×1向量对1×N向量求导结果为M×N矩阵。

      dY/dX’ = (dY’/dX)’

    5. 向量积对列向量X求导运算法则:

      注意与标量求导有点不同。

      d(UV’)/dX = (dU/dX)V’ + U(dV’/dX)

      d(U’V)/dX = (dU’/dX)V + (dV’/dX)U’

      重要结论:

      d(X’A)/dX = (dX’/dX)A + (dA/dX)X’ = IA + 0X’ = A

      d(AX)/dX’ = (d(X’A’)/dX)’ = (A’)’ = A

      d(X’AX)/dX = (dX’/dX)AX + (d(AX)’/dX)X = AX + A’X

    6. 矩阵Y对列向量X求导:

      将Y对X的每一个分量求偏导,构成一个超向量。

      注意该向量的每一个元素都是一个矩阵。

    7. 矩阵积对列向量求导法则:

      d(uV)/dX = (du/dX)V + u(dV/dX)

      d(UV)/dX = (dU/dX)V + U(dV/dX)

      重要结论:

      d(X’A)/dX = (dX’/dX)A + X’(dA/dX) = IA + X’0 = A

    8. 标量y对矩阵X的导数:

      类似标量y对列向量X的导数,

      把y对每个X的元素求偏导,不用转置。

      dy/dX = [ Dy/Dx(ij) ]

      重要结论:

      y = U’XV = ΣΣu(i)x(ij)v(j) 于是 dy/dX = = UV’

      y = U’X’XU 则 dy/dX = 2XUU’

      y = (XU-V)’(XU-V) 则 dy/dX = d(U’X’XU - 2V’XU + V’V)/dX = 2XUU’ - 2VU’ + 0 = 2(XU-V)U’

    9. 矩阵Y对矩阵X的导数:

      将Y的每个元素对X求导,然后排在一起形成超级矩阵。

    以上并非小虫原创,实际上小虫也正在理解这个问题,因此如有不对的地方,并非小虫之责

    ————————————————
    版权声明:本文为CSDN博主「wbglearn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wbgxx333/article/details/22992977

    展开全文
  • 向量矩阵求导及部分证明

    千次阅读 2019-09-11 16:22:54
    证明:设x是一个n维列向量,记为,则 同理可得 二、 证明:设A是一个n维矩阵,,则有: 同理可证得: 三、 证明: 四、 证明:设,有:. 同理有: 五、 证明:(法一)从定义出发证明: 设...
  • 1.标量对向量求导 标量可以直接对向量求导 import torch p = torch.tensor([2.0, 3.0, 5.0], requires_grad=True) q = p*2+1 z = torch.mean(q) z.backward() print(p.grad) print(p.grad*p) 结果: tensor([0.6667...
  • 矩阵、向量求导

    2017-02-07 21:01:48
    在网上看到有人贴了如下求导公式: Y = A * X --> DY/DX = A' Y = X * A --> DY/DX = A Y = A' * X * B --> DY/DX = A * B' Y = A' * X' * B --> DY/DX = B * A' 于是把以前学过的矩阵求导部分整理...
  • 在机器学习中的矩阵向量求导(一) 求导定义与求导布局中,我们讨论了向量矩阵求导的9种定义与求导布局的概念。今天我们就讨论下其中的标量对向量求导,标量对矩阵求导, 以及向量向量求导这三种场景的基本求解思路。...
  • 向量求导

    2020-08-28 20:42:39
    向量求导对标量求导矩阵对标量求导向量对标量求导向量向量求导向量对列向量求导向量对行向量求导向量向量求导 参考文库链接 对标量求导 矩阵对标量求导 dydx=dy11dxdy12dxdy21dxdy22dx \frac{\mathrm{d} y...
  • 矩阵向量求导

    2020-03-25 16:10:45
    矩阵向量求导一.定义和所有求导类型1.1 定义1.2 分布布局的介绍1.3 所有的求导类型二.对标量的求导2.1 标量对标量的求导2.2 向量对标量的求导2.3 矩阵对标量的求导三.标量对向量、矩阵的求导3.1.标量对向量求导3.2...
  • 向量向量求导

    千次阅读 2016-01-15 16:28:32
    上面这个的推导过程 已知 参考资料 ... 关于参考资料链接里的不易理解的Denominator-layout notation和Numerator-layout notation: 矩阵求导 与 矩阵相乘
  • 复数域内积求导

    千次阅读 2018-10-02 03:02:53
    看了下面这个帖子,基本理解了复数域内积求导的过程: https://math.stackexchange.com/a/393946/599299
  • 向量求导公式

    千次阅读 2016-12-15 16:00:01
    最近在看吴恩达的视频啊、LDA啊、PCA啊,觉得很有必要将向量求导公式复习一下,要不感觉算的时候怪怪的~
  • 在矩阵向量求导前4篇文章中,我们主要讨论了标量对向量矩阵的求导,以及向量向量求导。本文我们就讨论下之前没有涉及到的矩阵对矩阵的求导,还有矩阵对向量向量对矩阵求导这几种形式的求导方法。  本文所有...
  • 向量求导(转)

    千次阅读 2017-02-10 00:09:02
    向量求导  (2012-04-23 22:40:37) 转载▼ 标签:  向量   求导   杂谈 分类: 数学之美 1. 矩阵Y对标量x求导:  相当于每个元素求导数后转置一下,注意M×N...
  • 矩阵论:向量求导/微分和矩阵微分

    万次阅读 多人点赞 2017-04-03 16:51:05
    著名的matrix cookbook为广大的研究者们提供了一本大字典,里面有着各种简单到复杂矩阵和向量求导法则。 布局(Layout) 矩阵求导有两种布局,分子布局(numerator layout)和分母布局(denominator layout)。 ...
  • 在机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法中,我们讨论了使用微分法来求解矩阵向量求导的方法。但是很多时候,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。...
  • 五.矩阵向量求导

    2021-05-28 09:51:26
    标量对向量求导,本质上是实值函数对向量的每个分量求导,下面用实例来说明。 例1:y=aTx,a∈Rn×1,x∈Rn×1,y∈R,求∂aTx∂xy=\mathbf{a^{T}x}, \mathbf{a} \in R^{n\times 1} ,\mathbf{x} \in R^{n\times 1},y\in R...
  • 矩阵向量求导法则

    2015-12-17 11:14:54
    机器学习中经常会用到矩阵向量求导,首先得看懂求导公式,编程的时候才能方便实现。 资源来源于互联网,好像是leoleo的博客,但是原文找不到了,侵删。下面把资源贴出来 网盘链接:...
  • 目标: 求得下式: ∂tr(CH(B⊗A)H(B⊗A)C)∂A∗\frac{{{\partial\rm{tr(}}{{\bf{C}}^H}{{({\... ⊗\otimes⊗表示克罗内克。本问题的实际意义是求得了目标函数(分子)对于分母的共轭梯度(复数域下代表最速下降方向
  • 文章目录矩阵对标量求导标量对矩阵求导向量向量求导(雅可比矩阵)向量求导的链式法则矩阵迹实值函数对向量求导 参考资料 1. 机器学习中的矩阵、向量求导 矩阵对标量求导 求导结果与函数(矩阵)同型,即导数结果...
  • 矩阵向量求导-刘建平Pinard|笔记矩阵向量求导(刘建平Pinard) 笔记原文链接声明一、求导定义与求导布局原文图片个人笔记二、矩阵向量求导之定义法原文图片个人笔记三、矩阵向量求导之微分法原文图片个人笔记四、矩阵...
  • 向量求导的常用公式

    千次阅读 2019-05-09 15:15:15
    向量求导的常用公式 鲁鹏 北京理工大学宇航学院 2019.05.09 最近经常会遇到常数和向量向量求导的计算,感觉需要总结点什么了。以后,我还会在这个文档中添加新的公式。 前提和定义 首先做如下定义,已知...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,948
精华内容 2,779
关键字:

向量积的求导