太硬核了,放个链接(挖个坑)就跑。

  1. https://zhuanlan.zhihu.com/p/24709748

  2. https://github.com/microsoft/ai-edu/blob/master/A-基础教程/A2-神经网络基本原理简明教程/Appendix/01.1-基本数学导数公式.md#115-矩阵求导

由于链接 2 有变动,因此下面对文章内容进行备份。

01.1-基本数学导数公式

1.1 基本函数导数公式

1.1.1 基本函数及其导数

公式序号 函数 导数 备注
1 $y=c$ $y’=0$
2 $y=x^a$ $y’=ax^{a-1}$
3 $y=log_ax$ $y’=\frac{1}{x}log_ae=\frac{1}{xlna}$
4 $y=lnx$ $y’=\frac{1}{x}$
5 $y=a^x$ $y’=a^xlna$
6 $y=e^x$ $y’=e^x$
7 $y=e^{-x}$ $y’=-e^{-x}$
8 $y=sin(x)$ $y’=cos(x)$ 正弦函数
9 $y=cos(x)$ $y’=-sin(x)$ 余弦函数
10 $y=tg(x)$ $y’=sec^2(x)=\frac{1}{cos^2x}$ 正切函数
11 $y=ctg(x)$ $y’=-csc^2(x)$ 余切函数
12 $y=arcsin(x)$ $y’=\frac{1}{\sqrt{1-x^2}}$ 反正弦函数
13 $y=arccos(x)$ $y’=-\frac{1}{\sqrt{1-x^2}}$ 反余弦函数
14 $y=arctan(x)$ $y’=\frac{1}{1+x^2}$ 反正切函数
15 $y=arcctg(x)$ $y’=-\frac{1}{1+x^2}$ 反余切函数
16 $y=sinh(x)=(e^x-e^{-x})/2$ $y’=cosh(x)$ 双曲正弦函数
17 $y=cosh(x)=(e^x+e^{-x})/2$ $y’=sinh(x)$ 双曲余弦函数
18 $y=tanh(x)=(e^x-e^{-x})/(e^x+e^{-x})$ $y’=sech^2(x)=1-tanh^2(x)$ 双曲正切函数
19 $y=coth(x)=(e^x+e^{-x})/(e^x-e^{-x})$ $y’=-csch^2(x)$ 双曲余切函数
20 $y=sech(x)=2/(e^x+e^{-x})$ $y’=-sech(x)*tanh(x)$ 双曲正割函数
21 $y=csch(x)=2/(e^x-e^{-x})$ $y’=-csch(x)*coth(x)$ 双曲余割函数

1.1.2 导数四则运算

$$[u(x) + v(x)]’ = u’(x) + v’(x) \tag{30}$$
$$[u(x) - v(x)]’ = u’(x) - v’(x) \tag{31}$$
$$[u(x)v(x)]’ = u’(x)v(x) + v’(x)*u(x) \tag{32}$$
$$[\frac{u(x)}{v(x)}]’=\frac{u’(x)v(x)-v’(x)u(x)}{v^2(x)} \tag{33}$$

1.1.3 偏导数

如$Z=f(x,y)$,则Z对x的偏导可以理解为当y是个常数时,Z单独对x求导:

$$Z’_x=f’_x(x,y)=\frac{\partial{Z}}{\partial{x}} \tag{40}$$

则Z对y的偏导可以理解为当x是个常数时,Z单独对y求导:

$$Z’_y=f’_y(x,y)=\frac{\partial{Z}}{\partial{y}} \tag{41}$$

在二元函数中,偏导的何意义,就是对任意的$y=y_0$的取值,在二元函数曲面上做一个$y=y_0$切片,得到$Z = f(x, y_0)$的曲线,这条曲线的一阶导数就是Z对x的偏导。对$x=x_0$同样,就是Z对y的偏导。

1.1.4 复合函数求导(链式法则)

  • 如果 $y=f(u), u=g(x)$ 则:

$$y’_x = f’(u) \cdot u’(x) = y’_u \cdot u’_x=\frac{dy}{du} \cdot \frac{du}{dx} \tag{50}$$

  • 如果$y=f(u),u=g(v),v=h(x)$ 则:

$$
\frac{dy}{dx}=f’(u) \cdot g’(v) \cdot h’(x)=\frac{dy}{du} \cdot \frac{du}{dv} \cdot \frac{dv}{dx} \tag{51}
$$

  • 如$Z=f(U,V)$,通过中间变量$U = g(x,y), V=h(x,y)$成为x,y的复合函数$Z=f[g(x,y),h(x,y)]$ 则:

$$
\frac{\partial{Z}}{\partial{x}}=\frac{\partial{Z}}{\partial{U}} \cdot \frac{\partial{U}}{\partial{x}} + \frac{\partial{Z}}{\partial{V}} \cdot \frac{\partial{V}}{\partial{x}} \tag{52}
$$

$$
\frac{\partial{Z}}{\partial{y}}=\frac{\partial{Z}}{\partial{U}} \cdot \frac{\partial{U}}{\partial{y}} + \frac{\partial{Z}}{\partial{V}} \cdot \frac{\partial{V}}{\partial{y}}
$$

1.1.5 矩阵求导

如$A,B,X$都是矩阵,则:

