矩阵求导
参阅
zhuanlan.zhihu.com/p/273729929
main idea
-
函数的输出假如不是标量,那么求导便是对他的每一个输出分别求,所以问题退化成了输出是标量、输入是矩阵的求导,不必太纠结,由于只需方位映射的对就能够了
-
关于矩阵XX求导,求导完的成果和XX的形状是相同的。
-
界说办法求导
- 假定f:Rmn→Rf:R^{m\times n} \rightarrow R 那么求导成果是一个mnm \times n 的矩阵,第ii行第jj列表示ff关于xijx_{ij}的求导成果。
- 依据这个界说,导数的运算规律全都适用。包含函数的和差积商、数乘、复合。对常数求是0矩阵
4 界说法两个基本标题
eg1. f(X)=∣X∣f(X)=|X|, XX是nnn\times n的矩阵,求∂f∂X\frac{\partial f}{\partial X}
依照界说,对每个方位分别求导
\frac{\partial |X|}{\partial x_{11}}\frac{\partial |X|}{\partial x_{12}}&…&\frac{\partial |X|}{\partial x_{1n}}\\
\frac{\partial |X|}{\partial x_{21}}\frac{\partial |X|}{\partial x_{22}}&…&\frac{\partial |X|}{\partial x_{2n}}\\
…&…&…\\ \frac{\partial |X|}{\partial x_{n1}}\frac{\partial |X|}{\partial x_{n2}}&…&\frac{\partial |X|}{\partial x_{nn}}\\
\end{bmatrix}
关于∂∣X∣∂xij\frac{\partial |X|}{\partial x_{ij}} 依照他地点的行展开计算行列式,则可变化为 Ai1xi1+…+Aijxij+…+Ainxin∂xij=Aij\frac{A_{i1}x_{i1}+…+A_{ij}x_{ij}+…+A_{in}x_{in}}{\partial x_{ij}}=A_{ij} 其中AijA_{ij}为代数余子式(有符号)。所以依照界说,求导后便是
[A11A12…A1n…………An1An2…Ann]\begin{bmatrix} A_{11}&A_{12}&…&A_{1n} \\ …&…&…&…\\A_{n1}&A_{n2}&…&A_{nn}\end{bmatrix}
所以这个导数便是伴随矩阵X∗X^*,伴随矩阵、原矩阵和逆矩阵有如下联系:XX∗=X∗X=∣X∣IXX^*=X^*X=|X|I
所以能够进一步化为∂f∂X=∣X∣X−1\frac{\partial f}{\partial X}=|X|X^{-1}
使用全微分 + trace的办法求导
-
这种办法的中心思想是引进了trace,引进trace的好处是只关注矩阵的对角线,因而许多操作在只看trace的情况下是成立的。这为化简供给了便利。
-
全微分在矩阵条件下和实值变量情况下是相同的,为XX的各个重量的偏导数*该重量的微分最终求和
例如 df(X)=∂f∂x11dx11+…+∂f∂xmndxmndf(X)=\frac{\partial f}{\partial x_{11}}dx_{11}+…+\frac{\partial f}{\partial x_{mn}}dx_{mn}
他能够进一步写成 df(X)=tr(∂f∂XTdX)df(X)=tr(\frac{\partial f}{\partial X^T}dX) 这其实是矩阵trace的一个性质,假如两个矩阵形状相同,那第一个转置乘第二个再求trace恰好便是对应方位元素相乘再求和。
-
上面的写法有一个好处,当咱们试图求∂f∂X\frac{\partial f}{\partial X} 的时分,能够先求∂f∂XT\frac{\partial f}{\partial X^T} 再转置。而后者求法,则能够先求df(X)df(X)。但是直接求微分无法呈现trace符号,但标量函数的全微分是一个标量,它的trace等于自身,因而df(X)=tr(df(X))df(X)=tr(df(X))。
因而,矩阵求导能够使用全微分的性质(和求导相同)进行一系列化简,化成df(X)=tr(g(X)dX)df(X)=tr(g(X)dX)的形式,那么g(X)g(X)便是∂f∂XT\frac{\partial f}{\partial X^T},现已有人证明了这个的唯一性。再转置回来就得到了导数。
-
tr的性质
- tr(A)=tr(A’),tr(AB’)=tr(BA’) 转置不变
- tr(AB)=tr(BA), tr(ABC)=tr(CAB)=tr(BCA) 转着乘
- 线性性
eg2. 求∂aTXXTb∂X\frac{\partial a^TXX^Tb}{\partial X}
d(aTXXTb)=tr(d(aTXXTb))=tr(aTd(XXT)b)=tr(aTdXXTb)+tr(aTXdXTb)d(a^TXX^Tb)=tr(d(a^TXX^Tb))=tr(a^Td(XX^T)b)=tr(a^TdXX^Tb) + tr(a^TXdX^Tb)
使用性质2,把dX放在最右面,把前面凑成导数转置:
d(aTXXTb)=tr(aTdXXTb)+tr(aTXdXTb)=tr(XTbaTdX)+tr(baTXdXT)d(a^TXX^Tb)=tr(a^TdXX^Tb) + tr(a^TXdX^Tb)=tr(X^Tba^TdX)+tr(ba^TXdX^T)
对第二项,联合运用转置和交换率,得d(aTXXTb)=tr(XTbaTdX)+tr(XTabTdX)=tr((XTbaT+XTabT)dX)d(a^TXX^Tb)=tr(X^Tba^TdX)+tr(X^Tab^TdX)=tr((X^Tba^T+X^Tab^T)dX)
所以导数便是(XTbaT+XTabT)T=abTX+baTX(X^Tba^T+X^Tab^T)^T=ab^TX+ba^TX
eg3. 求dX−1dX^{-1},XX是nnn\times n的矩阵
XX−1=IXX^{-1}=I 两侧取微分 dX−1=−X−1dXX−1dX^{-1}=-X^{-1}dXX^{-1}
这个假如求微分的话,是矩阵对矩阵求微分,用到克罗内克积,很复杂。克罗内克积用⊗\otimes表示,含义为第一个矩阵的每一个元素和第二个矩阵相乘,成果是一个分块矩阵。记住dX/dX=I⊗IdX/dX=I\otimes I 成果是一个n2n2n^2\times n^2的矩阵。
关于对称矩阵求导的处理
假如求导的矩阵是对称的,那么其实上面求出的导数并不完全,由于对称方位的变量是相同的,他们能够进一步看作是关于某个参数t的函数,所以依据链式求导规律还得再求一次。
因而分为两个过程,第一步是依照上面求法求出A=∂f∂XTA=\frac{\partial f}{\partial X^T},这个求解过程中不要使用任何对称的性质。
在此基础上,得到A′=A+A−tr(ATI)A’=A+A-tr(A^TI) 。这样相当于把对称方位的导数变成了∂fxij+∂fxji\frac{\partial f}{x_{ij}}+\frac{\partial f}{x_{ji}}