矩阵求导
参考
zhuanlan.zhihu.com/p/273729929
main idea
4 定义法两个基本题目
eg1. f(X)=∣X∣, X是n×n的矩阵,求∂X∂f
按照定义,对每个位置分别求导
∂X∂f=⎣⎡∂x11∂∣X∣∂x12∂∣X∣∂x21∂∣X∣∂x22∂∣X∣...∂xn1∂∣X∣∂xn2∂∣X∣............∂x1n∂∣X∣∂x2n∂∣X∣...∂xnn∂∣X∣⎦⎤
对于∂xij∂∣X∣ 按照他所在的行展开计算行列式,则可变化为 ∂xijAi1xi1+...+Aijxij+...+Ainxin=Aij 其中Aij为代数余子式(有符号)。所以按照定义,求导后就是
⎣⎡A11...An1A12...An2.........A1n...Ann⎦⎤
所以这个导数就是伴随矩阵X∗,伴随矩阵、原矩阵和逆矩阵有如下关系:XX∗=X∗X=∣X∣I
所以可以进一步化为∂X∂f=∣X∣X−1
利用全微分 + trace的方法求导
-
这种方法的核心思想是引入了trace,引入trace的好处是只关注矩阵的对角线,因此很多操作在只看trace的情况下是成立的。这为化简提供了便利。
-
全微分在矩阵条件下和实值变量情况下是一样的,为X的各个分量的偏导数*该分量的微分最后求和
例如 df(X)=∂x11∂fdx11+...+∂xmn∂fdxmn
他可以进一步写成 df(X)=tr(∂XT∂fdX) 这其实是矩阵trace的一个性质,如果两个矩阵形状相同,那第一个转置乘第二个再求trace恰好就是对应位置元素相乘再求和。
-
上面的写法有一个好处,当我们试图求∂X∂f 的时候,可以先求∂XT∂f 再转置。而后者求法,则可以先求df(X)。但是直接求微分无法出现trace符号,但标量函数的全微分是一个标量,它的trace等于自身,因此df(X)=tr(df(X))。
因此,矩阵求导可以利用全微分的性质(和求导一样)进行一系列化简,化成df(X)=tr(g(X)dX)的形式,那么g(X)就是∂XT∂f,已经有人证明了这个的唯一性。再转置回来就得到了导数。
-
tr的性质
- tr(A)=tr(A'),tr(AB')=tr(BA') 转置不变
- tr(AB)=tr(BA), tr(ABC)=tr(CAB)=tr(BCA) 转着乘
- 线性性
eg2. 求∂X∂aTXXTb
d(aTXXTb)=tr(d(aTXXTb))=tr(aTd(XXT)b)=tr(aTdXXTb)+tr(aTXdXTb)
利用性质2,把dX放在最右面,把前面凑成导数转置:
d(aTXXTb)=tr(aTdXXTb)+tr(aTXdXTb)=tr(XTbaTdX)+tr(baTXdXT)
对第二项,联合运用转置和交换率,得d(aTXXTb)=tr(XTbaTdX)+tr(XTabTdX)=tr((XTbaT+XTabT)dX)
所以导数就是(XTbaT+XTabT)T=abTX+baTX
eg3. 求dX−1,X是n×n的矩阵
XX−1=I 两侧取微分 dX−1=−X−1dXX−1
这个如果求微分的话,是矩阵对矩阵求微分,用到克罗内克积,很复杂。克罗内克积用⊗表示,含义为第一个矩阵的每一个元素和第二个矩阵相乘,结果是一个分块矩阵。记住dX/dX=I⊗I 结果是一个n2×n2的矩阵。
对于对称矩阵求导的处理
如果求导的矩阵是对称的,那么其实上面求出的导数并不彻底,因为对称位置的变量是相同的,他们可以进一步看作是关于某个参数t的函数,所以根据链式求导法则还得再求一次。
因此分为两个步骤,第一步是按照上面求法求出A=∂XT∂f,这个求解过程中不要使用任何对称的性质。
在此基础上,得到A′=A+A−tr(ATI) 。这样相当于把对称位置的导数变成了xij∂f+xji∂f