动手学深度学习需要这些数学基础知识

异步社区官方博客

本附录总结了本书中涉及的有关线性代数、微分和概率的基础知识。为避免赘述本书未涉及的数学背景知识,本节中的少数定义稍有简化。

A.1 线性代数

下面分别概括了向量、矩阵、运算、范数、特征向量和特征值的概念。

A.1.1 向量

本书中的向量指的是列向量。一个n维向量x的表达式可写成

其中x_1, \cdots, x_n是向量的元素。我们将各元素均为实数的 n 维向量 x 记作 \boldsymbol{x} \in \mathbb{R}^{n}\boldsymbol{x} \in \mathbb{R}^{n \times 1}

A.1.2 矩阵

一个mn矩阵的表达式可写成

其中 x_{ij} 是矩阵 X 中第 i 行第j列的元素(1 \leqslant i \leqslant m, 1 \leqslant j \leqslant n)。我们将各元素均为实数的 m n列矩阵 X 记作 \boldsymbol{X} \in \mathbb{R}^{m \times n}。不难发现,向量是特殊的矩阵。

A.1.3 运算

n维向量a中的元素为a_1, \cdots, a_nn维向量b中的元素为b_1, \cdots, b_n。向量ab的点乘(内积)是一个标量:

设两个mn列矩阵

矩阵A转置是一个nm列矩阵,它的每一行其实是原矩阵的每一列:

两个相同形状的矩阵的加法是将两个矩阵按元素做加法:

我们使用符号 \odot 表示两个矩阵按元素乘法的运算,即阿达马积(Hadamard product):

定义一个标量k。标量与矩阵的乘法也是按元素做乘法的运算:

其他诸如标量与矩阵按元素相加、相除等运算与上式中的相乘运算类似。矩阵按元素开根号、取对数等运算也就是对矩阵每个元素开根号、取对数等,并得到和原矩阵形状相同的矩阵。

矩阵乘法和按元素的乘法不同。设Amp列的矩阵,Bpn列的矩阵。两个矩阵相乘的结果

是一个mn列的矩阵,其中第i 行第j 列(1 \leqslant i \leqslant m, 1 \leqslant j \leqslant n)的元素为

A.1.4 范数

n维向量x中的元素为x_1, \cdots, x_n。向量xL_p范数

