矩阵求导术(上)
矩阵求导的技术,在统计学、控制论、机器学习等领域有广泛的应用。鉴于我看过的一些资料或言之不详、或繁乱无绪,本文来做个科普,分作两篇,上篇讲标量对矩阵的求导术,下篇讲矩阵对矩阵的求导术。本文使用小写字母x表示标量,粗体小写字母表示(列)向量,大写字母X表示矩阵。
首先来琢磨一下定义,标量f对矩阵X的导数,定义为,即f对X逐元素求导排成与X尺寸相同的矩阵。然而,这个定义在计算中并不好用,实用上的原因是对函数较复杂的情形难以逐元素求导;哲理上的原因是逐元素求导破坏了 整体性 。试想,为何要将f看做矩阵X而不是各元素的函数呢?答案是用矩阵运算更整洁。所以在求导时不宜拆开矩阵,而是要找一个从整体出发的算法。
为此,我们来回顾,一元微积分中的导数(标量对标量的导数)与微分有联系:;多元微积分中的梯度(标量对向量的导数)也与微分有联系:,这里第一个等号是全微分公式,第二个等号表达了梯度与微分的联系:全微分是梯度向量(n×1)与微分向量(n×1)的内积;受此启发,我们将矩阵导数与微分建立联系:![df = \sum{i=1}^m \sum{j=1}^n \frac{\partial f}{\partial X{ij}}dX{ij} = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right)
](https://www.zhihu.com/equation?tex=df+%3D+%5Csum%7Bi%3D1%7D%5Em+%5Csum%7Bj%3D1%7D%5En+%5Cfrac%7B%5Cpartial+f%7D%7B%5Cpartial+X%7Bij%7D%7DdX%7Bij%7D+%3D+%5Ctext%7Btr%7D%5Cleft%28%5Cfrac%7B%5Cpartial+f%7D%7B%5Cpartial+X%7D%5ET+dX%5Cright%29+)。其中tr代表迹(trace)是方阵对角线元素之和,满足性质:对尺寸相同的矩阵A,B,![\text{tr}(A^TB)
\sum{i,j}A{ij}B{ij}](https://www.zhihu.com/equation?tex=%5Ctext%7Btr%7D%28A%5ETB%29+%3D+%5Csum%7Bi%2Cj%7DA%7Bij%7DB%7Bij%7D),即是矩阵A,B的 内积 。与梯度相似,这里第一个等号是全微分公式,第二个等号表达了矩阵导数与微分的联系:全微分是导数(m×n)与微分矩阵(m×n)的内积。
然后来建立运算法则。回想遇到较复杂的一元函数如,我们是如何求导的呢?通常不是从定义开始求极限,而是先建立了初等函数求导和四则运算、复合等法则,再来运用这些法则。故而,我们来创立常用的矩阵微分的运算法则:
- 加减法:;矩阵乘法:;转置:;迹:。
- 逆:。此式可在两侧求微分来证明。
- 行列式:,其中表示X的伴随矩阵,在X可逆时又可以写作。此式可用Laplace展开来证明,详见张贤达《矩阵分析与应用》第279页。
- 逐元素乘法:,表示尺寸相同的矩阵X,Y逐元素相乘。
- 逐元素函数:,是逐元素标量函数运算, 是逐元素求导数。例如。
我们试图利用矩阵导数与微分的联系,在求出左侧的微分后,该如何写成右侧的形式并得到导数呢?这需要一些迹技巧(trace trick):
- 标量套上迹:
- 转置:。
- 线性:。
- 矩阵乘法交换:,其中与尺寸相同。两侧都等于。
- 矩阵乘法/逐元素乘法交换:,其中尺寸相同。两侧都等于。
观察一下可以断言, 若标量函数f是矩阵X经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对f求微分,再使用迹技巧给df套上迹并将其它项交换至dX左侧,对照导数与微分的联系 ,即能得到导数。
特别地,若矩阵退化为向量,对照导数与微分的联系 ,即能得到导数。
在建立法则的最后,来谈一谈复合:假设已求得,而Y是X的函数,如何求呢?在微积分中有标量求导的链式法则,但这里我们 不能随意沿用标量的链式法则 ,因为矩阵对矩阵的导数截至目前仍是未定义的。于是我们继续追本溯源,链式法则是从何而来?源头仍然是微分。我们直接从微分入手建立复合法则:先写出,再将dY用dX表示出来代入,并使用迹技巧将其他项交换至dX左侧,即可得到。
最常见的情形是,此时 ,可得到。注意这里,由于是常量,,以及我们使用矩阵乘法交换的迹技巧交换了与。
接下来演示一些算例。特别提醒要依据已经建立的运算法则来计算,不能随意套用微积分中标量导数的结论,比如认为AX对X的导数为A,这是没有根据、意义不明的。
例1:,求。其中是列向量,是矩阵,是列向量,是标量。
解:先使用矩阵乘法法则求微分,![df =
d\boldsymbol{a}^TX\boldsymbol{b}+\boldsymbol{a}^TdX\boldsymbol{b}+\boldsymbol{a}^TXd\boldsymbol{b}
\boldsymbol{a}^TdX\boldsymbol{b}](https://www.zhihu.com/equation?tex=df+%3D+d%5Cboldsymbol%7Ba%7D%5ETX%5Cboldsymbol%7Bb%7D%2B%5Cboldsymbol%7Ba%7D%5ETdX%5Cboldsymbol%7Bb%7D%2B%5Cboldsymbol%7Ba%7D%5ETXd%5Cboldsymbol%7Bb%7D+%3D+%5Cboldsymbol%7Ba%7D%5ETdX%5Cboldsymbol%7Bb%7D),注意这里的是常量,![d\boldsymbol{a} = \boldsymbol{0}, d\boldsymbol{b} =
\boldsymbol{0}](https://www.zhihu.com/equation?tex=d%5Cboldsymbol%7Ba%7D+%3D+%5Cboldsymbol%7B0%7D%2C+d%5Cboldsymbol%7Bb%7D+%3D+%5Cboldsymbol%7B0%7D)。由于df是标量,它的迹等于自身,![df
\text{tr}(df)](https://www.zhihu.com/equation?tex=df+%3D+%5Ctext%7Btr%7D%28df%29),套上迹并做矩阵乘法交换:![df = \text{tr}(\boldsymbol{a}^TdX\boldsymbol{b}) = \text{tr}(\boldsymbol{b}\boldsymbol{a}^TdX)=
\text{tr}((\boldsymbol{a}\boldsymbol{b}^T)^TdX)](https://www.zhihu.com/equation?tex=df+%3D+%5Ctext%7Btr%7D%28%5Cboldsymbol%7Ba%7D%5ETdX%5Cboldsymbol%7Bb%7D%29+%3D+%5Ctext%7Btr%7D%28%5Cboldsymbol%7Bb%7D%5Cboldsymbol%7Ba%7D%5ETdX%29%3D+%5Ctext%7Btr%7D%28%28%5Cboldsymbol%7Ba%7D%5Cboldsymbol%7Bb%7D%5ET%29%5ETdX%29),注意这里我们根据![\text{tr}(AB)
\text{tr}(BA)](https://www.zhihu.com/equation?tex=%5Ctext%7Btr%7D%28AB%29+%3D+%5Ctext%7Btr%7D%28BA%29)交换了与。对照导数与微分的联系,得到。
注意:这里不能用,导数与矩阵乘法的交换是不合法则的运算(而微分是合法的)。有些资料在计算矩阵导数时,会略过求微分这一步,这是逻辑上解释不通的。
例2:,求。其中是列向量,是矩阵,是列向量,exp表示逐元素求指数,是标量。
解:先使用矩阵乘法、逐元素函数法则求微分:,再套上迹并做交换:,注意这里我们先根据![\text{tr}(A^T(B\odot C)) = \text{tr}((A\odot
B)^TC)](https://www.zhihu.com/equation?tex=%5Ctext%7Btr%7D%28A%5ET%28B%5Codot+C%29%29+%3D+%5Ctext%7Btr%7D%28%28A%5Codot+B%29%5ETC%29)交换了、与,再根据![\text{tr}(AB)
\text{tr}(BA)](https://www.zhihu.com/equation?tex=%5Ctext%7Btr%7D%28AB%29+%3D+%5Ctext%7Btr%7D%28BA%29)交换了与。对照导数与微分的联系,得到。
例3:,求。其中是矩阵,是矩阵,是矩阵,是对称矩阵,是逐元素函数,是标量。
解:先求,求微分,使用矩阵乘法、转置法则:,对照导数与微分的联系,得到,注意这里M是对称矩阵。为求,写出,再将dY用dX表示出来代入,并使用矩阵乘法/逐元素乘法交换:,对照导数与微分的联系,得到。
例4【线性回归】:, 求的最小二乘估计,即求的零点。其中是列向量,是矩阵,是列向量,是标量。
解:这是标量对向量的导数,不过可以把向量看做矩阵的特例。先将向量模平方改写成向量与自身的内积:![l = (X\boldsymbol{w}- \boldsymbol{y})^T(X\boldsymbol{w}-
\boldsymbol{y})](https://www.zhihu.com/equation?tex=l+%3D+%28X%5Cboldsymbol%7Bw%7D-+%5Cboldsymbol%7By%7D%29%5ET%28X%5Cboldsymbol%7Bw%7D-+%5Cboldsymbol%7By%7D%29),求微分,使用矩阵乘法、转置等法则:![dl
(Xd\boldsymbol{w})^T(X\boldsymbol{w}-\boldsymbol{y})+(X\boldsymbol{w}-\boldsymbol{y})^T(Xd\boldsymbol{w})
2(X\boldsymbol{w}-\boldsymbol{y})^TXd\boldsymbol{w}](https://www.zhihu.com/equation?tex=dl+%3D+%28Xd%5Cboldsymbol%7Bw%7D%29%5ET%28X%5Cboldsymbol%7Bw%7D-%5Cboldsymbol%7By%7D%29%2B%28X%5Cboldsymbol%7Bw%7D-%5Cboldsymbol%7By%7D%29%5ET%28Xd%5Cboldsymbol%7Bw%7D%29+%3D+2%28X%5Cboldsymbol%7Bw%7D-%5Cboldsymbol%7By%7D%29%5ETXd%5Cboldsymbol%7Bw%7D)。对照导数与微分的联系,得到。![\frac{\partial l}{\partial
\boldsymbol{w}}=0](https://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+l%7D%7B%5Cpartial+%5Cboldsymbol%7Bw%7D%7D%3D0)即![X^TX\boldsymbol{w}
X^T\boldsymbol{y}](https://www.zhihu.com/equation?tex=X%5ETX%5Cboldsymbol%7Bw%7D+%3D+X%5ET%5Cboldsymbol%7By%7D),得到的最小二乘估计为![\boldsymbol{w}
(X^TX)^{-1}X^T\boldsymbol{y}](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7Bw%7D+%3D+%28X%5ETX%29%5E%7B-1%7DX%5ET%5Cboldsymbol%7By%7D)。
例5【方差的最大似然估计】:样本![\boldsymbol{x}1,\dots, \boldsymbol{x}N \sim \mathcal{N}(\boldsymbol{\mu},
\Sigma)](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7Bx%7D1%2C%5Cdots%2C+%5Cboldsymbol%7Bx%7DN+%5Csim+%5Cmathcal%7BN%7D%28%5Cboldsymbol%7B%5Cmu%7D%2C+%5CSigma%29),求方差的最大似然估计。写成数学式是:![l
\log|\Sigma|+\frac{1}{N}\sum{i=1}^N(\boldsymbol{x}i-\boldsymbol{\bar{x}})^T\Sigma^{-1}(\boldsymbol{x}i-\boldsymbol{\bar{x}})](https://www.zhihu.com/equation?tex=l+%3D+%5Clog%7C%5CSigma%7C%2B%5Cfrac%7B1%7D%7BN%7D%5Csum%7Bi%3D1%7D%5EN%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29%5ET%5CSigma%5E%7B-1%7D%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29),求的零点。其中是列向量,是样本均值,是对称正定矩阵,是标量,log表示自然对数。
解:首先求微分,使用矩阵乘法、行列式、逆等运算法则,第一项是![d\log|\Sigma| = |\Sigma|^{-1}d|\Sigma| =
\text{tr}(\Sigma^{-1}d\Sigma)](https://www.zhihu.com/equation?tex=d%5Clog%7C%5CSigma%7C+%3D+%7C%5CSigma%7C%5E%7B-1%7Dd%7C%5CSigma%7C+%3D+%5Ctext%7Btr%7D%28%5CSigma%5E%7B-1%7Dd%5CSigma%29),第二项是![\frac{1}{N}\sum{i=1}^N(\boldsymbol{x}i-\boldsymbol{\bar{x}})^Td\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})
-\frac{1}{N}\sum{i=1}^N(\boldsymbol{x}i-\boldsymbol{\bar{x}})^T\Sigma^{-1}d\Sigma\Sigma^{-1}(\boldsymbol{x}i-\boldsymbol{\bar{x}})](https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7BN%7D%5Csum%7Bi%3D1%7D%5EN%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29%5ETd%5CSigma%5E%7B-1%7D%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29+%3D+-%5Cfrac%7B1%7D%7BN%7D%5Csum%7Bi%3D1%7D%5EN%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29%5ET%5CSigma%5E%7B-1%7Dd%5CSigma%5CSigma%5E%7B-1%7D%28%5Cboldsymbol%7Bx%7D_i-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29)。再给第二项套上迹做交换:,其中先交换迹与求和,然后将 ![\Sigma^{-1}
(\boldsymbol{x}i-\boldsymbol{\bar{x}})](https://www.zhihu.com/equation?tex=%5CSigma%5E%7B-1%7D+%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29)交换到左边,最后再交换迹与求和,并定义![S
\frac{1}{N}\sum{i=1}^N(\boldsymbol{x}i-\boldsymbol{\bar{x}})(\boldsymbol{x}i-\boldsymbol{\bar{x}})^T](https://www.zhihu.com/equation?tex=S+%3D+%5Cfrac%7B1%7D%7BN%7D%5Csum%7Bi%3D1%7D%5EN%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29%28%5Cboldsymbol%7Bx%7Di-%5Cboldsymbol%7B%5Cbar%7Bx%7D%7D%29%5ET)为样本方差矩阵。得到![dl
\text{tr}\left(\left(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1}\right)d\Sigma\right)](https://www.zhihu.com/equation?tex=dl+%3D+%5Ctext%7Btr%7D%5Cleft%28%5Cleft%28%5CSigma%5E%7B-1%7D-%5CSigma%5E%7B-1%7DS%5CSigma%5E%7B-1%7D%5Cright%29d%5CSigma%5Cright%29)。对照导数与微分的联系,有,其零点即的最大似然估计为。
例6【多元logistic回归】:,求。其中是除一个元素为1外其它元素为0的列向量,是![m\times
n](https://www.zhihu.com/equation?tex=m%5Ctimes+n)矩阵,是列向量,是标量;log表示自然对数,![\text{softmax}(\boldsymbol{a})
\frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^T\exp(\boldsymbol{a})}](https://www.zhihu.com/equation?tex=%5Ctext%7Bsoftmax%7D%28%5Cboldsymbol%7Ba%7D%29+%3D+%5Cfrac%7B%5Cexp%28%5Cboldsymbol%7Ba%7D%29%7D%7B%5Cboldsymbol%7B1%7D%5ET%5Cexp%28%5Cboldsymbol%7Ba%7D%29%7D),其中表示逐元素求指数,代表全1向量。
解1:首先将softmax函数代入并写成,这里要注意逐元素log满足等式,以及满足。求微分,使用矩阵乘法、逐元素函数等法则:![dl =-
\boldsymbol{y}^TdW\boldsymbol{x}+\frac{\boldsymbol{1}^T\left(\exp(W\boldsymbol{x})\odot(dW\boldsymbol{x})\right)}{\boldsymbol{1}^T\exp(W\boldsymbol{x})}](https://www.zhihu.com/equation?tex=dl+%3D-+%5Cboldsymbol%7By%7D%5ETdW%5Cboldsymbol%7Bx%7D%2B%5Cfrac%7B%5Cboldsymbol%7B1%7D%5ET%5Cleft%28%5Cexp%28W%5Cboldsymbol%7Bx%7D%29%5Codot%28dW%5Cboldsymbol%7Bx%7D%29%5Cright%29%7D%7B%5Cboldsymbol%7B1%7D%5ET%5Cexp%28W%5Cboldsymbol%7Bx%7D%29%7D)。再套上迹并做交换,注意可化简![\boldsymbol{1}^T\left(\exp(W\boldsymbol{x})\odot(dW\boldsymbol{x})\right)
\exp(W\boldsymbol{x})^TdW\boldsymbol{x}](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7B1%7D%5ET%5Cleft%28%5Cexp%28W%5Cboldsymbol%7Bx%7D%29%5Codot%28dW%5Cboldsymbol%7Bx%7D%29%5Cright%29+%3D+%5Cexp%28W%5Cboldsymbol%7Bx%7D%29%5ETdW%5Cboldsymbol%7Bx%7D),这是根据等式![\boldsymbol{1}^T (\boldsymbol{u}\odot \boldsymbol{v}) = \boldsymbol{u}^T
\boldsymbol{v}](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7B1%7D%5ET+%28%5Cboldsymbol%7Bu%7D%5Codot+%5Cboldsymbol%7Bv%7D%29+%3D+%5Cboldsymbol%7Bu%7D%5ET+%5Cboldsymbol%7Bv%7D),故![dl
\text{tr}\left(-\boldsymbol{y}^TdW\boldsymbol{x}+\frac{\exp(W\boldsymbol{x})^TdW\boldsymbol{x}}{\boldsymbol{1}^T\exp(W\boldsymbol{x})}\right)
=\text{tr}(-\boldsymbol{y}^TdW\boldsymbol{x}+\text{softmax}(W\boldsymbol{x})^TdW\boldsymbol{x})
\text{tr}(\boldsymbol{x}(\text{softmax}(W\boldsymbol{x})-\boldsymbol{y})^TdW)](https://www.zhihu.com/equation?tex=dl+%3D+%5Ctext%7Btr%7D%5Cleft%28-%5Cboldsymbol%7By%7D%5ETdW%5Cboldsymbol%7Bx%7D%2B%5Cfrac%7B%5Cexp%28W%5Cboldsymbol%7Bx%7D%29%5ETdW%5Cboldsymbol%7Bx%7D%7D%7B%5Cboldsymbol%7B1%7D%5ET%5Cexp%28W%5Cboldsymbol%7Bx%7D%29%7D%5Cright%29+%3D%5Ctext%7Btr%7D%28-%5Cboldsymbol%7By%7D%5ETdW%5Cboldsymbol%7Bx%7D%2B%5Ctext%7Bsoftmax%7D%28W%5Cboldsymbol%7Bx%7D%29%5ETdW%5Cboldsymbol%7Bx%7D%29+%3D+%5Ctext%7Btr%7D%28%5Cboldsymbol%7Bx%7D%28%5Ctext%7Bsoftmax%7D%28W%5Cboldsymbol%7Bx%7D%29-%5Cboldsymbol%7By%7D%29%5ETdW%29)。对照导数与微分的联系,得到。
解2:定义,则,先同上求出,再利用复合法则:,得到。
最后一例留给经典的神经网络。神经网络的求导术是学术史上的重要成果,还有个专门的名字叫做BP算法,我相信如今很多人在初次推导BP算法时也会颇费一番脑筋,事实上使用矩阵求导术来推导并不复杂。为简化起见,我们推导二层神经网络的BP算法。
例7【二层神经网络】:,求和。其中是除一个元素为1外其它元素为0的的列向量,是矩阵,是![p \times
n](https://www.zhihu.com/equation?tex=p+%5Ctimes+n)矩阵,是列向量,是标量;log表示自然对数,![\text{softmax}(\boldsymbol{a})
\frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^T\exp(\boldsymbol{a})}](https://www.zhihu.com/equation?tex=%5Ctext%7Bsoftmax%7D%28%5Cboldsymbol%7Ba%7D%29+%3D+%5Cfrac%7B%5Cexp%28%5Cboldsymbol%7Ba%7D%29%7D%7B%5Cboldsymbol%7B1%7D%5ET%5Cexp%28%5Cboldsymbol%7Ba%7D%29%7D)同上,是逐元素sigmoid函数![\sigma(a)
\frac{1}{1+\exp(-a)}](https://www.zhihu.com/equation?tex=%5Csigma%28a%29+%3D+%5Cfrac%7B1%7D%7B1%2B%5Cexp%28-a%29%7D)。
解:定义,![\boldsymbol{h}_1
\sigma(\boldsymbol{a}1)](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7Bh%7D1+%3D+%5Csigma%28%5Cboldsymbol%7Ba%7D_1%29),,则。在前例中已求出。使用复合法则,,使用矩阵乘法交换的迹技巧从第一项得到,从第二项得到。接下来对第二项继续使用复合法则来求,并利用矩阵乘法和逐元素乘法交换的迹技巧:,得到。为求,再用一次复合法则:,得到。
推广:样本,,其中是列向量,是列向量,其余定义同上。
解1:定义![\boldsymbol{a}{1,i} = W1 \boldsymbol{x}_i +
\boldsymbol{b}1](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7Ba%7D%7B1%2Ci%7D+%3D+W1+%5Cboldsymbol%7Bx%7Di+%2B+%5Cboldsymbol%7Bb%7D1),![\boldsymbol{h}{1,i}
\sigma(\boldsymbol{a}{1,i})](https://www.zhihu.com/equation?tex=%5Cboldsymbol%7Bh%7D%7B1%2Ci%7D+%3D+%5Csigma%28%5Cboldsymbol%7Ba%7D_%7B1%2Ci%7D%29),,则。先同上可求出。使用复合法则,,从第一项得到得到,从第二项得到,从第三项得到到。接下来对第二项继续使用复合法则,得到。为求,再用一次复合法则:,得到,。
解2:可以用矩阵来表示N个样本,以简化形式。定义,,,,注意这里使用全1向量来扩展维度。先同上求出。使用复合法则, ,从第一项得到,从第二项得到,从第三项得到到。接下来对第二项继续使用复合法则,得到。为求,再用一次复合法则:,得到,。
下篇见https://zhuanlan.zhihu.com/p/24863977。
来源:知乎 www.zhihu.com
作者:长躯鬼侠
【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。 点击下载
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: