矩阵向量链式法则四_机器学习

前言

     参考文档 

      https://www.cnblogs.com/pinard/p/10825264.html

 

目录:

  1.       向量对向量的链式求导
  2.       标量对向量的链式求导
  3.       标量对多个矩阵链式求导

一  向量对向量的链式求导

 

       这里默认为分子布局,雅克比矩阵

       假设

        x->y->z

       其中

       x:[m,1];y[n,1]; z[p,1]  向量

       y:[n,1] 向量

        z :[p,1]  向量

        则下面等式成立

         \frac{\partial z}{\partial x} = \frac{\partial z}{\partial y} \frac{\partial y}{\partial x}

        其中

       \frac{\partial z}{\partial x} =[p,m]  向量

       \frac{\partial z}{\partial y} =[p,n]   向量

        \frac{\partial y}{\partial x} =[n,m]  向量

       


二 标量对向量的链式求导

     机器学习的损失函数大部分都是一个标量J

    该标量对某个权重系数求导遵循分母布局

    x->y->z

   其中z是标量,是损失函数值

(\frac{\partial z}{\partial x})^T = (\frac{\partial z}{\partial y})^T \frac{\partial y}{\partial x}

   

其中

  (\frac{\partial z}{\partial y})^T :[1,m]    为标量对向量的求导,分母布局

   (\frac{\partial y}{\partial x}) :[m,n]   向量对向量的求导, 分子布局

 (\frac{\partial z}{\partial x})^T : [1,n]   标量对向量的求导,分母布局

 

如果是标量对更多的向量求导,比如y_1->y_2->......->y_n->z,则其链式求导表达式可以表示为:

因为y 都是向量,遵循第一节的分母布局,所以

   \frac{\partial z}{\partial y_1}=(\frac{\partial y_n}{\partial y_{n-1}} \frac{\partial y_{n-1}}{\partial y_{n-2}}.... \frac{\partial y_2}{\partial y_1}) ^T\frac{\partial z}{\partial y_n}

 

   应用例子:

   最小二乘法损失函数

    J=\frac{1}{2} (Xw-y)^T(Xw-y)

     其中

     X:[m,n]   为样本, n为样本维度,m为样本个数

     w [n,1]  : 为权重系数

     z= Xw-y:[m,1]

    则

     \frac{\partial J}{\partial z}= (\frac{\partial z}{\partial w})^T \frac{\partial J}{\partial z}

 

   其中

     \frac{\partial J}{\partial z} =z= Xw-y  分母布局(标量对向量求导)

    \frac{\partial z}{\partial X} =X  分子布局(向量对向量求导)

 

    结果:

     \frac{\partial J}{\partial z}=X^T(Xw-y)


  三 标量对多个矩阵链式求导

   矩阵向量链式法则四_机器学习_第1张图片

  BP算法,CNN 里面权重系数都是矩阵。

  标量对多个矩阵求导如下:(z为标量,其他都是矩阵)

    输入矩阵如下

               A【m,n】

               W [n, n1]

               Y [m,n1]= AW+B

               

    W->Y->z   那么如下成立:

    

      \frac{\partial z}{\partial W_{ij}}=tr(( \frac{\partial z}{\partial Y_{kl}} )^T(\frac{\partial Y_{kl}}{\partial W_{ij}}))(里面包含标量对矩阵求导,分母布局)

                   =\sum_{kl}\frac{ \partial z}{ \partial Y_{kl}} \frac{ \partial Y_{kl}}{ \partial W_{ij}} (里面都是标量,所以可以直接用链式求导)

 

      结果是一个[n,n1]的矩阵

     其中

         \frac{ \partial Y_{kl}}{ \partial W_{ij}}  (标量对标量的求导)

       =\frac{ \partial \sum_s A_{ks}W_{sl}}{ \partial W_{ij}}

      上面W_{sl}=W_{ij} 求导才不为0

     =A_{ki}\delta_{j}(l)

     其中 

   \delta_j(l)=\left\{\begin{matrix} 1, l=j\\ 0 \end{matrix}\right.

 

   所以

 

     \frac{ \partial Y_{kl}}{ \partial W_{ij}}

   =\sum_{kl}\frac{z}{Y_{kl}}A_{ki}\delta_{j}(l)

 =\sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{ki}

   =A^T\frac{\partial z}{\partial Y}(直接写一下就可以看出来了)

   出现标量的地方就出现转置,否则直接链式

    

  

  

  

  

   

   

你可能感兴趣的:(人工智能)