5.3向量值函数的梯度


文档摘要

5.3 向量值函数的梯度 一直以来我们讨论的都是实值函数 $f : \mathbb{R}^{n} \rightarrow \mathbb{R}$ 的偏导数和梯度,接下来我们将将此概念扩展至向量值函数(向量场)$\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}$ 的情形,其中 $n \geqslant 1, m \geqslant 1$。

5.3 向量值函数的梯度

一直以来我们讨论的都是实值函数 f : \mathbb{R}^{n} \rightarrow \mathbb{R} 的偏导数和梯度,接下来我们将将此概念扩展至向量值函数(向量场)\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m} 的情形,其中 n \geqslant 1, m \geqslant 1

给定向量值函数 \boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m} 和向量 \boldsymbol{x} = [x_{1}, \dots, x_{n}]^{\top}\in \mathbb{R}^{n},则该函数的函数值可以写为

\boldsymbol{f}(\boldsymbol{x}) = \begin{bmatrix} f_{1}(\boldsymbol{x})\\ \vdots\\ f_{m}(\boldsymbol{x})\\ \end{bmatrix} \in \mathbb{R}^{m}.\tag{5.54}

这样写可以让我们将向量值函数 \boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m} 看成一个全部由实值函数 f_{i}: \mathbb{R}^{n} \rightarrow \mathbb{R} 构成的向量 [f_{1}, \dots, f_{m}]^{\top},而对于每一个 f_{i} 我们可以不加修改的直接应用 5.2 节中的所有微分法则。这样一来,向量值函数对变元 x_{i} \in \mathbb{R}, i=1, \dots, n 的偏导数由下式给出

\frac{ \partial \boldsymbol{f} }{ \partial x_{i} } = \begin{bmatrix} \displaystyle \frac{ \partial f_{1} }{ \partial x_{i} } \\ \vdots\\ \displaystyle \frac{ \partial f_{m} }{ \partial x_{i} } \end{bmatrix} = \begin{bmatrix} \displaystyle \lim_{ h \to 0 } \frac{f_{1}(x_{1}, \dots, x_{i-1}, x_{i}+h, x_{i+1}, x_{n}) - f_{1}(\boldsymbol{x})}{h}\\ \vdots\\ \displaystyle \lim_{ h \to 0 } \frac{f_{m}(x_{1}, \dots, x_{i-1}, x_{i}+h, x_{i+1}, x_{n}) - f_{m}(\boldsymbol{x})}{h}\\ \end{bmatrix} \in \mathbb{R}^{m}\tag{5.55}

(5.40) 中我们了解到函数 \boldsymbol{f} 对向量求导得到的是由一系列偏导数组合得到的行向量。在 (5.55) 中,每个偏导数 \displaystyle \frac{ \partial \boldsymbol{f}(\boldsymbol{x}) }{ \partial x_{i} } 自己就是一个列向量,于是我们可以将它们组合起来得到函数 \boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m} 对向量 \boldsymbol{x} \in \mathbb{R}^{n} 的梯度:

\begin{align} \frac{\mathrm{d}\boldsymbol{f}}{\mathrm{d}\boldsymbol{x}} &= \begin{bmatrix} {\color{blue} \displaystyle \frac{ \partial \boldsymbol{f}(x) }{ \partial x_{1} }} & \cdots & \color{orange} \displaystyle \frac{ \partial \boldsymbol{f}(x) }{ \partial x_{n} } \end{bmatrix} \\[0.2em] &= \begin{bmatrix} \color{blue} \displaystyle \frac{ \partial f_{1}(\boldsymbol{x}) }{ \partial x_{1} } &\cdots & \color{orange} \displaystyle \frac{ \partial f_{1}(\boldsymbol{x}) }{ \partial x_{n} } \\ \color{blue} \vdots & \ddots & \color{orange} \vdots\\ \color{blue} \displaystyle \frac{ \partial f_{m}(\boldsymbol{x}) }{ \partial x_{1} } & \cdots & \color{orange} \displaystyle \frac{ \partial f_{m}(\boldsymbol{x}) }{ \partial x_{n} } \\ \end{bmatrix} \in \mathbb{R}^{m \times n} \end{align} \tag{5.56}

定义 5.6 (Jacobi 矩阵)

向量值函数 \boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m} 的各一阶偏微分的合集称为 Jacobi 矩阵,它的形状是 m \times n ,定义如下:

