矩阵微分笔记(1)

发布时间:2023年12月28日

前言

前几天学习最优化的时候,发现里面有关于矩阵求导的问题,由于不是很明白当时,就先背了下来。前几天呢也没学别的,因为楼主去拍拖啦~好吧好吧,赶紧学习补回来。

由于我只是一个学统计的(数学边缘人),所写内容可能不是这么严谨,有错误的地方还请大家纠正。但尽管如此,还是得了解一下理论的,我也想当一个调参人- -

首先给定几个前提:

  • 为简便起见,仅考虑实数域的矩阵求导,不考虑复数域。
  • 如果没有特殊说明,向量 x ? \vec{x} x 默认为列向量的形式,即 x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=\left [ x_1,x_2,\cdots,x_n\right ]^T x =[x1?,x2?,?,xn?]T

1. 矩阵求导的布局形式

1.1 矩阵求导的基本单元

首先我们来看看在矩阵求导中会遇到的一些概念,由于与参考内容的形式不一样,为了明显起见,我用了一种比较容易区分的方式做笔记,希望大家可以理解(什么粗体细体的我真的记不住TAT)

我们会遇到标量、向量、矩阵这三个概念。

先来简单说说标量和向量的区别:如果按照物理上的概念来说的话:标量是数量,没有方向,而向量是有方向的。但在这里有点不同,我们称形式上维度为 1 × 1 1\times 1 1×1 的量为标量,形式上维度为 1 × n 1\times n 1×n 的量为行向量, 形式上维度为 n × 1 n\times 1 n×1 的量为列向量。比如我们记标量为 x x x,向量 x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=\left [ x_1,x_2,\cdots,x_n\right ]^T x =[x1?,x2?,?,xn?]T

然后我们再简单说说矩阵和向量的关系,形式上维度为 n × m n\times m n×m 的量称为矩阵,这里并不要求 n n n m m m 都大于1,这也就说明了其实向量也可以看成一种矩阵。此外,矩阵也可以看成向量,比如我们有矩阵 X = [ x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 ] X=\begin{bmatrix} x_1& x_2 & x_3\\ x_4& x_5& x_6\\ x_7 & x_8&x_9 \end{bmatrix} X= ?x1?x4?x7??x2?x5?x8??x3?x6?x9?? ?,令 α ? i \vec{\alpha}_i α i?为矩阵 X X X 的第 i i i 列,则矩阵 X X X 可以写成列向量组 X = [ α ? 1 , α ? 2 , α ? 3 ] X=[\vec{\alpha}_1,\vec{\alpha}_2,\vec{\alpha}_3] X=[α 1?,α 2?,α 3?] 的形式;相应地,如果令 β ? i \vec{\beta}_i β ?i?为矩阵 X X X 的第 i i i 行,则矩阵 X X X 可以写成行向量组 X = [ β ? 1 , β ? 2 , β ? 3 ] T X=[\vec{\beta}_1,\vec{\beta}_2,\vec{\beta}_3]^T X=[β ?1?,β ?2?,β ?3?]T 的形式

下面考虑如下的一个函数
f u n c t i o n ( i n p u t ) function( input) function(input)针对 f u n c t i o n function function 的类型、 i n p u t input input 的类型,我们可以将这个函数 f u n c i o n funcion funcion 分为不同的种类。

f u n c t i o n function function 是一个标量

f u n c t i o n function function是一个实值标量函数,用字母 f f f 表示。根据 i n p u t input input 的类型,我们又可以做如下的划分:

i n p u t input input 是标量

f u n t i o n funtion funtion 的输入 i n p u t input input 是标量。用字母 x x x 。比如 f ( x ) = x + 1 f(x)=x+1 f(x)=x+1 x ∈ R x\in\mathbb{R} xR f ( x ) f(x) f(x) 的结果是个取决于 x x x 的值的标量

i n p u t input input 是向量

f u n t i o n funtion funtion 的输入 i n p u t input input 是向量。用 x ? \vec{x} x 表示或者粗体小写字母 x \boldsymbol{x} x 表示,如果不做特殊说明,我们默认 x ? \vec{x} x n n n 维列向量,即 x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=\left [ x_1,x_2,\cdots,x_n\right ]^T x =[x1?,x2?,?,xn?]T,比如设 x ? = [ x 1 , x 2 , x 3 ] T \vec{x}=\left[ x_1,x_2, x_3\right]^T x =[x1?,x2?,x3?]T,且有 f ( x ? ) = a 1 x 1 2 + a 2 x 2 2 + a 3 x 3 2 + a 4 x 1 x 2 f(\vec{x})=a_1x_1^2+a_2x_2^2+a_3x_3^2+a_4x_1x_2 f(x )=a1?x12?+a2?x22?+a3?x32?+a4?x1?x2?,其中 x i x_i xi? a i a_i ai? ∈ R \in\mathbb{R} R

i n p u t input input 是矩阵

f u n t i o n funtion funtion 的输入 i n p u t input input 是矩阵。用 X X X 表示,比如这设 X 3 × 2 = ( x i j ) i = 1 , j = 1 3 , 2 \boldsymbol{X}_{3\times2}=(x_{ij})_{i=1,j=1}^{3,2} X3×2?=(xij?)i=1,j=13,2?,且有 f ( X ) = a 1 x 11 2 + a 2 x 12 2 + a 3 x 21 2 + a 4 x 22 2 + a 5 x 31 2 + a 6 x 32 2 \begin{aligned}f(\boldsymbol{X})&=a_1x_{11}^2+a_2x_{12}^2+a_3x_{21}^2+a_4x_{22}^2+a_5x_{31}^2+a_6x_{32}^2\end{aligned} f(X)?=a1?x112?+a2?x122?+a3?x212?+a4?x222?+a5?x312?+a6?x322??其中 x i x_i xi? a i a_i ai? ∈ R \in\mathbb{R} R