![|\boldsymbol{x}|_p = \left(\sum_{i=1}^n \left|x_i \right|^p \right)^{1/p}](http://private.codecogs.com/gif.latex?|\boldsymbol{x}|p%20=%20\left(\sum{i=1}^n%20\left|x_i%20\right|^p%20\right%29^{1/p})

例如,xL_1范数是该向量元素绝对值之和:

xL_2范数是该向量元素平方和的平方根:

我们通常用 || x || 指代 || x ||2。

X是一个mn列矩阵。矩阵X的Frobenius范数为该矩阵元素平方和的平方根:

其中 x_{ij} 为矩阵 X 在第 i 行第 j 列的元素。

A.1.5 特征向量和特征值

对于一个nn 列的矩阵A,假设有标量 λ 和非零的n维向量v使

那么 v 是矩阵 A 的一个特征向量,标量 λ v 对应的特征值

A.2 微分

我们在这里简要介绍微分的一些基本概念和演算。

B.2.1 导数和微分

假设函数 f: \mathbb{R} \rightarrow \mathbb{R} 的输入和输出都是标量。函数 f 导数

![f'(x) = \lim_{h \rightarrow 0} \frac{f(x+h) - f(x)}{h}](http://private.codecogs.com/gif.latex?f'(x%29%20=%20\lim_{h%20\rightarrow%200}%20\frac{f(x+h%29%20-%20f(x%29}{h})

且假定该极限存在。给定 ![y = f(x)](http://private.codecogs.com/gif.latex?y%20=%20f(x%29),其中xy分别是函数 f 自变量因变量。以下有关导数和微分的表达式等价:

![f'(x) = y' = \frac{\text{d}y}{\text{d}x} = \frac{\text{d}f}{\text{d}x} = \frac{\text{d}}{\text{d}x} f(x) = \text{D}f(x) = \text{D}_x f(x)](http://private.codecogs.com/gif.latex?f'(x%29%20=%20y'%20=%20\frac{\text{d}y}{\text{d}x}%20=%20\frac{\text{d}f}{\text{d}x}%20=%20\frac{\text{d}}{\text{d}x}%20f(x%29%20=%20\text{D}f(x%29%20=%20\text{D}_x%20f(x%29)

其中符号D和d/dx也叫微分运算符。常见的微分演算有DC = 0(C为常数)、\text{D}x^n = nx^{n-1}n为常数)、\text{D}e^x = e^x、![\text{D}\ln(x) = 1/x](http://private.codecogs.com/gif.latex?\text{D}\ln(x%29%20=%201/x) 等。

如果函数 f g都可导,设C为常数,那么

![\begin{aligned}\frac{\text{d}}{\text{d}x} [Cf(x)] &= C \frac{\text{d}}{\text{d}x} f(x)\\frac{\text{d}}{\text{d}x} [f(x) + g(x)] &= \frac{\text{d}}{\text{d}x} f(x) + \frac{\text{d}}{\text{d}x} g(x)\ \frac{\text{d}}{\text{d}x} [f(x)g(x)] &= f(x) \frac{\text{d}}{\text{d}x} [g(x)] + g(x) \frac{\text{d}}{\text{d}x} [f(x)]\\frac{\text{d}}{\text{d}x} \left[\frac{f(x)}{g(x)}\right] &= \frac{g(x) \frac{\text{d}}{\text{d}x} [f(x)] - f(x) \frac{\text{d}}{\text{d}x} [g(x)]}{[g(x)]^2}\end{aligned}](http://private.codecogs.com/gif.latex?\begin{aligned}&\frac{\text{d}}{\text{d}x}%20[Cf(x%29]%20=%20C%20\frac{\text{d}}{\text{d}x}%20f(x%29\&\frac{\text{d}}{\text{d}x}%20[f(x%29%20+%20g(x%29]%20=%20\frac{\text{d}}{\text{d}x}%20f(x%29%20+%20\frac{\text{d}}{\text{d}x}%20g(x%29\%20&\frac{\text{d}}{\text{d}x}%20[f(x%29g(x%29]%20=%20f(x%29%20\frac{\text{d}}{\text{d}x}%20[g(x%29]%20+%20g(x%29%20\frac{\text{d}}{\text{d}x}%20[f(x%29]\&\frac{\text{d}}{\text{d}x}%20\left[\frac{f(x%29}{g(x%29}\right]%20=%20\frac{g(x%29%20\frac{\text{d}}{\text{d}x}%20[f(x%29]%20-%20f(x%29%20\frac{\text{d}}{\text{d}x}%20[g(x%29]}{[g(x%29]^2}\end{aligned})

如果![y=f(u)](http://private.codecogs.com/gif.latex?y=f(u%29)和![u=g(x)](http://private.codecogs.com/gif.latex?u=g(x%29)都是可导函数,依据链式法则

A.2.2 泰勒展开

函数 f 泰勒展开式

![f(x) = \sum_{n=0}^\infty \frac{f^{(n)}(a)}{n!} (x-a)^n](http://private.codecogs.com/gif.latex?f(x%29%20=%20\sum_{n=0}^\infty%20\frac{f^{(n%29}(a%29}{n!}%20(x-a%29^n)

其中 ![f^{(n)}](http://private.codecogs.com/gif.latex?f^{(n%29})为函数 f n 阶导数(求n次导数),n! 为 n 的阶乘。假设 \epsilon 是一个足够小的数,如果将上式中 xa 分别替换成 x+\epsilonx,可以得到

![f(x + \epsilon) \approx f(x) + f'(x) \epsilon + \mathcal{O}(\epsilon^2)](http://private.codecogs.com/gif.latex?f(x%20+%20\epsilon%29%20\approx%20f(x%29%20+%20f'(x%29%20\epsilon%20+%20\mathcal{O}(\epsilon^2%29)

由于 \epsilon 足够小,上式也可以简化成

![f(x + \epsilon) \approx f(x) + f'(x) \epsilon](http://private.codecogs.com/gif.latex?f(x%20+%20\epsilon%29%20\approx%20f(x%29%20+%20f'(x%29%20\epsilon)

A.2.3 偏导数

u为一个有n个自变量的函数,![u = f(x_1, x_2, \ldots, x_n)](http://private.codecogs.com/gif.latex?u%20=%20f(x_1,%20x_2,%20\cdots,%20x_n%29),它有关第i个变量x_i偏导数

![ \frac{\partial u}{\partial x_i} = \lim_{h \rightarrow 0} \frac{f(x_1, \ldots, x_{i-1}, x_i+h, x_{i+1}, \ldots, x_n) - f(x_1, \ldots, x_i, \ldots, x_n)}{h}](http://private.codecogs.com/gif.latex?%20\frac{\partial%20u}{\partial%20x_i}%20=%20\lim_{h%20\rightarrow%200}%20\frac{f(x_1,%20\cdots,%20x_{i-1},%20x_i+h,%20x_{i+1},%20\cdots,%20x_n%29%20-%20f(x_1,%20\cdots,%20x_i,%20\cdots,%20x_n%29}{h})

以下有关偏导数的表达式等价:

为了计算 \partial u/\partial x_i,只需将x_1, \cdots, x_{i-1}, x_{i+1}, \cdots, x_n视为常数并求u有关xi的导数。

A.2.4 梯度

假设函数 f: \mathbb{R}^n \rightarrow \mathbb{R} 的输入是一个n维向量 \boldsymbol{x} = x_1, x_2, \cdots, x_n^\top,输出是标量。函数![f(\boldsymbol{x})](http://private.codecogs.com/gif.latex?f(\boldsymbol{x}%29)有关 x 的梯度是一个由n个偏导数组成的向量:

![\nabla_{\boldsymbol{x}} f(\boldsymbol{x}) = \bigg[\frac{\partial f(\boldsymbol{x})}{\partial x_1}, \frac{\partial f(\boldsymbol{x})}{\partial x_2}, \ldots, \frac{\partial f(\boldsymbol{x})}{\partial x_n}\bigg]^\top](http://private.codecogs.com/gif.latex?\nabla_{\boldsymbol{x}}%20f(\boldsymbol{x}%29%20=%20\bigg[\frac{\partial%20f(\boldsymbol{x}%29}{\partial%20x_1},%20\frac{\partial%20f(\boldsymbol{x}%29}{\partial%20x_2},%20\cdots,%20\frac{\partial%20f(\boldsymbol{x}%29}{\partial%20x_n}\bigg]^\top)

为表示简洁,我们有时用 ![\nabla f(\boldsymbol{x})](http://private.codecogs.com/gif.latex?\nabla%20f(\boldsymbol{x}%29) 代替 ![\nabla_{\boldsymbol{x}} f(\boldsymbol{x})](http://private.codecogs.com/gif.latex?\nabla_{\boldsymbol{x}}%20f(\boldsymbol{x}%29)。

假设x是一个向量,常见的梯度演算包括

![\begin{aligned}\nabla_{\boldsymbol{x}} \boldsymbol{A}^\top \boldsymbol{x} &= \boldsymbol{A} \\nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A} &= \boldsymbol{A} \\nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A} \boldsymbol{x} &= (\boldsymbol{A} + \boldsymbol{A}^\top)\boldsymbol{x}\\nabla_{\boldsymbol{x}} |\boldsymbol{x} |^2 &= \nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{x} = 2\boldsymbol{x}\end{aligned}](http://private.codecogs.com/gif.latex?\begin{aligned}\nabla_{\boldsymbol{x}}%20\boldsymbol{A}^\top%20\boldsymbol{x}%20&=%20\boldsymbol{A}%20\\nabla_{\boldsymbol{x}}%20\boldsymbol{x}^\top%20\boldsymbol{A}%20%20&=%20\boldsymbol{A}%20\\nabla_{\boldsymbol{x}}%20\boldsymbol{x}^\top%20\boldsymbol{A}%20\boldsymbol{x}%20%20&=%20(\boldsymbol{A}%20+%20\boldsymbol{A}^\top%29\boldsymbol{x}\\nabla_{\boldsymbol{x}}%20|\boldsymbol{x}%20|^2%20&=%20\nabla_{\boldsymbol{x}}%20\boldsymbol{x}^\top%20\boldsymbol{x}%20=%202\boldsymbol{x}\end{aligned})

类似地,假设X是一个矩阵,那么

A.2.5 海森矩阵

假设函数 f: \mathbb{R}^n \rightarrow \mathbb{R} 的输入是一个n维向量 \boldsymbol{x} = x_1, x_2, \ldots, x_n^\top,输出是标量。假定函数 f所有的二阶偏导数都存在,f 的海森矩阵H是一个nn列的矩阵:

其中二阶偏导数为

![\frac{\partial^2 f}{\partial x_i \partial x_j} = \frac{\partial }{\partial x_j} \left(\frac{\partial f}{ \partial x_i}\right)](http://private.codecogs.com/gif.latex?\frac{\partial^2%20f}{\partial%20x_i%20\partial%20x_j}%20=%20\frac{\partial%20}{\partial%20x_j}%20\left(\frac{\partial%20f}{%20\partial%20x_i}\right%29)

A.3 概率

最后,我们简要介绍条件概率、期望和均匀分布。

A.3.1 条件概率

假设事件A和事件B的概率分别为![P(A)](http://private.codecogs.com/gif.latex?P(A%29)和![P(B)](http://private.codecogs.com/gif.latex?P(B%29),两个事件同时发生的概率记作 ![P(A \cap B)](http://private.codecogs.com/gif.latex?P(A%20\cap%20B%29)或![P(A, B)](http://private.codecogs.com/gif.latex?P(A,%20B%29)。给定事件B,事件A条件概率

![P(A \mid B) = \frac{P(A \cap B)}{P(B)}](http://private.codecogs.com/gif.latex?P(A%20\mid%20B%29%20=%20\frac{P(A%20\cap%20B%29}{P(B%29})

也就是说,

![P(A \cap B) = P(B) P(A \mid B) = P(A) P(B \mid A).](http://private.codecogs.com/gif.latex?P(A%20\cap%20B%29%20=%20P(B%29%20P(A%20\mid%20B%29%20=%20P(A%29%20P(B%20\mid%20A%29)

当满足

![P(A \cap B) = P(A) P(B)](http://private.codecogs.com/gif.latex?P(A%20\cap%20B%29%20=%20P(A%29%20P(B%29)

时,事件 A 和事件 B 相互独立

A.3.2 期望

离散的随机变量X期望(或平均值)为

![E(X) = \sum_{x} x P(X = x).](http://private.codecogs.com/gif.latex?E(X%29%20=%20\sum_{x}%20x%20P(X%20=%20x%29)

A.3.3 均匀分布

假设随机变量X服从[a, b]上的均匀分布,即![X \sim U(a, b)](http://private.codecogs.com/gif.latex?X%20\sim%20U(a,%20b%29)。随机变量Xab之间任意一个数的概率相等。

小结

  • 本附录总结了本书中涉及的有关线性代数、微分和概率的基础知识。

练习

求函数 ![f(\boldsymbol{x}) = 3x_1^2 + 5e^{x_2}](http://private.codecogs.com/gif.latex?\inline%20f(\boldsymbol{x}%29%20=%203x_1^2%20+%205e^{x_2}) 的梯度。

本文摘自《动手学深度学习》

动手学深度学习

作者:阿斯顿·张(Aston Zhang), 李沐(Mu Li), [美] 扎卡里·C. 立顿(Zachary C. Lipton), [德] 亚历山大·J. 斯莫拉(Alexander J. Smola)

目前市面上有关深度学习介绍的书籍大多可分两类,一类侧重方法介绍,另一类侧重实践和深度学习工具的介绍。本书同时覆盖方法和实践。本书不仅从数学的角度阐述深度学习的技术与应用,还包含可运行的代码,为读者展示如何在实际中解决问题。为了给读者提供一种交互式的学习体验,本书不但提供免费的教学视频和讨论区,而且提供可运行的Jupyter记事本文件,充分利用Jupyter记事本能将文字、代码、公式和图像统一起来的优势。这样不仅直接将数学公式对应成实际代码,而且可以修改代码、观察结果并及时获取经验,从而带给读者全新的、交互式的深度学习的学习体验。