\begin{align}\boldsymbol{J} &= \nabla_{x} \boldsymbol{f} = \frac{\mathrm{d}\boldsymbol{f}(\boldsymbol{x})}{\mathrm{d}\boldsymbol{x}} = \begin{bmatrix}\displaystyle \frac{ \partial \boldsymbol{f} }{ \partial x_{1} } & \cdots & \displaystyle \frac{ \partial \boldsymbol{f} }{ \partial x_{n} } \tag{5.57}\\\end{bmatrix}\\&= \begin{bmatrix} \displaystyle \frac{ \partial f_{1}(\boldsymbol{x}) }{ \partial x_{1} } &\cdots & \displaystyle \frac{ \partial f_{1}(\boldsymbol{x}) }{ \partial x_{n} } \\\vdots & \ddots & \vdots\\\displaystyle \frac{ \partial f_{m}(\boldsymbol{x}) }{ \partial x_{1} } & \cdots & \displaystyle \frac{ \partial f_{m}(\boldsymbol{x}) }{ \partial x_{n} } \\\end{bmatrix}, \tag{5.58}\\[0.2em]&\quad \boldsymbol{x} = \begin{bmatrix}x_{1}\\\vdots\\x_{n}\end{bmatrix}, \quad J(i,j) = \frac{ \partial f_{i} }{ \partial x_{j} }. \tag{5.59} \end{align}

作为 (5.58) 的一个特例,标量值的向量变元函数 f: \mathbb{R}^{n} \rightarrow \mathbb{R}^{1} (如 \displaystyle f(\boldsymbol{x}) = \sum\limits_{i=1}^{n}x_{i})的 Jacobi 矩阵是一个行向量(形状为 1 \times n);见 (5.40)

注:本书中的微分使用 分子布局(numerator layout)。这是说函数 \boldsymbol{f} \in \mathbb{R}^{m}\boldsymbol{x} \in \mathbb{R}^{n} 的微分 \displaystyle \frac{ \mathrm{d}\boldsymbol{f} }{ \mathrm{d}\boldsymbol{x} } 得到矩阵的形状为 m \times n ——如 (4.58) —— 其中 \boldsymbol{f} 决定这矩阵的行,\boldsymbol{x} 决定矩阵的列。当然也有所谓的 分母布局(denominator layout),得到的结果是分子布局的转置。

Jacobi 矩阵将在 6.7 节中概率分布的变量变换方法中起作用,而其中的缩放大小取决于其行列式(determinant)

300

图 5.5

在 4.1 节中,我们已使用行列式计算平行四边形的面积:如果给定正方形的两边所对应的两个向量\boldsymbol{b}*_{1} = [1, 0]^{\top}* ***\boldsymbol{b}_*{2} = [0, 1]^{\top},那么它们构成的正方形的面积是

\begin{vmatrix} \text{det}\left(\begin{bmatrix} 1 & 0\\0 & 1 \end{bmatrix}\right) \end{vmatrix} = 1. \tag{5.60}

如果我们取平行四边形的两边 \boldsymbol{c}_{1} = [-2, 1]^{\top}\boldsymbol{c}_{2} = [1, 1]^{\top}(如图 5.5 所示),其面积等于下面行列式的绝对值:

\begin{vmatrix} \text{det}\left( \begin{bmatrix} -2 & 1\\1 & 1 \end{bmatrix} \right) \end{vmatrix} = |-3| = 3, \tag{5.61}

其刚好是单位正方形面积的三倍。我们可以通过测量单位正方形映射后得到的图形面积得到对应的缩放比例。如果使用线性代数的语言,我们做了一个从 (\boldsymbol{b}_{1}, \boldsymbol{b}_{2})(\boldsymbol{c}_{1}, \boldsymbol{c}_{2}) 的变量变换。在本例中,这个变换是线性的,变换本身的行列式就给出了缩放比例。

现在我们介绍两种确认这样的映射的方法。首先我们假设这个变换是线性的,这样就可以使用第二张中的内容确定它。随后我们将使用本章介绍的偏导数计算这个映射。

方法 1

为了使用线性代数的工具,我们假定 \{ \boldsymbol{b}_{1}, \boldsymbol{b}_{2} \}\{ \boldsymbol{c}_{1}, \boldsymbol{c}_{2} \}\mathbb{R}^{2} 的一个基(见 2.6.1 节),可见事实上我们做了一个从 (\boldsymbol{b}_{1}, \boldsymbol{b}_{2})(\boldsymbol{c}_{1}, \boldsymbol{c}_{2}) 的基变换,我们要找的变换矩阵就是执行这一基变换的矩阵。使用 2.7.2 节的结论,可以得到变换矩阵

