1.13矩阵微分与求导相关

11 篇文章 1 订阅

0.相关记法与规定:

本篇博客所涉及到数都是在实数域,不涉及复数。本博客中出现的所有向量不加说明时都默认列向量。

\large x是标量,\large \mathbf{x}是列向量,\large X是矩阵。

\large f(\mathbf{x})是标量函数,这里“标量”是指\large f是一个实数,即\large f: \mathbf{x}\in R^m\rightarrow R^1

\large f(\mathbf{X})是标量函数,这里“标量”是指\large f是一个实数,即\large f: \mathbf{X}\in R^{m \times n}\rightarrow R^1

\large \mathbf{f(x)}是向量函数,这里“向量“是指\large \mathbf{f}是一个向量,即\large \mathbf{f}: \mathbf{x}\in R^m\rightarrow R^p

\large \mathbf{f(X)}是向量函数,这里“向量“是指\large \mathbf{f}是一个向量,即\large \mathbf{f}: \mathbf{X}\in R^{m \times n}\rightarrow R^p

\large \mathbf{F(x)}是矩阵函数,这里“矩阵“是指\large \mathbf{F}是一个矩阵,即\large \mathbf{F}: \mathbf{x}\in R^{m}\rightarrow R^{p \times q}

\large \mathbf{F(X)}是矩阵函数,这里“矩阵“是指\large \mathbf{F}是一个矩阵,即\large \mathbf{F}: \mathbf{X}\in R^{m \times n}\rightarrow R^{p \times q}

上面列出了一大堆,其实直接分成两类即可,即“像/值域”是标量还是矩阵(列向量看成矩阵的特殊情况)以及“原像/定义域”是向量还是矩阵“。总结的两大类如下:

函数类型向量变元\large \mathbf{x \in R^m}矩阵变元\large X\in R^{m \times n}
标量函数\large f \in R^1\large f: \mathbf{x}\in R^m\rightarrow R^1\large f: \mathbf{X}\in R^{m \times n}\rightarrow R^1
矩阵函数\large F \in R^{p \times q}\large \mathbf{F}: \mathbf{x}\in R^{m}\rightarrow R^{p \times q}\large \mathbf{F}: \mathbf{X}\in R^{m \times n}\rightarrow R^{p \times q}

1.全微分和梯度的关系:

对于标量变元且标量函数有:\large df=f'(x)dx

而对于向量变元且标量函数对应的是全微分和梯度关系:\large df = \frac{\partial f}{\partial x_1}dx_1+...+\frac{\partial f }{\partial x_m}dx_m=\sum_{i=1}^{m}\frac{\partial f}{\partial x_i}dx_i=\frac{\partial f}{\partial \mathbf{x}}^Td\mathbf{x},

前两个等号是全微分和偏导的关系,最后一个等号表明了全微分和梯度的关系:全微分\large df是梯度向量\large \frac{\partial f}{\partial \mathbf{x}}与微分向量\large d\mathbf{x}的内积。

与上式同理,对于矩阵变元且标量函数对应的关系是:\large df=tr(\frac{\partial f}{\partial X}^TdX),其中\large \frac{\partial f}{\partial X}就是梯度矩阵