f u n c t i o n function function 是一个向量

f u n c t i o n function function 是一个向量时,我们称 f u n c t i o n function function 是一个实向量函数,用 f ? \vec{f} f ? 或者粗体小写字母 f \boldsymbol{f} f 表示。

含义:实向量函数 f ? \vec{f} f ? 是由若干个标量函数 f f f 组成的一个向量。

同样地,根据变元 i n p u t input input 的类型可以分类为如下三种:

i n p u t input input 是标量

例如: f ? 3 × 1 ( x ) = [ f 1 ( x ) f 2 ( x ) f 3 ( x ) ] = [ x + 1 2 x + 1 3 x 2 + 1 ] \vec{f}_{3\times1}(x)=\begin{bmatrix}f_1(x)\\f_2(x)\\f_3(x)\end{bmatrix}=\begin{bmatrix}x+1\\2x+1\\3x^2+1\end{bmatrix} f ?3×1?(x)= ?f1?(x)f2?(x)f3?(x)? ?= ?x+12x+13x2+1? ?其中 x ∈ R x\in\mathbb{R} xR,即 x x x 是标量

i n p u t input input 是向量

例如:设 x ? = [ x 1 , x 2 , x 3 ] T \vec{x}=[x_1,x_2,x_3]^T x =[x1?,x2?,x3?]T,且有

f ? ( x ? ) = [ f 1 ( x ? ) f 2 ( x ? ) f 3 ( x ? ) ] = [ x 1 + x 2 + x 3 x 1 2 + 2 x 2 + 2 x 3 x 1 x 2 + x 2 + x 3 ] \begin{aligned}\vec{f}(\vec{x})=\begin{bmatrix}f_1(\vec{x})\\f_2(\vec{x})\\f_3(\vec{x})\end{bmatrix}=\begin{bmatrix}x_1+x_2+x_3\\x_1^2+2x_2+2x_3\\x_1x_2+x_2+x_3\end{bmatrix}\end{aligned} f ?(x )= ?f1?(x )f2?(x )f3?(x )? ?= ?x1?+x2?+x3?x12?+2x2?+2x3?x1?x2?+x2?+x3?? ??其中 x ∈ R x\in\mathbb{R} xR,向量 x ? ∈ R 3 \vec{x}\in\mathbb{R}^3 x R3

i n p u t input input 是矩阵

例如:设 X 3 × 2 = ( x i j ) i = 1 , j = 1 3 , 2 {X}_{3\times2}=(x_{ij})_{i=1,j=1}^{3,2} X3×2?=(xij?)i=1,j=13,2?,且有 f ? 3 × 1 ( X ) = [ f 1 ( X ) f 2 ( X ) f 3 ( X ) ] = [ x 11 + x 12 + x 21 + x 22 + x 31 + x 32 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 + x 11 x 12 2 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 + x 11 x 12 ] \begin{aligned}\left.\vec{f}_{3\times1}(X)=\begin{bmatrix}f_1(X)\\f_2(X)\\f_3(X)\end{bmatrix}=\left[\begin{array}{c}x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}\\x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}+x_{11}x_{12}\\2x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}+x_{11}x_{12}\end{array}\right.\right]\end{aligned} f ?3×1?(X)= ?f1?(X)f2?(X)f3?(X)? ?= ?x11?+x12?+x21?+x22?+x31?+x32?x11?+x12?+x21?+x22?+x31?+x32?+x11?x12?2x11?+x12?+x21?+x22?+x31?+x32?+x11?x12?? ??其中 x i j x_{ij} xij? ∈ R \in\mathbb{R} R

f u n c t i o n function function 是一个矩阵

如果 f u n c t i o n function function 是一个矩阵我们称 f u n c t i o n function function 是一个实矩阵函数,可以用大写字母 F F F 表示。

含义 F F F 是由若干个 f f f 组成的一个矩阵。

同样地,根据变元 i n p u t input input 的类型可以分类为如下三种:

i n p u t input input 是标量

例如:
F 3 × 2 ( x ) = [ f 11 ( x ) f 12 ( x ) f 21 ( x ) f 22 ( x ) f 31 ( x ) f 32 ( x ) ] = [ x + 1 2 x + 2 x 2 + 1 2 x 2 + 1 x 3 + 1 2 x 3 + 1 ] {F}_{3\times2}(x)=\begin{bmatrix}f_{11}(x)&f_{12}(x)\\f_{21}(x)&f_{22}(x)\\f_{31}(x)&f_{32}(x)\end{bmatrix}=\begin{bmatrix}x+1&2x+2\\x^2+1&2x^2+1\\x^3+1&2x^3+1\end{bmatrix} F3×2?(x)= ?f11?(x)f21?(x)f31?(x)?f12?(x)f22?(x)f32?(x)? ?= ?x+1x2+1x3+1?2x+22x2+12x3+1? ?其中 f i j f_{ij} fij? 都是标量函数, x ∈ R x\in\mathbb{R} xR

i n p u t input input 是向量