\boldsymbol{J} = \begin{bmatrix}-2 & 1\\ 1 & 1\end{bmatrix}, \tag{5.62}
满足 \boldsymbol{Jb}*_{1} = \boldsymbol{c}_*{1}\boldsymbol{Jb}*_{2} = \boldsymbol{c}_*{2}。该矩阵行列式的绝对值为 |\det(\boldsymbol{J})| = 3,这就是所求的缩放参数,也即基 (\boldsymbol{c}_{1}, \boldsymbol{c}_{2}) 张成的平行四边形的面积是基 (\boldsymbol{b}_{1}, \boldsymbol{b}_{2}) 张成的平行四边形的面积的三倍。

方法 2

线性代数的方法可用于解线性函数的 Jacobi 矩阵,而对于非线性函数(在 6.7 节中涉及),我们使用一种更具一般性的方法 —— 使用偏导数。
考虑一个变量转换函数 \boldsymbol{f} : \mathbb{R}^{2} \rightarrow \mathbb{R}^{2} ,它将基 (\boldsymbol{b}_{1}, \boldsymbol{b}_{2}) 下表示的向量 \boldsymbol{x} \in \mathbb{R}^{2} 转换为基 (\boldsymbol{c}_{1}, \boldsymbol{c}_{2}) 表示下的向量 \boldsymbol{y} \in \mathbb{R}^{2},我们通过计算映射 \boldsymbol{f} 作用前后单位面积/体积的变化来确定这个映射。从这个角度出发,我们可以研究当我们稍稍改变 \boldsymbol{x} 一点后 \boldsymbol{f}(\boldsymbol{x}) 的变化,而这恰好就是 \displaystyle \frac{\mathrm{d}\boldsymbol{f}}{\mathrm{d}\boldsymbol{x}} \in \mathbb{R}^{2 \times 2}。我们可以写出 \boldsymbol{x}\boldsymbol{y} 的联系如下:

\begin{align}y_{1} &= -2x_{1} + x_{2} \tag{5.63}\\y_{2} &= x_{1} + x_{2} \tag{5.64}\end{align}
就可以容易的写出各项偏导数:

\frac{ \partial y_{1} }{ \partial x_{1} } = -2, \quad \frac{ \partial y_{1} }{ \partial x_{2} } = 1, \quad \frac{ \partial y_{2} }{ \partial x_{1} } =1, \quad \frac{ \partial y_{2} }{ \partial x_{2} } = 1\tag{5.65}

并得到表示坐标变换的 Jacobi 矩阵

\boldsymbol{J} = \begin{bmatrix}\displaystyle \frac{ \partial y_{1} }{ \partial x_{1} } & \displaystyle \frac{ \partial y_{1} }{ \partial x_{2} } \\\displaystyle \frac{ \partial y_{2} }{ \partial x_{1} } & \displaystyle \frac{ \partial y_{2} }{ \partial x_{2} }\end{bmatrix} = \begin{bmatrix}-2 & 1 \\ 1 & 1\end{bmatrix}.\tag{5.66}

如果我们处理的是线性函数,则刚刚的 Jacobi 矩阵即为所求(注意 (5.66)(5.62) 完全一样);如若不然, Jacobi 矩阵是非线性映射的局部线性近似。Jacobi 矩阵的行列式 |\boldsymbol{J}| 称为 Jabobian 行列式,它的值就是面积或体积变换前后的缩放比例,在这个例子中有 |\boldsymbol{J}| = 3

上面提到的 Jacobian 行列式和变量替换在 6.7 节中对随机变量和分布进行变换时会涉及,它们在机器学习和深度学习中的 重参数技巧(Reparametrization Trick) 中十分重要,也被称为 无穷摄动分析(Infinite Perturbation Analysis)

图5.6 (偏)导数的维度和形状

在本章讨论了函数的导数,图5.6给出它们的形状。如果f: \mathbb{R} \rightarrow \mathbb{R},其梯度只是一个标量(左上角)。如果f: \mathbb{R}^{D} \rightarrow \mathbb{R},它的梯度是一个形状为 1 \times D 的行向量(右上角)。如果\boldsymbol{f}: \mathbb{R} \rightarrow \mathbb{R}^{E},它的梯度是一个形状为 E×1 的列向量,而如果 \boldsymbol{f}: \mathbb{R}^{D} \rightarrow \mathbb{R}^{E},梯度则是一个形状为 E×D 的矩阵。