(因为矩阵\large A,B的内积定义为\large tr(A^TB),见1.1范数与内积

到这里求梯度矩阵的大方向就出来了:求梯度矩阵的方法不是通过直接求梯度求得的,而是通过求全微分,经过一系列化简,最终从全微分与梯度向量(梯度矩阵)和微分向量(微分矩阵)的内积关系得出来。这是最简单的方法。

正式求梯度矩阵之前,还有很多的矩阵变元微分运算法则如下(向量变元是矩阵变元的特例,故同理):

(1)\large dA=O

(2)线性:\large d(\alpha X+\beta Y)=\alpha dX+\beta dY       \large d(AXB)=A(dX)B    

(3) 矩阵乘法:\large d(XY)=(dX)Y+X(dY)    矩阵哈达玛积(逐元素相乘)\large d(X\odot Y)=(dX)\odot Y+X\odot d Y

    矩阵Kronecker积:\large d(X \otimes Y)=(dX)\otimes Y+X\otimes dY

(4)转置:\large d(X^T)=(dX)^T         迹:\large d(tr(X))=tr(dX)(微分和迹可以换顺序)

(5)逆:\large d(X^{-1})=-X^{-1}dXX^{-1},证明通过\large XX^{-1}=I两边同时求微分即可。

(6)行列式:\large d|X|=|X|tr(X^{-1}dX)       \large d(log|X|)=\frac{1}{|X|}d(|X|)=tr(X^{-1}dX)

(7)逐元素函数:\large d\sigma(X)=\sigma ' (X)\odot dX\large \sigma(X)=\sigma(X_{i,j}),\sigma'(X)=\sigma'(X_{i,j}),见一个例子(引用自参考1):

\large X=\begin{bmatrix} x_{11} & x_{12}\\ x_{21} & x_{22} \end{bmatrix},dsin(X)=\begin{bmatrix} dsinx_{11} & dsinx_{12}\\ dsinx_{21} & dsinx_{22}\end{bmatrix}=\begin{bmatrix} cosx_{11}dx_{11} &cosx_{12}dx_{12} \\ cosx_{21}dx_{21} & cosx_{22}dx_{22} \end{bmatrix}\large =cos(X)\odot dX

2.这里不加证明的给出求梯度的方法:

对于标量函数\large f(X),求出左侧微分\large df,利用一些“迹技巧”,将\large df转化成\large df= tr(UdX)形式,

又因为\large df=tr(\frac{\partial f}{\partial X}^TdX)所以可知:\large U^T=\frac{\partial f}{\partial X}就是梯度矩阵。 具体看例子比较好,抽象的看不懂。

一些与迹有关的性质有:

(1)\large tr(a)=a    (2)\large tr(\alpha A+\beta B)=\alpha trA+\beta trB

(3) \large tr(A^T)=tr(A) (4)\large tr(ABC)=tr(BCA)=tr(CAB)

(5) \large A,B,C同尺寸的有:\large tr(A^T(B\odot C))=tr((A\odot B)^TC)

3.例子:引用自参考1 :矩阵求导术  https://zhuanlan.zhihu.com/p/24709748  

例1\large f = a^TXb,a\in R^m,X\in R^{m \times n},b\in R^n 步骤如下:

两边加上微分,得到:\large df = d(a^TXb)   两边再加上迹:\large tr(df)=tr(d(a^TXb))。因为迹和微分课换序,且\large tr(a)=a

所以有:\large tr(df)=df = tr(d(a^TXb)),继续化简右边,得到:\large df = tr(d(a^TXb))=tr(a^T(dX)b)=tr(ba^TdX),由此,可以得到\large \frac{\partial f}{\partial X } =(ba^T)^T=ab^T

例2f = \boldsymbol{a}^T \exp(X\boldsymbol{b}),求\frac{\partial f}{\partial X}。其中\boldsymbol{a}m×1列向量,Xm\times n矩阵,\boldsymbol{b}n×1列向量,exp表示逐元素求指数,f是标量。

解:先使用矩阵乘法、逐元素函数法则求微分:df = \boldsymbol{a}^T(\exp(X\boldsymbol{b})\odot (dX\boldsymbol{b})),再套上迹并做df = \text{tr}( \boldsymbol{a}^T(\exp(X\boldsymbol{b})\odot (dX\boldsymbol{b}))) =\text{tr}((\boldsymbol{a}\odot \exp(X\boldsymbol{b}))^TdX \boldsymbol{b}) = \text{tr}(\boldsymbol{b}(\boldsymbol{a}\odot \exp(X\boldsymbol{b}))^TdX),注意这里我们先根据\text{tr}(A^T(B\odot C)) = \text{tr}((A\odot B)^TC)交换了\boldsymbol{a}\exp(X\boldsymbol{b})dX\boldsymbol{b},再根据\text{tr}(AB) = \text{tr}(BA)交换了(\boldsymbol{a}\odot \exp(X\boldsymbol{b}))^TdX\boldsymbol{b}。对照导数与微分的联系df = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right),得到\frac{\partial f}{\partial X} = (\boldsymbol{b}(\boldsymbol{a}\odot \exp(X\boldsymbol{b}))^T)^T= (\boldsymbol{a}\odot \exp(X\boldsymbol{b}))\boldsymbol{b}^T