例如:设 x ? = [ x 1 , x 2 , x 3 ] T \vec{x}=[x_1,x_2,x_3]^T x =[x1?,x2?,x3?]T
F 3 × 2 ( x ? ) = [ f 11 ( x ? ) f 12 ( x ? ) f 21 ( x ? ) f 22 ( x ? ) f 31 ( x ? ) f 32 ( x ? ) ] = [ 2 x 1 + x 2 + x 3 2 x 1 + 2 x 2 + x 3 2 x 1 + 2 x 2 + x 3 x 1 + 2 x 2 + x 3 2 x 1 + x 2 + 2 x 3 x 1 + 2 x 2 + 2 x 3 ] \begin{aligned}{F}_{3\times2}(\vec{x})=\begin{bmatrix}f_{11}(\vec{x})&f_{12}(\vec{x})\\f_{21}(\vec{x})&f_{22}(\vec{x})\\f_{31}(\vec{x})&f_{32}(\vec{x})\end{bmatrix}=\begin{bmatrix}2x_1+x_2+x_3&2x_1+2x_2+x_3\\2x_1+2x_2+x_3&x_1+2x_2+x_3\\2x_1+x_2+2x_3&x_1+2x_2+2x_3\end{bmatrix}\end{aligned} F3×2?(x )= ?f11?(x )f21?(x )f31?(x )?f12?(x )f22?(x )f32?(x )? ?= ?2x1?+x2?+x3?2x1?+2x2?+x3?2x1?+x2?+2x3??2x1?+2x2?+x3?x1?+2x2?+x3?x1?+2x2?+2x3?? ??其中 f i j f_{ij} fij? 都是 i n p u t input input 为标量的函数, x k ∈ R x_{k}\in\mathbb{R} xk?R

i n p u t input input 是矩阵

F 3 × 2 ( X ) = [ f 11 ( X ) f 12 ( X ) f 21 ( X ) f 22 ( X ) f 31 ( X ) f 32 ( X ) ] = [ x 11 + x 12 + x 21 + x 22 + x 31 + x 32 2 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 3 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 4 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 5 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 6 x 11 + x 12 + x 21 + x 22 + x 31 + x 32 ] \begin{aligned} F_{3\times2}({X})& =\begin{bmatrix}f_{11}({X})&f_{12}({X})\\f_{21}({X})&f_{22}({X})\\f_{31}({X})&f_{32}({X})\end{bmatrix} \\ &\left.=\left[\begin{array}{ll}x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}&2x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}\\3x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}&4x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}\\5x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}&6x_{11}+x_{12}+x_{21}+x_{22}+x_{31}+x_{32}\end{array}\right.\right] \end{aligned} F3×2?(X)?= ?f11?(X)f21?(X)f31?(X)?f12?(X)f22?(X)f32?(X)? ?= ?x11?+x12?+x21?+x22?+x31?+x32?3x11?+x12?+x21?+x22?+x31?+x32?5x11?+x12?+x21?+x22?+x31?+x32??2x11?+x12?+x21?+x22?+x31?+x32?4x11?+x12?+x21?+x22?+x31?+x32?6x11?+x12?+x21?+x22?+x31?+x32?? ??其中 f i j f_{ij} fij? 都是 i n p u t input input 为矩阵的函数, x k m ∈ R x_{km}\in\mathbb{R} xkm?R

实际上,我们仍然可以定义维度更高的矩阵,这个时候的形式就不再局限于以上九种,但再此不做赘述。

1.2 矩阵求导的本质

根据求导的自变量和因变量是标量,向量还是矩阵,我们有9种可能的矩阵求导定义,如下:

f u n c t i o n / i n p u t function/input function/input标量形式的 i n p u t input input向量形式的 i n p u t input input矩阵形式的 i n p u t input input
标量形式的 f u n c t i o n function function f ( x ) f(x) f(x) f ( x ? ) f(\vec{x}) f(x ) f ( X ) f(X) f(X)
向量形式的 f u n c t i o n function function f ? ( x ) \vec{f}(x) f ?(x) f ? ( x ? ) \vec{f}(\vec{x}) f ?(x ) f ? ( X ) \vec{f}(X) f ?(X)
矩阵形式的 f u n c t i o n function function F ( x ) F(x) F(x) F ( x ? ) F(\vec{x}) F(x ) F ( X ) F(X) F(X)

