【失败作】人工智能用张量分析
Abstract. 本文是将凸优化课上讲的矩阵求导形式变简明的尝试,然而这个尝试是失败的。我们尝试将矩阵导数推广到了张量到张量的函数的协变导数,然后使用了一些张量分析的记号。但是很遗憾最后的效果是除了省掉了求和符号之外没有任何简化的迹象,主要是因为即便是在恒等函数的协变导数的记法上,普通的符号也很难展示两个二阶张量直积起来的时候新的指标是从哪来的,然而引入彭罗斯的图形化表示又过于繁杂,只能放弃。
张量函数的微分运算
本节中 $U, V$ 均是线性空间。你可以认为要么是某个 $\mathbb{R}^n$,要么是某个 $\mathbb{R}^n$ 的对偶。此处,我们将会将以下几个概念视作等同,本质上就是要求读者的思维在线性空间和与之同构的向量空间之间自由切换:
- 列向量和 $\mathbb{R}^n$ 中的元素,行向量与 $\mathbb{R}^{n*}$ 中的元素,转置和对偶;
- 矩阵 $\mathbf{A}$ 与坐标表示为 ${\Gamma^i}_j = A_{ij}$ 的二阶混合张量 $\mathbf{\Gamma}$。
设函数 $\mathbf{f}(\mathbf{x})$ 是一个 $U_1\otimes \cdots \otimes U_n \rightarrow V_1 \otimes \cdots \otimes V_m$ 的函数。其协变导数
$$
\mathrm{D} \mathbf{f} : U_1\otimes \cdots \otimes U_n \rightarrow U_1^*\otimes \cdots \otimes U_n^* \otimes V_1 \otimes \cdots \otimes V_m
$$
其中 $\mathrm{D} \mathbf{f}(\mathbf{x})$ 的坐标为
$$
\mathrm{D} \mathbf{f}(\mathbf{x})^{j_1…j_m}_{i_1…i_n} = \frac{\partial f(\mathbf{x})^{j_1…j_m}}{\partial x^{i_1…i_n}}
$$
而 $\nabla f$ 是 $\mathrm{D}f$ 的对偶。考虑最简单的例子,比如 $\boldsymbol{f} : \mathbb{R}^n \rightarrow \mathbb{R}$,则 $\mathrm{D} \boldsymbol{f}$ 是一个 $n$ 维行向量,$\nabla \boldsymbol{f}$ 是一个 $n$ 维列向量。
张量函数的微分法则
接下来推导张量的一些可能有用的微分法则。本节将随时使用 Einstein’s Summation Convention。
定理 2.1(常量乘法的微分). 设 $\mathbf{f}: U_1\otimes \cdots \otimes U_n \rightarrow V_1 \otimes \cdots \otimes V_m$,$\mathbf{A}$ 是 $W_1\otimes \cdots \otimes W_l\otimes V_1^*\otimes \cdots \otimes V_m^*$ 中的张量,有 $\mathbf{A}$ 与 $f$ 的缩并的协变导数
$$
\mathrm{D}(\mathbf{A\cdot \mathbf{f}}) = \mathbf{A}\cdot \mathrm{D} \mathbf{f}
$$
证明. 计算即可。
$$
\begin{aligned}
&\frac{\partial}{\partial x^{i_1…i_n}} A^{k_1…k_l}_{j_1…j_m}f^{j_1…j_m}(\mathbf{x}) \\
=& A^{k_1…k_l}_{j_1…j_m} \frac{\partial}{\partial x_{i_1…i_n}}f^{j_1…j_m}(\mathbf{x}) \\
=& A^{k_1…k_l}_{j_1…j_m} \mathrm{D} \mathbf{f}(\mathbf{x})^{j_1…j_m}_{i_1…i_n}
\end{aligned}
$$
定理 2.2(函数乘法的微分). 设 $\mathbf{f}: U_1\otimes \cdots \otimes U_n \rightarrow V_1 \otimes \cdots \otimes V_m$,$\mathbf{g}: U_1\otimes \cdots \otimes U_n \rightarrow W_1\otimes \cdots \otimes W_l\otimes V_1^*\otimes \cdots \otimes V_m^*$。则 $\mathbf{f}$ 和 $\mathbf{g}$ 的缩并的协变导数
$$
\mathrm{D}(\mathbf{f}\cdot \mathbf{g}(\mathbf{x})) = (\mathrm{D}\mathbf{f})\cdot \mathbf{g}(\mathbf{x}) + \mathbf{f}\cdot (\mathrm{D}\mathbf{g})(\mathbf{x})
$$
证明. 这可以根据线性性和定义直接得到,这里不再多算。
定理 2.3(复合函数的微分链式法则). 设 $\mathbf{f}: U_1\otimes \cdots \otimes U_n \rightarrow V_1 \otimes \cdots \otimes V_m$,$\mathbf{g}: V_1 \otimes \cdots \otimes V_m\rightarrow W_1\otimes \cdots \otimes W_l$,则 $\mathbf{g}$ 和 $\mathbf{f}$ 的复合的协变导数
$$
\mathrm{D}(\mathbf{gf}(\mathbf{x})) = (\mathrm{D}\mathbf{g})(\mathbf{f}(\mathbf{x}))\cdot (\mathrm{D}\mathbf{f})(\mathbf{x})
$$
证明. 下面的推导看起来很忙,但不知道在忙什么。这本质上就是一个复合函数全微分而已,推导等式右边已然是上方的形式。
$$
\begin{aligned}
\frac{\partial}{\partial x^{i_1…i_n}} \mathbf{g}(\mathbf{f}(\mathbf{x}))^{j_1…j_l} &= \frac{\partial}{\partial \mathbf{f}(\mathbf{x})^{k_1…k_m}}\mathbf{g}(\mathbf{f}(\mathbf{x}))^{j_1…j_l}\frac{\partial}{\partial x^{i_1…i_n}}\mathbf{f}(\mathbf{x})^{k_1…k_m}
\end{aligned}
$$
使用例
来看几个题目中常见的东西的导数。
例 3.0(单位函数). $\mathrm{Id} : \mathbb{R}^n\times \mathbb{R}^{m*}\rightarrow \mathbb{R}^n\times \mathbb{R}^{m*}$。
$$
\mathrm{D}~\mathrm{Id}(\mathbf{X})_{il}^{jk} = \frac{\partial}{\partial X^i_j} X^k_l = \delta^j_l\delta^k_i
$$
这个不知道有什么方便的记号来表示。可能是 $\mathbf{II}$,其中乘法是直积?但是直积没法直观地展示下标是哪里来的。
例 3.1(Trace). $\mathrm{tr} : \mathbb{R}^n\otimes \mathbb{R}^{n*}\rightarrow \mathbb{R}$,$\mathrm{tr}(\mathbf{X}) = {X^i}_i$。
$$
\mathrm{D}~\mathrm{tr}(\mathbf{X})_i^j = (\mathrm{D} X^k_k)_i^j = \delta_i^j
$$
因此 $\mathrm{D}~\mathrm{tr}(\mathbf{X}) = \mathbf{I}$。
例 3.2(矩阵左右乘). 设 $\mathbf{A}: \mathbb{R}^n \otimes \mathbb{R}^{m*}$,$\mathbf{B} : \mathbb{R}^p\otimes \mathbb{R}^{q^*}$,$f : \mathbb{R}^m\otimes \mathbb{R}^{p*}\rightarrow \mathbb{R}^n\otimes \mathbb{R}^{q*}$,$f(\mathbf{X}) = \mathbf{A}\cdot \mathbf{X}\cdot \mathbf{B}$
这东西更是没什么好的表示方法了。我们硬算一下坐标:
$$
\mathrm{D} {f(\mathbf{X})^i_j}^k_l = {\mathrm{D}(\mathbf{A}\cdot \mathbf{X})^i_j}_a^kB^a_l = A^k_b (\mathrm{D}~\mathrm{Id}(\mathbf{X}))_{ja}^{ib}B_{l}^a = A^k_j B_{l}^i
$$
硬要说这东西就是 $\mathbf{AB}$(直积),但这样还是不能直观地展示是怎么直起来的。
例子 3.3(经典例子). 设 $f(\mathbf{X}) = \mathrm{tr}(\mathbf{AXB})$,其中 $\mathbf{A}$ 的行数等于 $\mathbf{B}$ 的列数。
这显然就是
$$
\mathcal{D} f(\mathbf{X})^i_j = \delta_b^a (\mathrm{D}~\mathbf{AXB})_{ja}^{ib} = \delta^a_b A_j^b B_a^i = A_j^k B_k^i
$$
也就是 $\mathbf{B}\cdot \mathbf{A}$(这里是矩阵乘法)。