因为\large f是一个标量函数,即\large f: \mathbf{X}\in R^{m \times n}\rightarrow R^1,而从矩阵经过某种映射成为标量的函数有几类应用很广,所以这里记录下来对应的梯度表,读者可以试着推一下,自己推导一遍才有效果。以下的小写\large x皆为列向量。

 

\large f(\mathbf{x})\large \bigtriangledown _\mathbf{x}相关推导
\large x^TAx\large (A+A^T)\mathbf{x}\large df=tr(d(x^TAx))=tr((dx)^TAx+x^TAdx)\\=tr(x^TA^Tdx+x^TAdx)=tr((x^TA^T+x^TA)dx)
\large a^Tx或者\large x^Ta\large a

以下图片引用自《矩阵分析与应用》第一版

例3f = \text{tr}(Y^T M Y), Y = \sigma(WX),求\frac{\partial f}{\partial X}。其中Wl×m列向量,Xm\times n矩阵,Yl\times n矩阵,Ml×l对称矩阵,\sigma是逐元素函数,f是标量。

解:先求\frac{\partial f}{\partial Y},求微分,使用矩阵乘法、转置法则:df = \text{tr}((dY)^TMY) + \text{tr}(Y^TMdY) = 2\text{tr}(Y^TMdY),对照导数与微分的联系,得到\frac{\partial f}{\partial Y}=2MY。为求\frac{\partial f}{\partial X},写出df = \text{tr}\left(\frac{\partial f}{\partial Y}^T dY\right),再将dY用dX表示出来代入,并使用矩阵乘法/逐元素乘法交换:df = \text{tr}\left(\frac{\partial f}{\partial Y}^T (\sigma'(WX)\odot (WdX))\right) = \text{tr}\left(\left(\frac{\partial f}{\partial Y} \odot \sigma'(WX)\right)^T W dX\right),对照导数与微分的联系,得到\frac{\partial f}{\partial X}=W^T \left(\frac{\partial f}{\partial Y}\odot \sigma'(WX)\right)=W^T((2M\sigma(WX))\odot\sigma'(WX))

例4【线性回归】l = \|X\boldsymbol{w}- \boldsymbol{y}\|^2, 求\boldsymbol{w}的最小二乘估计,即求\frac{\partial l}{\partial \boldsymbol{w}}的零点。其中\boldsymbol{y}m×1列向量,Xm\times n矩阵,\boldsymbol{w}n×1列向量,l是标量。

解:严格来说这是标量对向量的导数,不过可以把向量看做矩阵的特例。先将向量模平方改写成向量与自身的内积:l = (X\boldsymbol{w}- \boldsymbol{y})^T(X\boldsymbol{w}- \boldsymbol{y}),求微分,使用矩阵乘法、转置等法则: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}。对照导数与微分的联系dl = \frac{\partial l}{\partial \boldsymbol{w}}^Td\boldsymbol{w},得到\frac{\partial l}{\partial \boldsymbol{w}}= (2(X\boldsymbol{w}-\boldsymbol{y})^TX)^T = 2X^T(X\boldsymbol{w}-\boldsymbol{y})\frac{\partial l}{\partial \boldsymbol{w}}的零点即\boldsymbol{w}的最小二乘估计为\boldsymbol{w} = (X^TX)^{-1}X^T\boldsymbol{y}

例5【方差的最大似然估计】:样本\boldsymbol{x}_1,\dots, \boldsymbol{x}_n\sim N(\boldsymbol{\mu}, \Sigma),求方差\Sigma的最大似然估计。写成数学式是: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}}),求\frac{\partial l }{\partial \Sigma}的零点。其中\boldsymbol{x}_im\times 1列向量,\overline{\boldsymbol{x}}=\frac{1}{n}\sum_{i=1}^n \boldsymbol{x}_i是样本均值,\Sigmam\times m对称正定矩阵,l是标量;log表示自然对数。

