zoukankan      html  css  js  c++  java
  • 矩阵求导(二)

    本文承接上篇 ,来讲矩阵对矩阵的求导术。使用小写字母x表示标量,粗体小写字母[公式]表示列向量,大写字母X表示矩阵。矩阵对矩阵的求导采用了向量化的思路,常应用于二阶方法求解优化问题。

    首先来琢磨一下定义。矩阵对矩阵的导数,需要什么样的定义?第一,矩阵F(p×q)对矩阵X(m×n)的导数应包含所有mnpq个偏导数[公式],从而不损失信息;第二,导数与微分有简明的联系,因为在计算导数和应用中需要这个联系;第三,导数有简明的从整体出发的算法。我们先定义向量[公式](p×1)对向量[公式](m×1)的导数[公式](m×p),有[公式];再定义矩阵的(按列优先)向量化[公式](mn×1),并定义矩阵F对矩阵X的导数[公式](mn×pq)。导数与微分有联系[公式]。几点说明如下:

    1. 按此定义,标量f对矩阵X(m×n)的导数[公式]是mn×1向量,与上篇的定义不兼容,不过二者容易相互转换。为避免混淆,用记号[公式]表示上篇定义的m×n矩阵,则有[公式]。虽然本篇的技术可以用于标量对矩阵求导这种特殊情况,但使用上篇中的技术更方便。读者可以通过上篇中的算例试验两种方法的等价转换。
    2. 标量对矩阵的二阶导数,又称Hessian矩阵,定义为[公式](mn×mn),是对称矩阵。对向量[公式]或矩阵[公式]求导都可以得到Hessian矩阵,但从矩阵[公式]出发更方便。
    3. [公式],求导时矩阵被向量化,弊端是这在一定程度破坏了矩阵的结构,会导致结果变得形式复杂;好处是多元微积分中关于梯度、Hessian矩阵的结论可以沿用过来,只需将矩阵向量化。例如优化问题中,牛顿法的更新[公式],满足[公式]
    4. 在资料中,矩阵对矩阵的导数还有其它定义,比如[公式](mp×nq),或是[公式](mp×nq),它能兼容上篇中的标量对矩阵导数的定义,但微分与导数的联系(dF等于[公式]中逐个m×n子块分别与dX做内积)不够简明,不便于计算和应用。文献[5]综述了以上定义,并批判它们是坏的定义,能配合微分运算的才是好的定义。

     

    然后来建立运算法则。仍然要利用导数与微分的联系[公式],求微分的方法与上篇相同,而从微分得到导数需要一些向量化的技巧:

    1. 线性:[公式]
    2. 矩阵乘法:[公式],其中[公式]表示Kronecker积,A(m×n)与B(p×q)的Kronecker积是[公式](mp×nq)。此式证明见张贤达《矩阵分析与应用》第107-108页。
    3. 转置:[公式],A是m×n矩阵,其中[公式](mn×mn)是交换矩阵(commutation matrix),将按列优先的向量化变为按行优先的向量化。例如[公式]
    4. 逐元素乘法:[公式],其中[公式](mn×mn)是用A的元素(按列优先)排成的对角阵。

     

    观察一下可以断言,若矩阵函数F是矩阵X经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对F求微分,再做向量化并使用技巧将其它项交换至vec(dX)左侧,对照导数与微分的联系[公式],即能得到导数。

    特别地,若矩阵退化为向量,对照导数与微分的联系[公式],即能得到导数。

     

    再谈一谈复合:假设已求得[公式],而Y是X的函数,如何求[公式]呢?从导数与微分的联系入手,[公式],可以推出链式法则[公式]

    和标量对矩阵的导数相比,矩阵对矩阵的导数形式更加复杂,从不同角度出发常会得到形式不同的结果。有一些Kronecker积和交换矩阵相关的恒等式,可用来做等价变形:

    1. [公式]
    2. [公式]
    3. [公式]。可以对[公式]求导来证明,一方面,直接求导得到[公式];另一方面,引入[公式],有[公式],用链式法则得到[公式]
    4. [公式]
    5. [公式],A是m×n矩阵,B是p×q矩阵。可以对[公式]做向量化来证明,一方面,[公式];另一方面,[公式]

     

    接下来演示一些算例。

    例1:[公式],X是m×n矩阵,求[公式]

    解:先求微分:[公式],再做向量化,使用矩阵乘法的技巧,注意在dX右侧添加单位阵:[公式],对照导数与微分的联系得到[公式]

    特例:如果X退化为向量,即[公式],则根据向量的导数与微分的关系[公式],得到[公式]

     

    例2:[公式],X是n×n矩阵,求[公式][公式]

    解:使用上篇中的技术可求得[公式]。为求[公式],先求微分:[公式],再做向量化,使用转置和矩阵乘法的技巧[公式],对照导数与微分的联系,得到[公式],注意它是对称矩阵。在[公式]是对称矩阵时,可简化为[公式]

     

    例3:[公式],A是l×m矩阵,X是m×n矩阵,B是n×p矩阵,exp为逐元素函数,求[公式]

    解:先求微分:[公式],再做向量化,使用矩阵乘法的技巧:[公式],再用逐元素乘法的技巧:[公式],再用矩阵乘法的技巧:[公式],对照导数与微分的联系得到[公式]

     

    例4【一元logistic回归】:[公式],求[公式][公式]。其中[公式]是取值0或1的标量,[公式][公式]列向量。

    解:使用上篇中的技术可求得[公式],其中[公式] 为sigmoid函数。为求[公式],先求微分:[公式],其中[公式]为sigmoid函数的导数,对照导数与微分的联系,得到[公式]

    推广:样本[公式][公式],求[公式][公式]。有两种方法,方法一:先对每个样本求导,然后相加;方法二:定义矩阵[公式],向量[公式],将[公式]写成矩阵形式[公式],进而可以使用上篇中的技术求得[公式]。为求[公式],先求微分,再用逐元素乘法的技巧:[公式],对照导数与微分的联系,得到[公式]

     

    例5【多元logistic回归】:[公式],求[公式][公式]。其中其中[公式]是除一个元素为1外其它元素为0的[公式]列向量,[公式][公式]矩阵,[公式][公式]列向量,[公式]是标量。

    解:上篇中已求得[公式]。为求[公式],先求微分:定义[公式][公式][公式],注意这里化简去掉逐元素乘法,第一项中[公式],第二项中[公式]。定义矩阵[公式][公式],做向量化并使用矩阵乘法的技巧,得到[公式]

     

    最后做个总结。我们发展了从整体出发的矩阵求导的技术,导数与微分的联系是计算的枢纽,标量对矩阵的导数与微分的联系是[公式],先对f求微分,再使用迹技巧可求得导数,特别地,标量对向量的导数与微分的联系是[公式];矩阵对矩阵的导数与微分的联系是[公式],先对F求微分,再使用向量化的技巧可求得导数,特别地,向量对向量的导数与微分的联系是[公式]

     

     

    参考资料:

    1. 张贤达. 矩阵分析与应用. 清华大学出版社有限公司, 2004.
    2. Fackler, Paul L. "Notes on matrix calculus." North Carolina State University(2005).
    3. Petersen, Kaare Brandt, and Michael Syskind Pedersen. "The matrix cookbook." Technical University of Denmark 7 (2008): 15.
    4. HU, Pili. "Matrix Calculus: Derivation and Simple Application." (2012).
    5. Magnus, Jan R., and Heinz Neudecker. "Matrix Differential Calculus with Applications in Statistics and Econometrics." Wiley, 2019.
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/psztswcbyy/p/11542362.html
Copyright © 2011-2022 走看看