我们在高等数学中,对于如下的多元函数: f ( x 1 , x 2 , x 3 ) = x 1 2 + x 1 x 2 + x 2 x 3 f(x_1,x_2,x_3)=x_1^2+x_1x_2+x_2x_3 f(x1?,x2?,x3?)=x12?+x1?x2?+x2?x3?我们可以求出 f f f x 1 , x 2 , x 3 x_1,x_2,x_3 x1?,x2?,x3?的偏导数: { ? f ? x 1 = 2 x 1 + x 2 ? f ? x 2 = x 1 + x 3 ? f ? x 3 = x 2 \left.\left\{\begin{aligned}\frac{\partial f}{\partial x_1}&=2x_1+x_2\\\\\frac{\partial f}{\partial x_2}&=x_1+x_3\\\\\frac{\partial f}{\partial x_3}&=x_2\end{aligned}\right.\right. ? ? ???x1??f??x2??f??x3??f??=2x1?+x2?=x1?+x3?=x2??这个时候我们会想:如果我们将每个变元 x 1 , x 2 , x 3 x_1,x_2,x_3 x1?,x2?,x3?看成是一个列向量 x ? = ( x 1 , x 2 , x 3 ) T \vec{x}=(x_1,x_2,x_3)^T x =(x1?,x2?,x3?)T,那么我们就能够将函数 f f f 关于向量 x ? \vec{x} x 的导数表述如下: ? f ? x ? 3 × 1 = [ ? f ? x 1 ? f ? x 2 ? f ? x 3 ] = [ 2 x 1 + x 2 x 1 + x 3 x 2 ] \frac{\partial f}{\partial \vec{x}_{3\times1}}=\begin{bmatrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2}\\ \frac{\partial f}{\partial x_3} \end{bmatrix}\left.=\left[\begin{array}{c}2x_1+x_2\\x_1+x_3\\x_2\end{array}\right.\right] ?x 3×1??f?= ??x1??f??x2??f??x3??f?? ?= ?2x1?+x2?x1?+x3?x2?? ?

也就是说,上述过程便是一个标量函数对向量求导的例子。实际上,矩阵求导本质 f u n c t i o n function function 中的每个标量函数 f f f 分别对变元中的每个标量元素逐个求偏导,只不过将结果写成了向量或者矩阵形式而已。

上述例子的向量是列向量,那么自然就会有疑问,我们能不能用标量函数对行向量求导数呢?答案当然是肯定的,其形式如下所示: ? f ( x ) ? x ? 3 × 1 T = [ ? f ? x 1 , ? f ? x 2 , ? f ? x 3 ] = [ 2 x 1 + x 2 , x 1 + x 3 , x 2 ] \frac{\partial f(\boldsymbol{x})}{\partial\vec{x}_{3\times1}^T}=\left[\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\frac{\partial f}{\partial x_3}\right]=[2x_1+x_2,x_1+x_3,x_2] ?x 3×1T??f(x)?=[?x1??f?,?x2??f?,?x3??f?]=[2x1?+x2?,x1?+x3?,x2?]

如果 f u n c t i o n function function 中有 m m m 个 标量函数 f f f ,变元 i n p u t input input 中有 n n n 个标量元素,那么,每个对变元中的每个元素逐个求偏导后,我们就会产生 m × n m \times n m×n 个结果。我们已经知道,矩阵求导的本质只是把标量求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是这样也有问题,在我们机器学习算法法优化过程中,如果行向量或者列向量随便写,那么结果就不唯一或者出错,那么如何解决这个问题呢?实际上,我们只需要一开始做一个规定,然后后面的运算都遵守这个规定即可,这便是我们接下来要说的内容

1.3 矩阵求导的布局形式

让我们回顾一下上一张关于不同形式求导数的表格:

f u n c t i o n / i n p u t function/input function/input标量形式的 i n p u t input input向量形式的 i n p u t input input矩阵形式的 i n p u t input input
标量形式的 f u n c t i o n function function f ( x ) f(x) f(x) f ( x ? ) f(\vec{x}) f(x ) f ( X ) f(X) f(X)
向量形式的 f u n c t i o n function function f ? ( x ) \vec{f}(x) f ?(x) f ? ( x ? ) \vec{f}(\vec{x}) f ?(x ) f ? ( X ) \vec{f}(X) f ?(X)
矩阵形式的 f u n c t i o n function function F ( x ) F(x) F(x) F ( x ? ) F(\vec{x}) F(x ) F ( X ) F(X) F(X)

下面以表格中标量对向量或矩阵求导,向量或矩阵对标量求导,以及向量对向量求导这5种情况为例来看看矩阵求导的布局形式到底是个什么东西

这里先给出一个结论,矩阵求导有两种布局,分别是分子布局(numerator layout)和分母布局(denominator layout)。首先我们先粗略的给出两种布局的解释,并以该解释为基础,再不加证明地给出各形式求导的结果以比较不同布局形式的特点

分子布局:就是分子是列向量形式,分母是行向量形式,如前面提到的例子: ? f ? x ? 3 × 1 = [ ? f ? x 1 ? f ? x 2 ? f ? x 3 ] = [ 2 x 1 + x 2 x 1 + x 3 x 2 ] \frac{\partial f}{\partial \vec{x}_{3\times1}}=\begin{bmatrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2}\\ \frac{\partial f}{\partial x_3} \end{bmatrix}\left.=\left[\begin{array}{c}2x_1+x_2\\x_1+x_3\\x_2\end{array}\right.\right] ?x 3×1??f?= ??x1??f??x2??f??x3??f?? ?= ?2x1?+x2?x1?+x3?x2?? ?式。如果这里的 f u n t i o n funtion funtion 是实向量函数 f ? 2 × 1 \vec{f}_{2\times1} f ?2×1?的话,结果就是 2 × 3 2\times3 2×3 的矩阵: ? f ? 2 × 1 ( x ? ) ? x ? 3 × 1 T = [ ? f 1 ? x 1 ? f 1 ? x 2 ? f 1 ? x 3 ? f 2 ? x 1 ? f 2 ? x 2 ? f 2 ? x 3 ] 2 × 3 \begin{align}\frac{\partial\vec {f}_{2\times1}(\vec{x})}{\partial\vec{x}_{3\times1}^T}=\begin{bmatrix}\frac{\partial f_1}{\partial x_1}&\frac{\partial f_1}{\partial x_2}&\frac{\partial f_1}{\partial x_3}\\\frac{\partial f_2}{\partial x_1}&\frac{\partial f_2}{\partial x_2}&\frac{\partial f_2}{\partial x_3}\end{bmatrix}_{2\times3}\end{align} ?x 3×1T??f ?2×1?(x )?=[?x1??f1???x1??f2????x2??f1???x2??f2????x3??f1???x3??f2???]2×3???相应地我们可以推广到实向量函数 f ? m × 1 \vec{f}_{m\times1} f ?m×1? m m m 维列向量,向量 x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=[x_1,x_2,\cdots,x_n]^T x =[x1?,x2?,?,xn?]T n n n 维列向量的形式,则结果布局的形式为 m × n m\times n m×n

分母布局,就是分母是列向量形式,分子是行向量形式,如上述例子中的 ? f ( x ) ? x ? 3 × 1 T = [ ? f ? x 1 , ? f ? x 2 , ? f ? x 3 ] = [ 2 x 1 + x 2 , x 1 + x 3 , x 2 ] \frac{\partial f(\boldsymbol{x})}{\partial\vec{x}_{3\times1}^T}=\left[\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\frac{\partial f}{\partial x_3}\right]=[2x_1+x_2,x_1+x_3,x_2] ?x 3×1T??f(x)?=[?x1??f?,?x2??f?,?x3??f?]=[2x1?+x2?,x1?+x3?,x2?]是实向量函数 f ? 2 × 1 \vec{f}_{2\times1} f ?2×1?的话,结果就是 3 × 2 3\times2 3×2 的矩阵: ? f ? 2 × 1 T ( x ? ) ? x ? 3 × 1 = [ ? f 1 ? x 1 ? f 2 ? x 1 ? f 1 ? x 2 ? f 2 ? x 2 ? f 1 ? x 3 ? f 2 ? x 3 ] 3 × 2 \begin{align}\frac{\partial\vec{f}_{2\times1}^T(\vec{x})}{\partial\vec{x}_{3\times1}}=\begin{bmatrix}\frac{\partial f_1}{\partial x_1}&\frac{\partial f_2}{\partial x_1}\\\frac{\partial f_1}{\partial x_2}&\frac{\partial f_2}{\partial x_2}\\\frac{\partial f_1}{\partial x_3}&\frac{\partial f_2}{\partial x_3}\end{bmatrix}_{3\times2}\end{align} ?x 3×1??f ?2×1T?(x )?= ??x1??f1???x2??f1???x3??f1????x1??f2???x2??f2???x3??f2??? ?3×2???相应地我们可以推广到实向量函数 f ? m × 1 \vec{f}_{m\times1} f ?m×1? m m m 维列向量,向量 x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=[x_1,x_2,\cdots,x_n]^T x =[x1?,x2?,?,xn?]T n n n 维列向量的形式,则上述结果布局的形式就会变为为 n × m n\times m n×m

1.3.1 向量对标量函数的导数

即向量变元的实值标量函数 f ( x ? ) f(\vec{x}) f(x ) , x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=[x_1,x_2,\cdots,x_n]^T x =[x1?,x2?,?,xn?]T

有两种情况:

(1):行向量偏导形式(又称行偏导向量形式)

D ? x ? f ( x ) = ? f ( x ? ) ? x ? T = [ ? f ? x 1 , ? f ? x 2 , ? ? , ? f ? x n ] \begin{align}\operatorname{D}_{\vec{x}}f(\boldsymbol{x})=\frac{\partial f(\vec{x})}{\partial\vec{x}^T}=\left[\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\cdots,\frac{\partial f}{\partial x_n}\right]\end{align} Dx ?f(x)=?x T?f(x )?=[?x1??f?,?x2??f?,?,?xn??f?]??

(2):梯度向量形式(又称列向量偏导形式、列偏导向量形式)

? x ? f ( x ? ) = ? f ( x ? ) ? x ? = [ ? f ? x 1 , ? f ? x 2 , ? ? , ? f ? x n ] T \begin{align}\nabla_{\vec{x}}f(\vec{x})=\frac{\partial f(\vec{x})}{\partial\vec{x}}=\left[\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\cdots,\frac{\partial f}{\partial x_n}\right]^T\end{align} ?x ?f(x )=?x ?f(x )?=[?x1??f?,?x2??f?,?,?xn??f?]T??

不难发现,上述的两种形式互为转置

1.3.2 矩阵对标量函数的导数

即矩阵变元的实值标量函数 f ( X ) f(X) f(X) , X m × n = ( x i j ) i = 1 , j = 1 m , n \boldsymbol{X}_{m\times n}=(x_{ij})_{i=1,j=1}^{m,n} Xm×n?=(xij?)i=1,j=1m,n?

为了后续叙述的便利,先介绍一个符号 v e c ( X ) \mathbf{vec}( X) vec(X) ,其作用是将矩阵 X X X 按列堆栈来向量化,向量化后的结果是产生了一个新的列向量,其实就是把矩阵 X X X 的第 1 列,第 2 列,直到第 n n n 列取出来,然后按顺序组成一个列向量,即:
v e c ( X ) = [ x 11 , x 21 , ? ? , x m 1 , x 12 , x 22 , ? ? , x m 2 , ? ? , x 1 n , x 2 n , ? ? , x m n ] T \begin{align} \mathbf{vec}(\boldsymbol{X})=[x_{11},x_{21},\cdots,x_{m1},x_{12},x_{22},\cdots,x_{m2},\cdots,x_{1n},x_{2n},\cdots,x_{mn}]^T\end{align} vec(X)=[x11?,x21?,?,xm1?,x12?,x22?,?,xm2?,?,x1n?,x2n?,?,xmn?]T??

(1):行向量偏导形式(又称行偏导向量形式)

即先把矩阵变元 X X X v e c ( X ) \mathbf{vec}(X) vec(X)向量化,转换成向量变元,再对该向量变元使用公式(3)可以得到 D v e c X f ( X ) = ? f ( X ) ? v e c T ( X ) = [ ? f ? x 11 , ? f ? x 21 , ? ? , ? f ? x m 1 , ? f ? x 12 , ? f ? x 22 , ? ? , ? f ? x m 2 , ? ? , ? f ? x 1 n , ? f ? x 2 n , ? ? , ? f ? x m n ] \begin{align} \mathrm{D}_{\mathbf{vec}{X}}f({X})& =\frac{\partial f({X})}{\partial\mathbf{vec}^T({X})} \\ \notag &=\left[\frac{\partial f}{\partial x_{11}},\frac{\partial f}{\partial x_{21}},\cdots,\frac{\partial f}{\partial x_{m1}},\frac{\partial f}{\partial x_{12}},\frac{\partial f}{\partial x_{22}},\cdots,\frac{\partial f}{\partial x_{m2}},\cdots,\frac{\partial f}{\partial x_{1n}},\frac{\partial f}{\partial x_{2n}},\cdots,\frac{\partial f}{\partial x_{mn}}\right] \end{align} DvecX?f(X)?=?vecT(X)?f(X)?=[?x11??f?,?x21??f?,?,?xm1??f?,?x12??f?,?x22??f?,?,?xm2??f?,?,?x1n??f?,?x2n??f?,?,?xmn??f?]??

(2) J a c o b i a n \mathbf{Jacobian} Jacobian 矩阵形式

即先把矩阵变元 X X X 进行转置(分母位置转置),再对转置后的每个位置的元素逐个求偏导,结果布局和转置布局一样。即因为矩阵变元 X X X m × n m\times n m×n 维的,所以结果布局是 n × m n\times m n×m 维的,即 D ? X f ( X ) = ? f ( X ) ? X m × n T = [ ? f ? x 11 ? f ? x 21 ? ? f ? x m 1 ? f ? x 12 ? f ? x 22 ? ? f ? x m 2 ? ? ? ? ? f ? x 1 n ? f ? x 2 n ? ? f ? x m n ] n × m \begin{align} \operatorname{D}_{{X}}f({X})& =\frac{\partial f({X})}{\partial{X}_{m\times n}^T} \\ \notag &=\begin{bmatrix}\frac{\partial f}{\partial x_{11}}&\frac{\partial f}{\partial x_{21}}&\cdots&\frac{\partial f}{\partial x_{m1}}\\\frac{\partial f}{\partial x_{12}}&\frac{\partial f}{\partial x_{22}}&\cdots&\frac{\partial f}{\partial x_{m2}}\\\vdots&\vdots&\vdots&\vdots\\\frac{\partial f}{\partial x_{1n}}&\frac{\partial f}{\partial x_{2n}}&\cdots&\frac{\partial f}{\partial x_{mn}}\end{bmatrix}_{n\times m} \end{align} DX?f(X)?=?Xm×nT??f(X)?= ??x11??f??x12??f???x1n??f???x21??f??x22??f???x2n??f????????xm1??f??xm2??f???xmn??f?? ?n×m???

(3):梯度向量形式(又称列向量偏导形式、列偏导向量形式,这个用到的比较多)

即先把矩阵变元 X X X v e c ( X ) \mathbf{vec}(X) vec(X)向量化,转换成向量变元,再对该向量变元使用公式(4),即分子位置转置,可以得到 ? v e c X f ( X ) = ? f ( X ) ? v e c ( X ) = [ ? f ? x 11 , ? f ? x 21 , ? ? , ? f ? x m 1 , ? f ? x 12 , ? f ? x 22 , ? ? , ? f ? x m 2 , ? ? , ? f ? x 1 n , ? f ? x 2 n , ? ? , ? f ? x m n ] T \begin{align} \nabla_{\mathbf{vec}{X}}f({X})& =\frac{\partial f({X})}{\partial\mathbf{vec}({X})} \\ \notag &=\left[\frac{\partial f}{\partial x_{11}},\frac{\partial f}{\partial x_{21}},\cdots,\frac{\partial f}{\partial x_{m1}},\frac{\partial f}{\partial x_{12}},\frac{\partial f}{\partial x_{22}},\cdots,\frac{\partial f}{\partial x_{m2}},\cdots,\frac{\partial f}{\partial x_{1n}},\frac{\partial f}{\partial x_{2n}},\cdots,\frac{\partial f}{\partial x_{mn}}\right]^T \end{align} ?vecX?f(X)?=?vec(X)?f(X)?=[?x11??f?,?x21??f?,?,?xm1??f?,?x12??f?,?x22??f?,?,?xm2??f?,?,?x1n??f?,?x2n??f?,?,?xmn??f?]T??即得到的结果是一个梯度向量(列向量)

(4):梯度矩阵形式

直接对矩阵变元 X X X 的每个位置的元素逐个求偏导,结果布局和矩阵变元的维度一样。即矩阵变元 X X X m × n m\times n m×n 维的,所以结果布局也是 m × n m\times n m×n 维的,即 ? X f ( X ) = ? f ( X ) ? X m × n = [ ? f ? x 11 ? f ? x 12 ? ? f ? x 1 m ? f ? x 21 ? f ? x 22 ? ? f ? x 2 m ? ? ? ? ? f ? x m 1 ? f ? x m 2 ? ? f ? x m n ] m × n \begin{align} \nabla_{{X}}f({X})& =\frac{\partial f({X})}{\partial{X}_{m\times n}} \\ \notag &=\begin{bmatrix}\frac{\partial f}{\partial x_{11}}&\frac{\partial f}{\partial x_{12}}&\cdots&\frac{\partial f}{\partial x_{1m}}\\\frac{\partial f}{\partial x_{21}}&\frac{\partial f}{\partial x_{22}}&\cdots&\frac{\partial f}{\partial x_{2m}}\\\vdots&\vdots&\vdots&\vdots\\\frac{\partial f}{\partial x_{m1}}&\frac{\partial f}{\partial x_{m2}}&\cdots&\frac{\partial f}{\partial x_{mn}}\end{bmatrix}_{m\times n} \end{align} ?X?f(X)?=?Xm×n??f(X)?= ??x11??f??x21??f???xm1??f???x12??f??x22??f???xm2??f????????x1m??f??x2m??f???xmn??f?? ?m×n???

由以上的公式可以发现,对于向量变元的实值标量函数 f ( x ? ) f(\vec{x}) f(x ) , x ? = [ x 1 , x 2 , ? ? , x n ] T \vec{x}=[x_1,x_2,\cdots,x_n]^T x =[x1?,x2?,?,xn?]T,结果布局本质上有两种形式,一种是 Jacobian 矩阵(行向量) 形式,一种是梯度矩阵(列向量)形式,且这两种形式互为转置。

1.3.3 矩阵对矩阵函数的导数

即矩阵变元的实矩阵函数 F ( X ) , X m × n = ( x i j ) i = 1 , j = 1 m , n , F p × q = ( f i j ) i = 1 , j = 1 p , q F(X)\textit{,}X_{m\times n}=\left(x_{ij}\right)_{i=1,j=1}^{m,n},{F}_{p\times q}=(f_{ij})_{i=1,j=1}^{p,q} F(X),Xm×n?=(xij?)i=1,j=1m,n?,Fp×q?=(fij?)i=1,j=1p,q?

(1) J a c o b i a n \mathbf{Jacobian} Jacobian 矩阵形式

先把矩阵变元 X X X v e c \mathbf{vec} vec 向量化成一个列向量,即转换成向量变元: v e c ( X ) = [ x 11 , x 21 , ? ? , x m 1 , x 12 , x 22 , ? ? , x m 2 , ? ? , x 1 n , x 2 n , ? ? , x m n ] T \mathbf{vec}({X})=[x_{11},x_{21},\cdots,x_{m1},x_{12},x_{22},\cdots,x_{m2},\cdots,x_{1n},x_{2n},\cdots,x_{mn}]^T vec(X)=[x11?,x21?,?,xm1?,x12?,x22?,?,xm2?,?,x1n?,x2n?,?,xmn?]T然后再把实矩阵函数 F ( X ) F(X) F(X) 也按 v e c \mathbf{vec} vec 向量化成一个列向量,即转换成实向量函数: v e c ( F ( X ) ) = [ f 11 ( X ) , f 21 ( X ) , ? ? , f p 1 ( X ) , f 12 ( X ) , f 22 ( X ) , ? ? , f p 2 ( X ) , ? ? , f 1 q ( X ) , f 2 q ( X ) , ? ? , f p q ( X ) ] T \begin{align} & \mathbf{vec}({F}({X})) =[f_{11}(\boldsymbol{X}),f_{21}(\boldsymbol{X}),\cdots,f_{p1}(\boldsymbol{X}),f_{12}(\boldsymbol{X}),f_{22}(\boldsymbol{X}),\cdots,f_{p2}(\boldsymbol{X}),\cdots,f_{1q}(\boldsymbol{X}),f_{2q}(\boldsymbol{X}), \cdots,f_{pq}(\boldsymbol{X})]^T \end{align} ?vec(F(X))=[f11?(X),f21?(X),?,fp1?(X),f12?(X),f22?(X),?,fp2?(X),?,f1q?(X),f2q?(X),?,fpq?(X)]T??那么我们可以利用前面的公式(1)来实现向量对向量函数的导数的行向量偏导形式,由于分子是维数是 p q × 1 pq\times 1 pq×1 的列向量,分母的维度是 1 × m n 1 \times mn 1×mn 的行向量,所以结果布局的维数是 p q × m n pq \times mn pq×mn 维的,具体公式如下表示:(由于这里的Latex显示不了,于是就用图片替代了)

在这里插入图片描述

(2):梯度矩阵形式

先把矩阵变元 X X X v e c \mathbf{vec} vec 向量化成一个列向量,即转换成向量变元: v e c ( X ) = [ x 11 , x 21 , ? ? , x m 1 , x 12 , x 22 , ? ? , x m 2 , ? ? , x 1 n , x 2 n , ? ? , x m n ] T \mathbf{vec}({X})=[x_{11},x_{21},\cdots,x_{m1},x_{12},x_{22},\cdots,x_{m2},\cdots,x_{1n},x_{2n},\cdots,x_{mn}]^T vec(X)=[x11?,x21?,?,xm1?,x12?,x22?,?,xm2?,?,x1n?,x2n?,?,xmn?]T然后再把实矩阵函数 F ( X ) F(X) F(X) 也按 v e c \mathbf{vec} vec 向量化成一个列向量,即转换成实向量函数: v e c ( F ( X ) ) = [ f 11 ( X ) , f 21 ( X ) , ? ? , f p 1 ( X ) , f 12 ( X ) , f 22 ( X ) , ? ? , f p 2 ( X ) , ? ? , f 1 q ( X ) , f 2 q ( X ) , ? ? , f p q ( X ) ] T (12) \begin{aligned} & \mathbf{vec}({F}({X})) =[f_{11}(\boldsymbol{X}),f_{21}(\boldsymbol{X}),\cdots,f_{p1}(\boldsymbol{X}),f_{12}(\boldsymbol{X}),f_{22}(\boldsymbol{X}),\cdots,f_{p2}(\boldsymbol{X}),\cdots,f_{1q}(\boldsymbol{X}),f_{2q}(\boldsymbol{X}), \cdots,f_{pq}(\boldsymbol{X})]^T \\ \tag{12} \end{aligned} ?vec(F(X))=[f11?(X),f21?(X),?,fp1?(X),f12?(X),f22?(X),?,fp2?(X),?,f1q?(X),f2q?(X),?,fpq?(X)]T?(12)那么我们可以利用前面的公式(2)来实现向量对向量函数的导数的列向量偏导形式,由于分子是维数是 1 × p q 1\times pq 1×pq 的行向量,分母的维度是 m n × 1 mn \times 1 mn×1 的列向量,所以结果布局的维数是 m n × p q mn \times pq mn×pq 维的,具体公式如下表示:(由于这里的Latex显示不了,于是就用图片替代了)

在这里插入图片描述

根据上面的计算可以发现,对于矩阵变元的实值标量函数 f ( X ) f({X}) f(X) , X m × n = ( x i j ) i = 1 , j = 1 m , n {X}_{m\times n}=(x_{ij})_{i=1,j=1}^{m,n} Xm×n?=(xij?)i=1,j=1m,n?,结果布局本质上有四种形式,第一种是 Jacobian 矩阵(行向量) 形式,第二种是梯度矩阵(列向量)形式,第三种是 Jacobian 矩阵(矩阵)形式,第四种是梯度矩阵(矩阵)形式。其中第一种和第二种的结果布局形式互为转置,第三种和第四种的结果布局形式互为转置。

矩阵变元的实向量函数 f ( X ) f(X) f(X) 、向量变元的实向量函数 f ( x ) f(x) f(x) 、向量变元的实矩阵函数 F ( x ? ) F(\vec{x}) F(x )这三个都可以看做是矩阵变元的实矩阵函数 F ( X ) F(X) F(X) ,可使用矩阵对矩阵函数的导数的形式进行计算 (因为向量可以看出一种特殊的矩阵)。

1.3.4 分子布局和分母布局的本质

说到这,其实矩阵求导的结果布局实际上就是分子的转置、向量化,分母的转置、向量化的各种组合。为了方便记忆,我们总结如下:

分子布局的本质:分子是标量、列向量、矩阵向量化后的列向量;分母是标量、列向量转置后的行向量、矩阵的转置矩阵、矩阵向量化后的列向量转置后的行向量。包含公式 (3)式、(6)式、 (7) 式和 (11) 式。一句话就是:分子是列向量,分母是行向量

分母布局的本质:分子是标量、列向量转置后的行向量、矩阵向量化后的列向量转置后的行向量;分母是标量、列向量、矩阵自己、矩阵向量化后的列向量。包含公式(4) 式、(8)式、(9)式和 (12) 式。一句话就是:分子是行向量,分母是列向量

一般情况下,我们都想向量函数 f ? \vec{f} f ? 和 向量变元 x ? \vec{x} x 都看成列向量,如果二者都不做转置直接求 ? f ? ? x ? \frac{\partial \vec{f}}{\partial \vec{x}} ?x ?f ??,理论上是不够严谨的,为此我们需要对其中一个进行转置,我们可以用一句话来总结:哪个位置不转置就是哪个位置的布局。比如分母不转置,就是分母布局;分子不转置,就是分子布局。

最后用一个表格将这次学习的内容做一个总结:

分子/分母标量函数 f f f(列)向量函数 f ? = [ f 1 , ? ? , f m ] T \vec{f}=[f_1,\cdots,f_m]^T f ?=[f1?,?,fm?]T矩阵函数 F = ( f i j ) i = 1 , j = 1 p , q F=(f_{ij})_{i=1,j=1}^{p,q} F=(fij?)i=1,j=1p,q?
标量 x x x高等数学中的导数分子布局 m m m 维列向量 ? f ? ? x \frac{\partial \vec{f}}{\partial x} ?x?f ??(默认形式)
分母布局: n n n 维行向量 ? f ? T ? x \frac{\partial \vec{f}^T}{\partial x} ?x?f ?T?
分子布局 p × q p \times q p×q 矩阵 ? F ? x \frac{\partial F}{\partial x} ?x?F? (默认形式)
分母布局: q × p q \times p q×p 矩阵 ? F T ? x \frac{\partial F^T}{\partial x} ?x?FT?
(列)向量 x ? = [ x 1 , ? ? , x n ] T \vec{x}=[x_1,\cdots,x_n]^T x =[x1?,?,xn?]T分子布局: n n n 维行向量 ? f ? x ? \frac{\partial{f}}{\partial \vec{x}} ?x ?f?
分母布局 n n n 维列向量 ? f ? ? x ? T \frac{\partial \vec{f}}{\partial \vec{x}^T} ?x T?f ??(默认形式)
分子布局: m × n m \times n m×n 维雅克比矩阵 ? f ? ? x T \frac{\partial \vec{f}}{\partial x^T} ?xT?f ??
分母布局: n × m n \times m n×m 维梯度矩阵 ? f ? T ? x \frac{\partial \vec{f}^T}{\partial x} ?x?f ?T?
矩阵 X = ( x i j ) i = 1 , j = 1 m , n X=(x_{ij})_{i=1,j=1}^{m,n} X=(xij?)i=1,j=1m,n?分子布局: n × m n \times m n×m 维矩阵 ? f ? X T \frac{\partial {f}}{\partial X^T} ?XT?f?
分母布局: n × m n \times m n×m 维梯度矩阵 ? f ? X \frac{\partial {f}}{\partial X} ?X?f? (默认形式)

以上便是矩阵求导的关于布局的内容,下一节将学习具体的矩阵求导法则以及一些典型例子

参考

矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇)

张贤达《矩阵分析与应用(第二版)》

矩阵的求导

文章来源:https://blog.csdn.net/weixin_47255403/article/details/135263422
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。