矩阵微积分

\[ \newcommand{\vec}{\bold} \]

约定

  • 矩阵大写,向量小写,标量不加粗,如 \(\vec A, \vec b, c\)
  • 一般的方向等向量都按照列向量处理,书写上 \([x_1,x_2,..x_n]\) 按照直观理解为横向量,列向量需要加转置 \([...]^T\)
  • 矩阵乘法直接忽略符号,\(\times\) 表示叉乘,\(\cdot\) 表示点乘。
Jacobin矩阵

考虑一个 \(n\) 元输入(\(\vec x = x_1,...x_n\)),\(m\) 元输出(\(\vec y = y_1,...y_m\))的函数 \(\vec y = f(\vec x)\),我们定义: $$ J = = \[ 该矩阵即为Jacobin矩阵,为什么定义成这样?如果我们令 $\vec {dx} = [dx_1, dx_2..dx_n]^T, \vec {dy} = [dy_1, dy_2..dy_m]^T$,由于 \] dy_i = _{j=1}^n dx_j \[ 会得到: \] J = $$ 这就是Jacobin矩阵的物理意义,它是偏导数,也可以认为是从参数空间 \(\vec{dx}\)\(\vec{dy}\) 的变换矩阵,其行列式就对应了这一变换的缩放比例。

在积分域转换时,积分变量变化,需要乘上对应的 \(|\vec J|\),以确保积分正确。

另一个常见的定义是梯度 \(\nabla f(\vec x) = [\frac{\part f}{\part x_1}, \frac{\part f}{\part x_2}... \frac{\part f}{\part x_n}]^T\),对于任意方向 \(\vec v = [v_1, v_2,...v_n]^T\),实值函数在该方向上的导数(方向导数)为 \(\vec v \cdot \nabla f\),即方向与梯度的点乘。因此梯度就是函数值下降最快的方向。

\(\vec J\) 可以看作是非实值函数的“梯度”,同样的,\(\vec J \vec v\) 即为函数在 \(\vec v\) 方向上的导数。

实值函数对向量的求导,导数结果认为和自变量同维度,例如 \[ \frac{\part(\vec x^T\vec x)}{\part{\vec x}} = 2\vec x \] 此时 \(\vec x\) 为列向量,结果也为列向量。

Divergence & Curl & Laplacian

散度、旋度和拉普拉斯,都从 \(\vec J, \vec H\) 中获得,具体意义等用到了再来理解。

Hessian矩阵

实值函数 \(f(\vec x)\) 的二阶导: $$ H = = J(f(x)) = $$

\(\vec H\vec v = \vec J(\nabla f(\vec x))\vec v\),事实上表示梯度在特定方向上的导数;也就是可以将Hessian矩阵看做方向向量 \(\vec v\) 到梯度导数的映射;因此,\(\vec H\) 的几个特征向量代表了曲面的主曲率方向,特征值则反映了凹凸性。

\(\vec v^T \vec H \vec v\) 即为实值函数的方向二阶导;注意这是一个实数,而上面的 \(\vec H\vec v\) 是一个向量。

若任意方向的二阶导都大于0,即任意 \(\vec v^T \vec H \vec v > 0\)\(\vec H\) 矩阵正定),且任意方向一阶导为0(等价于梯度 \([\frac{\part f}{\part x}, \frac{\part f}{\part y}]^T = \vec 0\)),则函数在这一点处是一个极小值点;极大值点同理。

一些容易证明的式子

张量微积分其实就是在考虑输入变量和输出变量两两之间的偏导数,下面列出一些常见的式子的导数,记住这些结论会方便很多。

1)\(\vec x\)\(\vec A\) 无关 \[ \begin{gather*} \vec y = \vec A \vec x \\ \frac{\part \vec y}{\part \vec x} = \vec A \end{gather*} \] 2)\(\vec x, \vec y\) 均与 \(\vec A\) 无关 \[ \begin{gather*} \alpha = \vec y^T\vec A \vec x \\ \frac{\part \alpha}{\part \vec x} = \vec y^T \vec A \\ \frac{\part \alpha}{\part \vec y} = \vec x^T \vec A^T \\ \end{gather*} \] 注意这里将 \(\vec A \vec x\) 转置了一下。不写成 \(\frac{\part \alpha}{\part \vec y} = \vec A \vec x\),是因为根据 \(\vec J\) 的定义,我们希望标量对向量的偏导是一个横向量。

3)\(\alpha\) 用二次型定义,\(\vec x\)\(\vec A\) 无关 \[ \begin{gather*} \alpha = \vec x^T\vec A\vec x \\ \frac{\part\alpha}{\part \vec x} = \vec x^T (\vec A+\vec A^T) \end{gather*} \]

4)特别的,在上一条的基础上,\(\vec A\) 为对称矩阵时 \[ \begin{gather*} \alpha = \vec x^T\vec A\vec x \\ \frac{\part\alpha}{\part \vec x} = 2\vec x^T \vec A \end{gather*} \] 5)类似经典公式: \(y = f(x)g(x), y' = g(x)f'(x) +f(x)g'(x)\) \[ \begin{gather*} \alpha = \vec y^T \vec x \\ \frac{\part \alpha}{\part\vec z} = \vec x^T \frac{\part\vec y}{\part\vec z} + \vec y^T \frac{\part\vec x}{\part\vec z} \end{gather*} \] 此处 \(\vec x \vec y\) 都是 \(\vec z\) 的函数。

注意:求导的乘法法则用在向量上时,不能改变顺序,即必须是 \(g(\vec x)f'(\vec x)\),不能是 \(f'(\vec x)g(\vec x)\)(TOBE CHECK)

6)特别地,在上一条的基础上: \[ \begin{gather*} \alpha = \vec x^T \vec x \\ \frac{\part \alpha}{\part\vec z} = 2\vec x^T \frac{\part\vec x}{\part\vec z} \end{gather*} \] 7)特别地,在第5条的基础上: \[ \begin{gather*} \alpha = \vec y^T \vec A\vec x \\ \frac{\part \alpha}{\part\vec z} = \vec x^T \vec A^T \frac{\part\vec y}{\part\vec z} + \vec y^T\vec A \frac{\part\vec x}{\part\vec z} \end{gather*} \] 将与 \(\vec z\) 无关的 \(\vec A\)\(\vec x\) 视为一个整体即可。

矩阵求导

矩阵和向量实质都是多元变量,矩阵之间的求导需要将矩阵拆成向量来做。

关键词:向量化、Kronecker积、交换矩阵相关的恒等式


矩阵微积分
http://www.lxtyin.ac.cn/2024/08/19/笔记/张量分析(矩阵微积分)/
作者
lx_tyin
发布于
2024年8月19日
许可协议