解:首先求微分,使用矩阵乘法、行列式、逆等运算法则,第一项是d\log|\Sigma| = |\Sigma|^{-1}d|\Sigma| = \text{tr}(\Sigma^{-1}d\Sigma),第二项是\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}})。再给第二项套上迹做交换:\text{tr}\left(\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}})\right)= \frac{1}{n} \sum_{i=1}^n \text{tr}((\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1} d\Sigma \Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}}))= \frac{1}{n}\sum_{i=1}^n\text{tr}\left(\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1}d\Sigma\right)=\text{tr}(\Sigma^{-1}S\Sigma^{-1}d\Sigma),其中先交换迹与求和,然后将 \Sigma^{-1} (\boldsymbol{x}_i-\boldsymbol{\bar{x}})交换到左边,最后再交换迹与求和,并定义S = \frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T为样本方差矩阵。得到dl = \text{tr}\left(\left(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1}\right)d\Sigma\right)。对照导数与微分的联系,有\frac{\partial l }{\partial \Sigma}=(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1})^T,其零点即\Sigma的最大似然估计为\Sigma = S

例5: 自己算的 和原作者过程不一样,结果一样,步骤如下:

\large L(\Sigma)=\prod_{i=1}^{n}p(\mathbf{x_i};\mu,\Sigma),代入\large p(\mathbf{x};\mu,\Sigma)=\frac{1}{(2\pi )^{\frac{n}{2}}|\Sigma |^\frac{1}{2}}exp(-\frac{1}{2}(\boldsymbol{x-\mu})\Sigma ^{-1}\mathbf{(x-\mu)})并取对数,得到:

\large l(\Sigma)=\sum_{i=1}^{n}({-\frac{1}{2}(x_i-\mu)^T\Sigma^{-1}(x_i-\mu)}-\frac{n}{2}ln(2\pi)-\frac{1}{2}ln(|\Sigma|)),对\large \Sigma求梯度时,与第二项无关,令梯度矩阵为0,也得到:\large \Sigma的极大似然估计为:S = \frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T

例6:这里对1.12 Logistic Regression(平移后的softmax regression)做求导:

\mathbf{l(\theta)=y^Tlog(G)+(1-y)^Tlog(1-G)},\mathbf{G}=\frac{1}{1+e^{\mathbf{X\theta}}},其中\mathbf{G,X\theta,y}都是列向量\mathbf{G}=g(\mathbf{X\theta}),g(z)=\frac{1}{1+e^z}

d(l)=tr(\mathbf{y^TdlogG+(1-y)^Tlog(1-G)})\\=tr(\mathbf{y^T(\frac{1}{G}\odot dG})+\mathbf{(1-y)^T\frac{1}{1-G}\odot(-dG)})\\=tr(\mathbf{y^T(\frac{1}{G}\odot dG)+(y-1)^T(\frac{1}{1-G}\odot dG}))\\=tr(\mathbf{(y\odot \frac{1}{G})^TdG+((y-1)\odot \frac{1}{1-G})^TdG})\\=tr(\mathbf{(y\odot \frac{1}{G}+(y-1)\odot \frac{1}{1-G})^TdG})