$$
B\frac{\partial{(AX)}}{\partial{X}} = A^TB \tag{60}
$$

$$
B\frac{\partial{(XA)}}{\partial{X}} = BA^T \tag{61}
$$

$$
\frac{\partial{(X^TA)}}{\partial{X}} = \frac{\partial{(A^TX)}}{\partial{X}}=A \tag{62}
$$

$$
\frac{\partial{(A^TXB)}}{\partial{X}} = AB^T \tag{63}
$$

$$
\frac{\partial{(A^TX^TB)}}{\partial{X}} = BA^T, {dX^TAX \over dX} = (A+A^T)X \tag{64}
$$

$${dX^T \over dX} = I, {dX \over dX^T} = I, {dX^TX \over dX}=2X\tag{65}$$

$${du \over dX^T} = ({du^T \over dX})^T$$

$${du^Tv \over dx} = {du^T \over dx}v + {dv^T \over dx}u^T, {duv^T \over dx} = {du \over dx}v^T + u{dv^T \over dx} \tag{66}$$

$${dAB \over dX} = {dA \over dX}B + A{dB \over dX} \tag{67}$$

$${du^TXv \over dx}=uv^T, {du^TX^TXu \over dX}=2Xuu^T \tag{68}$$

$${d[(Xu-v)^T(Xu-v)] \over dX}=2(Xu-v)u^T \tag{69}$$

1.1.6 标量对矩阵导数的定义

假定$y$是一个标量,$X$是一个$N \times M$大小的矩阵,有$y=f(X)$, $f$是一个函数。我们来看$df$应该如何计算。

首先给出定义:

$$
df = \sum_j^M\sum_i^N \frac{\partial{f}}{\partial{x_{ij}}}dx_{ij}
$$

下面我们引入矩阵迹的概念,所谓矩阵的迹,就是矩阵对角线元素之和。也就是说:

$$
tr(X) = \sum_i x_{ii}
$$

引入迹的概念后,我们来看上面的梯度计算是不是可以用迹来表达呢?

$$
\frac{\partial{f}}{\partial{X}} =
\begin{pmatrix}
\frac{\partial{f}}{\partial{x_{11}}} & \frac{\partial{f}}{\partial{x_{12}}} & \dots & \frac{\partial{f}}{\partial{x_{1M}}} \
\frac{\partial{f}}{\partial{x_{21}}} & \frac{\partial{f}}{\partial{x_{22}}} & \dots & \frac{\partial{f}}{\partial{x_{2M}}} \
\vdots & \vdots & \ddots & \vdots \
\frac{\partial{f}}{\partial{x_{N1}}} & \frac{\partial{f}}{\partial{x_{N2}}} & \dots & \frac{\partial{f}}{\partial{x_{NM}}}
\end{pmatrix} \tag{90}
$$

$$
dX =
\begin{pmatrix}
dx_{11} & d{x_{12}} & \dots & d{x_{1M}} \
d{x_{21}} & d{x_{22}} & \dots & d{x_{2M}} \
\vdots & \vdots & \ddots & \vdots \
d{x_{N1}} & d{x_{N2}} & \dots & d{x_{NM}}
\end{pmatrix} \tag{91}
$$

我们来看矩阵$(90)$的转置和矩阵$(91)$乘积的对角线元素

$$
((\frac{\partial f}{\partial X})^T dX){jj}=\sum_i^N \frac{\partial f}{\partial x{ij}} dx_{ij}
$$

因此,

$$
tr({(\frac{\partial{f}}{\partial{X}})}^TdX) = \sum_j^M\sum_i^N\frac{\partial{f}}{\partial{x_{ij}}}dx_{ij} = df = tr(df) \tag{92}
$$

上式的最后一个等号是因为$df$是一个标量,标量的迹就等于其本身。

1.1.7 矩阵迹和导数的部分性质

这里将会给出部分矩阵的迹和导数的性质,作为后面推导过程的参考。性子急的同学可以姑且默认这是一些结论。

$$
d(X + Y) = dX + dY \tag{93}
$$
$$
d(XY) = (dX)Y + X(dY)\tag{94}
$$
$$
dX^T = {(dX)}^T \tag{95}
$$
$$
d(tr(X)) = tr(dX) \tag{96}
$$
$$
d(X \odot Y) = dX \odot Y + X \odot dY \tag{97}
$$
$$
d(f(X)) = f^{‘}(X) \odot dX \tag{98}
$$
$$
tr(XY) = tr(YX) \tag{99}
$$
$$
tr(A^T (B \odot C)) = tr((A \odot B)^T C) \tag{100}
$$

以上各性质的证明方法类似,我们选取式(94)作为证明的示例:

$$
Z = XY
$$

则Z中的任意一项是

$$
z_{ij} = \sum_k x_{ik}y_{kj}
$$
$$
dz_{ij} = \sum_k d(x_{ik}y_{kj})
$$
$$
= \sum_k (dx_{ik}) y_{kj} + \sum_k x_{ik} (dy_{kj})
$$
$$
=dX_{ij} \cdot Y_{ij} + X_{ij} \cdot dY_{ij}
$$
从上式可见,$dZ$的每一项和$(dX)Y + X(dY)$的每一项都是相等的。因此,可以得出式(94)成立。

参考资料

矩阵求导术