示例 5.9(向量值函数的梯度)

给定

\boldsymbol{f}(\boldsymbol{x}) = \boldsymbol{Ax}, \quad \boldsymbol{f}(\boldsymbol{x}) \in \mathbb{R}^{M}, \quad \boldsymbol{A} \in \mathbb{R}^{N}.

为了计算梯度\displaystyle \displaystyle \frac{ \mathrm{d}\boldsymbol{f} }{ \mathrm{d}\boldsymbol{x} },我们首先确定\displaystyle \displaystyle \frac{ \mathrm{d}\boldsymbol{f} }{ \mathrm{d}\boldsymbol{x} }的维数:由于\boldsymbol{f}: \mathbb{R}^{N} \rightarrow \mathbb{R}^{M},所以有 \displaystyle \displaystyle \frac{ \mathrm{d}\boldsymbol{f} }{ \mathrm{d}\boldsymbol{x} } \in \mathbb{R}^{M \times N}。为了计算梯度,我们接下来计算 \boldsymbol{f} 相对于每个变元 x_j 的偏导数

f_{i}(\boldsymbol{x}) = \sum\limits_{j=1}^{N} A_{i,j}x_{j} \implies \frac{ \partial f_{i} }{ \partial x_{j} } = A_{i,j} \tag{5.67}

知道了这些偏导数,我们就得到了梯度

\frac{ \mathrm{d}\boldsymbol{f} }{ \mathrm{d}\boldsymbol{x} } = \begin{bmatrix}\displaystyle \frac{ \partial f_{1} }{ \partial x_{1} } & \cdots & \displaystyle \frac{ \partial f_{1} }{ \partial x_{N} } \\\vdots & \ddots & \vdots\\\displaystyle \frac{ \partial f_{M} }{ \partial x_{1} } & \cdots &\displaystyle \frac{ \partial f_{M} }{ \partial x_{N } } \end{bmatrix} = \begin{bmatrix}A_{1,1} & \cdots & A_{1,N}\\\vdots & \ddots & \vdots\\A_{M,1} & \cdots & A_{M,N}\end{bmatrix} = \boldsymbol{A} \in \mathbb{R}^{M \times N}.\tag{5.68}

示例 5.10(链式法则)

考虑函数 h: \mathbb{R} \rightarrow \mathbb{R}h(t) = (f \circ g)(t),其中

\begin{align}f &: \mathbb{R}^{2} \rightarrow \mathbb{R} \tag{5.69}\\g &: \mathbb{R} \rightarrow \mathbb{R}^{2} \tag{5.70}\\f(\boldsymbol{x}) &= \exp (x_{1}, x_{2}^{2}), \tag{5.71}\\\boldsymbol{x} &= \begin{bmatrix}x_{1} \\ x_{2}\end{bmatrix} = g(t) = \begin{bmatrix}t\cos t\\t\sin t\end{bmatrix} \tag{5.72}\end{align}

计算 h 关于 t 的梯度。
因为 f:\mathbb{R}^{2}→\mathbb{R}g:\mathbb{R}\rightarrow \mathbb{R}^{2},于是我们有

\displaystyle \frac{ \partial f }{ \partial \boldsymbol{x} } \in \mathbb{R}^{1 \times 2}, \quad \displaystyle \frac{ \partial g }{ \partial t } \in \mathbb{R}^{2 \times 1}. \tag{5.73}

复合函数的梯度可通过链式法则求得:
\begin{align}\displaystyle \frac{ \mathrm{d}h }{ \mathrm{d}t } &= {\color{blue} \displaystyle \frac{ \partial f }{ \partial \boldsymbol{x} } } {\color{orange} \displaystyle \frac{ \partial \boldsymbol{x} }{ \partial t } } = {\color{blue} \begin{bmatrix}\displaystyle \frac{ \partial f }{ \partial x_{1} } & \displaystyle \frac{ \partial f }{ \partial x_{2} } \end{bmatrix} } {\color{orange} \begin{bmatrix}\displaystyle \frac{ \partial x_{1} }{ \partial t } \\ \displaystyle \frac{ \partial x_{2} }{ \partial t }\end{bmatrix} } \tag{5.74a}\\&= {\color{blue} \begin{bmatrix} \exp(x_{1}x_{2}^{2})x_{2}^{2} & 2\exp(x_{1}x_{2}^{2})x_{1}x_{2} \end{bmatrix}}{\color{orange} \begin{bmatrix}\cos t - t\sin t\\sin t + t\cos t\end{bmatrix}} \tag{5.74b}\\&= \exp(x_{1}x_{2}^{2}) \big[ x_{2}^{2}(\cos t - t\sin t) + 2x_{1}x_{2}(\sin t + t\cos t) \big] , \tag{5.74c}\end{align}