\mathbf{dG = \underbrace{G'(X\theta)\odot d(X\theta)}_1=\underbrace{G(X\theta) \odot (1-G(X\theta))\odot Xd\theta}_{2}}

1处是使用了\large d\sigma(X)=\sigma ' (X)\odot dX此性质,

2处是函数g(z)=\frac{1}{1+e^z},g'(z)=g(z)*g(1-z)自变量为列向量形式的扩展,即\mathbf{g(\mathbf{x})=\frac{1}{1+e^\mathbf{x}},g'(x)=g(x)\odot g(1-x)}

下一步:

\mathbf{dG =G'(X\theta)\odot d(X\theta)=G(X\theta) \odot (1-G(X\theta))\odot Xd\theta}代入d(l)=tr(\mathbf{(y\odot \frac{1}{G}+(y-1)\odot \frac{1}{1-G})^TdG})得到:

d(l)=\mathbf{tr((y\odot \frac{1}{G}+(y-1)\odot \frac{1}{1-G})^TG(X\theta) \odot (1-G(X\theta))\odot Xd\theta})\\=\mathbf{tr((y\odot \frac{1}{G}+(y-1)\odot \frac{1}{1-G})^T\ G\odot (1-G)\odot Xd\theta})\\=\mathbf{tr(A^T(B\odot Xd\theta))}=\mathbf{tr((A\odot B)^T Xd\theta))}

其中\mathbf{A = (y\odot \frac{1}{G}+(y-1)\odot \frac{1}{1-G}),B=G\odot (1-G)}

所以\mathbf{\bigtriangledown _{\theta}l}=\mathbf{X^T(A\odot B)},化简\mathbf{A\odot B=(y-G)=(y-G(X\theta))},

最后得到:\mathbf{\bigtriangledown _{\theta}l}=\mathbf{X^T(y-G(X\theta))}

PS:这里推导了考虑所有样本\mathbf{X}的情况,对于单个的样本\mathbf{x},比较简单,这里不涉及。

例7,Softmax回归:

l = -\boldsymbol{y}^T\log\text{softmax}(W\boldsymbol{x}),求\frac{\partial l}{\partial W}。其中\boldsymbol{y}是除一个元素为1外其它元素为0的m×1列向量,Wm\times n矩阵,\boldsymbol{x}n×1列向量,l是标量;log表示自然对数,\text{softmax}(\boldsymbol{a}) = \frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^T\exp(\boldsymbol{a})},其中\exp(\boldsymbol{a})表示逐元素求指数,\boldsymbol{1}代表全1向量。

解1:首先将softmax函数代入并写成l = -\boldsymbol{y}^T \left(\log (\exp(W\boldsymbol{x}))-\boldsymbol{1}\log(\boldsymbol{1}^T\exp(W\boldsymbol{x}))\right) = -\boldsymbol{y}^TW\boldsymbol{x} + \log(\boldsymbol{1}^T\exp(W\boldsymbol{x})),这里要注意逐元素log满足等式\log(\boldsymbol{u}/c) = \log(\boldsymbol{u}) - \boldsymbol{1}\log(c),以及\boldsymbol{y}满足\boldsymbol{y}^T \boldsymbol{1} = 1。求微分,使用矩阵乘法、逐元素函数等法则: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})}。再套上迹并做交换,注意可化简\boldsymbol{1}^T\left(\exp(W\boldsymbol{x})\odot(dW\boldsymbol{x})\right) = \exp(W\boldsymbol{x})^TdW\boldsymbol{x},这是根据等式\boldsymbol{1}^T (\boldsymbol{u}\odot \boldsymbol{v}) = \boldsymbol{u}^T \boldsymbol{v},故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{x}(\text{softmax}(W\boldsymbol{x})-\boldsymbol{y})^TdW)。对照导数与微分的联系,得到\frac{\partial l}{\partial W}= (\text{softmax}(W\boldsymbol{x})-\boldsymbol{y})\boldsymbol{x}^T

解2:定义\boldsymbol{a} = W\boldsymbol{x},则l = -\boldsymbol{y}^T\log\text{softmax}(\boldsymbol{a}),先同上求出\frac{\partial l}{\partial \boldsymbol{a}} = \text{softmax}(\boldsymbol{a})-\boldsymbol{y},再利用复合法则:dl = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}}^Td\boldsymbol{a}\right) = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}}^TdW \boldsymbol{x}\right) = \text{tr}\left(\boldsymbol{x}\frac{\partial l}{\partial \boldsymbol{a}}^TdW\right),得到\frac{\partial l}{\partial W}= \frac{\partial l}{\partial\boldsymbol{a}}\boldsymbol{x}^T

参考:

1.矩阵求导术:原文链接:https://zhuanlan.zhihu.com/p/24709748

2.《矩阵分析与应用》第二版,张贤达

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值