本文是对张量微分的一些思考。先从一个定理开始引入本文的内容。
总微分(Jacobian 存在性) 定理#
设
f:Rn⟶Rm在点 x∈Rn 可微(即在该点存在良好的线性近似)。那么有:
存在唯一的线性映射
Df(x):Rn→Rm使得当增量 h→0 时,
f(x+h)=f(x)+Df(x)h+o(∥h∥).注: Df(x) 在这里表示一个映射,其中输入变量是 h∈Rn,输出变量是 Df(x)h∈Rm
在标准基下的矩阵表示——Jacobian
如果把 Df(x) 在输入输出的标准基下写成矩阵形式,那么它就是我们常说的 Jacobian 矩阵
Jf(x)=∂x1∂f1⋮∂x1∂fm⋯⋱⋯∂xn∂f1⋮∂xn∂fm∈Rm×n.也就是说,当 f(x)=[f1(x),…,fm(x)]T,x=[x1,…,xn]T 时,导数的“维度”就是 输出维度m×输入维度 n —— 恰好能把输入的方向向量 h∈Rn 映射到输出的增量 Δf∈Rm。
高阶张量的导数#
总微分定理可以推广到高阶张量上。设 X∈Ra1×a2×⋯×an 是一个 n 阶张量,Y∈Rb1×b2×⋯×bm 是一个 m 阶张量。
根据张量导数的本质是描述了张量 X 的每一个元素对张量 Y 的每一个元素的标量导数的特殊张量排列,可以得到张量 X 对张量 Y 的导数是一个 (m+n) 阶张量,记为
∂X∂Y∈Rb1×b2×⋯×bm×a1×a2×⋯×an具体到某对元素之间的导数元素可以表示为
(∂X∂Y)j1⋯jm,i1⋯in=∂Xi1⋯in∂Yj1⋯jm
高阶张量的总微分定理#
我们把张量 X 和 张量 Y 分别向量化重排列,得到 vec(X)∈Ra1a2⋯an 和 vec(Y)∈Rb1b2⋯bm,此时应用向量的总微分定理即可得到对应的高阶张量的总微分定理,以及对应的导数的 Jacobian 矩阵形式
JY(X)=∂vec(X)1∂vec(Y)1∂vec(X)1∂vec(Y)2⋮∂vec(X)1∂vec(Y)b1b2⋯bm∂vec(X)2∂vec(Y)1∂vec(X)2∂vec(Y)2⋮∂vec(X)2∂vec(Y)b1b2⋯bm⋯⋯⋱⋯∂vec(X)a1a2⋯an∂vec(Y)1∂vec(X)a1a2⋯an∂vec(Y)2⋮∂vec(X)a1a2⋯an∂vec(Y)b1b2⋯bm其中 JY(X)∈R(b1b2⋯bm)×(a1a2⋯an)。
总微分表达式#
根据总微分定理,当张量 X 发生微小变化 dX 时,张量 Y 的变化为:
dvec(Y)=JY(X)⋅dvec(X)重新整形回张量形式:
dY=reshape(JY(X)⋅vec(dX))换句话说,高阶张量的导数既可以表达成 (m+n) 阶张量的形式,也可以表达成一个二阶展开矩阵的形式。这两种形式的表达都是很自然的。
- 二阶矩阵的自然在于行和列分别对应因变量和自变量
- (m+n) 阶张量的自然则是在于本质上的自然排布所形成的
两种表达形式是等价的, (m+n) 阶张量形式与 Jacobian 矩阵形式的关系为
JY(X)=reshape(∂X∂Y)其中 reshape 操作将 (m+n) 阶张量重新排列为矩阵形式。