其中,x_{1} = t\cos tx_{2} = t\sin t;见(5.72)。

示例 5.11(线性模型中最小二乘损失之梯度)

考虑下面的线性模型

\boldsymbol{y} = \boldsymbol{\Phi \theta },\tag{5.75}
其中 \boldsymbol{\theta} \in \mathbb{R}^{D} 是参数向量,\boldsymbol{\Phi}\in \mathbb{R}^{N \times D} 是输入特征,\boldsymbol{y} \in \mathbb{R}^{N} 是对应的观测值。为方便叙述,我们定义
\begin{align}L(\boldsymbol{e}) &:= \|\boldsymbol{e}\|^{2}, \tag{5.76}\\\boldsymbol{e}(\boldsymbol{\theta}) &:= \boldsymbol{y} - \boldsymbol{\Phi \theta}. \tag{5.77}\end{align}
我们使用链式法则计算偏导数 \displaystyle \frac{ \partial L }{ \partial \boldsymbol{\theta} },其中L称为最小二乘损失函数 (Least-squares loss function)。开始计算之前,我们首先确定梯度的维数:
\displaystyle \frac{ \partial L }{ \partial \boldsymbol{\theta} } \in \mathbb{R}^{L \times D}. \tag{5.78}
然后使用链式法则:
\displaystyle \frac{ \partial L }{ \partial \boldsymbol{\theta} } = {\color{blue} \displaystyle \frac{ \partial L }{ \partial \boldsymbol{e} } } {\color{orange} \displaystyle \frac{ \partial \boldsymbol{e} }{ \partial \boldsymbol{\theta} } } , \tag{5.79}
其中等式左边向量从左往右的第 d 个元素是由
\displaystyle \frac{ \partial L }{ \partial \boldsymbol{\theta} } [1,d] = \sum\limits_{n=1}^{N} \displaystyle \frac{ \partial L }{ \partial \boldsymbol{e} } [n] \displaystyle \frac{ \partial \boldsymbol{e} }{ \partial \boldsymbol{\theta} } [n,d] \tag{5.80}
给出的。我们知道 \|\boldsymbol{e}\|^{2} = \boldsymbol{e}^{\top}\boldsymbol{e}(见 3.2 节)因此有
{\color{blue} \displaystyle \frac{ \partial L }{ \partial \boldsymbol{e} } = 2\boldsymbol{e}^{\top} } \in \mathbb{R}^{1 \times N}. \tag{5.81}
进一步,我们有
{\color{orange} \displaystyle \frac{ \partial \boldsymbol{e} }{ \partial \boldsymbol{\theta} } = -\boldsymbol{\Phi} } \in \mathbb{R}^{N \times D} , \tag{5.82}
结合起来即为所求:
\displaystyle \frac{ \partial L }{ \partial \boldsymbol{\theta} } = {\color{orange} - } {\color{blue} 2\boldsymbol{e}^{\top} }{\color{orange} \boldsymbol{\Phi} } {~}\mathop{=\!=\!=}\limits^{(5.77)}{~} {\color{orange} - } {\color{blue} \underbrace{ 2(\boldsymbol{y}^{\top} - \boldsymbol{\theta}^{\top}\boldsymbol{\Phi}^{\top}) }*_{ 1 \times N } }~{\color{orange} \underbrace{ \boldsymbol{\Phi} }_*{ N \times D } } \in \mathbb{R}^{1 \times D}. \tag{5.83}

注:如果不使用链式法则,我们就可以通过展开下面的函数进行求导以得到相同的结果

L_{2}(\boldsymbol{\theta}) := \|\boldsymbol{y} - \boldsymbol{\Phi \theta}\|^{2} = (\boldsymbol{y} - \boldsymbol{\Phi \theta})^{\top}(\boldsymbol{y} - \boldsymbol{\Phi \theta}). \tag{5.84}
然而这种方法虽然可用于这样的简单函数,但当我们面对深度复合的复杂函数时这样做就不现实了。


作者与出处
原作者: Datawhale
来源:Datawhale
许可证:CC BY-SA 4.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: Datawhale 转发
评论区 (0)
U