矩阵微分/求导(机器学习基础)(not finished yet)

矩阵微分/求导(机器学习基础)

开坑,最近在学PRML这门课。老师再正式开始前涉及到了一些机器学习的基础知识,第一部分就是矩阵的微分/求导法则。由于我觉得他讲得实在是非常不严谨,另外,网上找资料也没有找到适合自己的。因此去图书馆借了本矩阵分析的书,开坑自己证明一波。


1. 矩阵微分的分类

一定要搞清楚:矩阵微分根据自变量是数量、向量、矩阵以及因变量是数量、向量、矩阵,能分为不同的类别。不同类别之间有一些公式是不一样的。

具体而言,矩阵微分大概可以按下列方式划分:

  • 自变量是数量
  • 自变量是向量
    • 数量函数的导数
    • 向量函数的导数
    • 矩阵函数的导数
  • 自变量是矩阵
    • 数量函数的导数
    • 向量函数的导数
    • 矩阵函数的导数

2. 自变量为数量的微分

2.1 相关定义

定义 函数矩阵. 设 m\times n 矩阵 A 的每一个元素均是变量 t 的函数,即

A(t)=[a_{ij}(t)]_{m\times n}=
\left[
\begin{matrix}
a_{11}(t)& a_{12}(t) &…& a_{1n}(t)\
a_{21}(t)& a_{22}(t) &…& a_{2n}(t)\
…&…&…&… \
a_{m1}(t)& a_{m2}(t) &…& a_{mn}(t)
\end{matrix}
\right]

则称 A(t) 为函数矩阵。

m\times 1 函数矩阵 A(t) 可以看作 m 维函数向量,即

A(t)=
\left[
\begin{matrix}
a_{1}(t) \
a_{2}(t) \
\vdots \
a_{m}(t)
\end{matrix}
\right]

注意了,一般直接说“向量”,那都是列向量。
另外,其实任意的 m\times n 矩阵函数,都可以看成以下两种(分块)形式,目的主要是证明中的变形比较方便。

A(t)=
\left[
\begin{matrix}
\vec{a_{1}}^\text{\tiny T} \
\vec{a_{2}}^\text{\tiny T} \
\vdots \
\vec{a_{m}}^\text{\tiny T}
\end{matrix}
\right]
=[\vec{a_{1}}, \vec{a_{2}},\cdots, \vec{a_{m}}]

定义 对于 m\times n 的函数矩阵 A(t),定义它对 t 的导数就是里面每一个函数都对 t 求导。

2.2 定理与证明

A(t), B(t),A^{-1}(t) 以及数量函数 \alpha(t) 均可导,则

(1)~ ~ ~\large \frac{{\rm d}(A\pm B)}{{\rm d}t}= \frac{{\rm d}A}{{\rm d}t}+\frac{{\rm d}B}{{\rm d}t}

(2)~ ~ ~\large \frac{{\rm d}(\alpha A)}{{\rm d}t}= \frac{{\rm d}\alpha}{{\rm d}t}{\footnotesize A}+{\footnotesize \alpha}\frac{{\rm d}A}{{\rm d}t}

(3)~ ~ ~\large \frac{{\rm d}(AB)}{{\rm d}t}= \frac{{\rm d}A}{{\rm d}t}{\footnotesize B}+{\footnotesize A}\frac{{\rm d}B}{{\rm d}t}

(4)~ ~ ~\large \frac{{\rm d}A^{-1}}{{\rm d}t}= -{\footnotesize A^{-1}}\frac{{\rm d}A}{{\rm d}t}{\footnotesize A^{-1}}


(1) 通过定义以及微分的加法律即可证明 (1)

(2) 通过定义以及微分的乘法律即可证明 (2)

(3) 证明:

引理:

\frac{{\rm d}(\vec a^{\tiny\rm T}\vec b)}{{\rm d}t}= \frac{{\rm d}\vec a^{\tiny\rm T}}{{\rm d}t}{\footnotesize \vec b}+{\footnotesize \vec a^{\tiny\rm T}}\frac{{\rm d}\vec b}{{\rm d}t}

可通过定义以及微分的乘法律证明上式。下证原公式:

设 $A=[a_{ik}(t)]{m\times p}, B=[b{kj}(t)]_{p\times n}为矩阵时将A,B$ 写成分块的形式:

A=
\left[
\begin{matrix}
\vec{a_{1}}^\text{\tiny T} \
\vec{a_{2}}^\text{\tiny T} \
\vdots \
\vec{a_{m}}^\text{\tiny T}
\end{matrix}
\right],
~B=[\vec{b_{1}}, \vec{b_{2}},\cdots, \vec{b_{m}}]

于是(由于数量同样可以看做一维的向量,因此往下向量都省略箭头)

AB=
\left[
\begin{matrix}
a_{1}^{\tiny\rm T}b_{1}& a_{1}^{\tiny\rm T}b_{2} &…& a_{1}^{\tiny\rm T}b_{n}\
a_{2}^{\tiny\rm T}b_{1}& a_{2}^{\tiny\rm T}b_{2} &…& a_{1}^{\tiny\rm T}b_{n}\
\vdots&\vdots&\ddots&\vdots \
a_{m}^{\tiny\rm T}b_{1}&a_{m}^{\tiny\rm T}b_{2} &…& a_{m}^{\tiny\rm T}b_{n}
\end{matrix}
\right]

由函数矩阵微分定义并利用引理中的向量微分公式可得:

\frac{{\rm d}(AB)}{{\rm d}t}=[\frac{{\rm d}(a_{i}^{\tiny\rm T}b_{j})}{{\rm d}t}]_{m\times n}=(\frac{{\rm d}a_{i}^{\tiny\rm T}}{{\rm d}t}b_{j}+a_{i}^{\tiny\rm T}\frac{{\rm d}b_{j}}{{\rm d}t})_{m\times n}=\frac{{\rm d}A}{{\rm d}t}{B}+{A}\frac{{\rm d}B}{{\rm d}t}

记得这个公式,需要注意要使得矩阵乘法可运算,因此A, B的顺序就很显然了。

(4) 证明:

因为 AA^{-1}=I,将 B=A^{-1} 代入公式 (3) 可得:

\frac{{\rm d}A}{{\rm d}t}{A^{-1}}+{A}\frac{{\rm d}A^{-1}}{{\rm d}t}=O

变换一下即可得到公式 (4).


3. 自变量为向量的微分

3.1 数量函数的导数

定义 设函数 f(X)=f(x_1, x_2, \cdots, x_n) 是以列向量 X=(x_1, x_2, \cdots, x_n)^{\tiny \rm T} 为自变量的数量函数(实际上这样的数量函数就是单个多变量函数,把这些多个变量组成的向量看成是自变量。),则定义

\frac{df(X)}{dX}= (
\frac{\partial f}{\partial x_1},
{\footnotesize\cdots},
\frac{\partial f}{\partial x_n}
)^{\rm T}

其实这个就是梯度
如果是对 X^{\rm T} 求导,则

\frac{df(X)}{dX^{\rm T}}= (
\frac{\partial f}{\partial x_1},
{\footnotesize\cdots},
\frac{\partial f}{\partial x_n}
)


未完待续…

Leave a Comment