图宾根深度学习的数学笔记-全-
图宾根深度学习的数学笔记(全)
001:课程介绍 🎯
在本节课中,我们将对“深度学习的数学”这门微课程系列进行概述。我们将了解这门课程的目标、内容结构以及它旨在为后续深度学习课程所做的准备。

大家好,欢迎来到“深度学习的数学”课程。这是一次关于线性代数与概率论的简短导览。这个微课程系列包含许多简短的视频教程,是我为回应图宾根大学深度学习课程学生们背景知识的多样性而创建的。
这门课程并非一门全面的数学课,而更像是对学生们在本科数学课程中已学知识的一次简短回顾。其目的尤其在于,为学生们准备我们将要在深度学习课程以及我实验室教授的其他课程中使用的数学符号和表示法。
课程内容概览 📋
以下是本微课程系列将要涵盖的内容概览。
- 线性代数基础:我们将从集合、标量、向量和矩阵的表示法开始。我们将学习如何对矩阵和向量进行加法和乘法运算,了解逆矩阵的含义,以及矩阵中的线性相关性意味着什么。
- 范数与矩阵分解:我们将介绍课程中最常用的向量和矩阵范数,以及矩阵分解技术,如特征值分解和奇异值分解。
- 微积分:我们将讨论微分学和向量微积分,即如何计算导数、梯度和海森矩阵。
- 概率论基础:我们将探讨随机变量和概率分布是什么,并了解深度学习课程中使用的一些最常见的概率分布。
- 概率关系与度量:我们将涵盖边缘概率分布和条件概率分布的主题,以及著名的贝叶斯规则。我们将了解随机变量何时是独立、相关或条件独立的。我们还将引入期望、方差和协方差的概念。
- 信息论:最后,我们将讨论信息论,特别是信息是什么、如何度量信息,以及熵的含义。然后,我们将探讨散度,即如何度量分布之间的距离,重点介绍最突出的散度——KL散度。
- 常用运算符:此外,我们还将介绍在整个课程中都会用到的Argmax和Argmin运算符。
课程性质与目标 🎯


需要特别说明的是,这再次强调不是一门严格的数学讲座。这里不会有公理、命题、定理或证明。所有内容都非常注重应用。相反,本课程的目标是回顾必要的、最低限度的数学背景知识,以便大家能够跟上我们的深度学习、计算机视觉或自动驾驶课程。

希望你能享受这门课程!
002:集合、标量、向量、矩阵与张量 🧮



在本节课中,我们将学习深度学习中基础的数学对象及其表示法。我们将从集合开始,逐步介绍标量、向量、矩阵和张量,并理解它们之间的关系与区别。

集合

集合是不同事物的数学集合模型。我们通常使用花体字母(如 $\mathcal{S}$)来表示一个集合。


以下是关于集合的一些核心概念和操作:
- 空集:用符号 $\emptyset$ 表示,它是一个不包含任何元素的集合。
- 有限集:例如,包含三个不同颜色(红、绿、蓝)的集合,我们使用花括号表示:${\text{红}, \text{绿}, \text{蓝}}$。
- 二元数集:集合 ${0, 1}$ 在深度学习中常用于二分类问题,例如判断图像中是否存在某个物体。
- 无限集:例如,包含所有实数的集合 $\mathbb{R}$,以及包含所有自然数(包括0)的集合 $\mathbb{N}_0$。
- 集合的集合:我们可以有集合的集合,例如 ${\mathbb{R}, \mathbb{N}_0}$。
上一节我们介绍了集合的基本概念,本节中我们来看看集合的一些基本操作。

以下是集合的几种基本操作:


- 基数:用 $|\mathcal{S}|$ 表示,指集合中元素的数量。例如,${\text{红}, \text{绿}, \text{蓝}}$ 的基数是3。
- 并集:用符号 $\cup$ 表示,合并两个集合中的所有元素。例如,$\mathbb{R} \cup \mathbb{N}_0 = \mathbb{R}$。
- 交集:用符号 $\cap$ 表示,取两个集合中共有的元素。例如,$\mathbb{R} \cap \mathbb{N}_0 = \mathbb{N}_0$。
- 笛卡尔积:用符号 $\times$ 表示,生成一个由有序对构成的新集合。例如,$\mathbb{R} \times \mathbb{R}$ 可以写成 $\mathbb{R}^2$,用于表示二维空间中的点(如图像像素坐标)。
标量


标量是单个数字,与向量、矩阵等多维对象不同。我们用小写、非粗体字体表示标量,例如 $x$ 或 $c$。




在定义标量时,需要指明其所属的集合(类型),例如:
- $x \in \mathbb{R}$ 表示 $x$ 是一个实数。
- $c \in \mathbb{N}$ 表示 $c$ 是一个自然数。




向量



向量是一个有序的数字数组。我们用小写、粗体字体表示向量,例如 $\mathbf{x}$。


一个向量可以表示为:
$$\mathbf{x} = \begin{bmatrix} x_1 \ x_2 \ x_3 \end{bmatrix}$$
其中 $x_1, x_2, x_3$ 是标量,称为向量的元素。我们可以通过索引(如1, 2, 3)来访问每个元素。


如果每个元素 $x_i \in \mathbb{R}$,那么这个三维向量属于三维实数空间:$\mathbf{x} \in \mathbb{R}^3$。向量可以看作是空间中的一个点,其元素是各个坐标轴上的坐标。

我们还可以通过索引集合来获取向量的子集。例如,给定索引集合 $\mathcal{S} = {1, 3}$,则 $\mathbf{x}_\mathcal{S} = [x_1, x_3]^\top$ 是一个二维向量。


矩阵


矩阵是一个二维数字数组,每个元素由两个索引(行索引和列索引)标识。我们用大写、粗体字体表示矩阵,例如 $\mathbf{A}$。




一个矩阵可以表示为:
$$\mathbf{A} = \begin{bmatrix} a_{1,1} & a_{1,2} \ a_{2,1} & a_{2,2} \end{bmatrix}$$
其中每个 $a_{i,j}$ 是一个标量,表示矩阵 $\mathbf{A}$ 中第 $i$ 行、第 $j$ 列的元素。


如果一个实值矩阵有 $m$ 行和 $n$ 列,我们记作 $\mathbf{A} \in \mathbb{R}^{m \times n}$。$m \times n$ 称为矩阵的形状。


我们可以提取矩阵的整列或整行:
- 列向量:$\mathbf{A}_{:,j}$ 表示矩阵 $\mathbf{A}$ 的第 $j$ 列,是一个列向量。
- 行向量:$\mathbf{A}{i,:}$ 表示矩阵 $\mathbf{A}$ 的第 $i$ 行。通常我们写作 $\mathbf{A}^\top$ 或 $(\mathbf{A}^\top)_{:,i}$ 来明确表示它是一个(行)向量。

张量



张量是拥有超过两个轴的数组,在深度学习中广泛应用(例如处理RGB图像)。我们用大写、粗体字体表示张量,例如 $\mathbf{A}$。实际上,标量是0维张量,向量是1维张量,矩阵是2维张量。


一个三维张量的元素可以表示为 $a_{i,j,k}$,其中每个 $a_{i,j,k}$ 是一个标量。例如,一张RGB图像是一个形状为 高度 × 宽度 × 3 的张量。



转置

矩阵的转置是沿主对角线翻转矩阵。矩阵 $\mathbf{A}$ 的转置记为 $\mathbf{A}^\top$。



例如:
如果 $\mathbf{A} = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix}$,那么 $\mathbf{A}^\top = \begin{bmatrix} 1 & 3 \ 2 & 4 \end{bmatrix}$。



对于向量:
- 默认的向量 $\mathbf{x}$ 是列向量。
- 它的转置 $\mathbf{x}^\top$ 是行向量。
- 在书面书写时,为节省空间,我们常将列向量写成行向量的形式并加上转置符号,即 $[x_1, x_2, x_3]^\top$。
标量的转置是其自身:$a^\top = a$。

实例分析


让我们通过一个具体例子巩固概念。设矩阵:
$$\mathbf{A} = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} \in \mathbb{R}^{2 \times 2}$$



- 元素:$a_{1,1}=1, a_{1,2}=2, a_{2,1}=3, a_{2,2}=4$。
- 转置:$\mathbf{A}^\top = \begin{bmatrix} 1 & 3 \ 2 & 4 \end{bmatrix}$。
- 提取列:
- 第一列:$\mathbf{A}_{:,1} = \begin{bmatrix} 1 \ 3 \end{bmatrix}$ (列向量)
- 第二列:$\mathbf{A}_{:,2} = \begin{bmatrix} 2 \ 4 \end{bmatrix}$ (列向量)
- 提取行(通过转置矩阵):
- 第一行:$(\mathbf{A}^\top){:,1} = \begin{bmatrix} 1 \ 2 \end{bmatrix}$ 或 $\mathbf{A}^\top = [1, 2]$
- 第二行:$(\mathbf{A}^\top){:,2} = \begin{bmatrix} 3 \ 4 \end{bmatrix}$ 或 $\mathbf{A}^\top = [3, 4]$



注意,形状为 $m \times 1$ 或 $1 \times n$ 的矩阵可以分别视为列向量或行向量。




本节课中我们一起学习了深度学习的数学基础:集合、标量、向量、矩阵和张量。我们掌握了它们的定义、表示法(包括字体规范)、核心操作(如索引、提取行列、转置)以及它们之间的关系。理解这些基本概念是后续学习线性代数运算和深度学习模型的关键第一步。
003:矩阵与向量的加法与乘法 📊




在本节课中,我们将学习如何对矩阵和向量进行加法与乘法运算。这些运算是线性代数的基础,也是理解深度学习模型内部计算的关键。
矩阵与向量的加法 ➕
上一节我们介绍了矩阵和向量的基本概念,本节中我们来看看如何对它们进行加法运算。




矩阵或向量的加法与减法是通过逐元素相加或相减来完成的。对于向量,其运算公式为:
[
c_i = a_i + b_i
]
其中 ( i ) 是向量中元素的索引。


对于矩阵,其运算公式为:
[
C_{ij} = A_{ij} + B_{ij}
]
其中 ( i ) 和 ( j ) 分别是矩阵的行索引和列索引。
以下是向量加法的数字示例:
假设有列向量 ( \mathbf{a} = \begin{bmatrix} 1 \ 3 \end{bmatrix} ) 和 ( \mathbf{b} = \begin{bmatrix} 4 \ 2 \end{bmatrix} ),它们的和为:
[
\mathbf{a} + \mathbf{b} = \begin{bmatrix} 1+4 \ 3+2 \end{bmatrix} = \begin{bmatrix} 5 \ 5 \end{bmatrix}
]
以下是矩阵加法的数字示例:
假设有矩阵 ( A = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} ) 和 ( B = \begin{bmatrix} 4 & 3 \ 2 & 1 \end{bmatrix} ),它们的和为:
[
A + B = \begin{bmatrix} 1+4 & 2+3 \ 3+2 & 4+1 \end{bmatrix} = \begin{bmatrix} 5 & 5 \ 5 & 5 \end{bmatrix}
]


注意:要进行加法或减法运算,向量或矩阵必须具有相同的形状。例如,一个 2x3 的矩阵不能与一个 3x2 的矩阵相加。




标量与矩阵的运算 🔢


我们也可以将一个标量与矩阵相加,或者用一个标量乘以矩阵。这在数学上是明确定义的。
例如,如果我们有一个矩阵 ( B ),我们可以用标量 ( a ) 乘以它,然后用标量 ( c ) 加上它,得到结果矩阵 ( D ):
[
D = a \cdot B + c
]
这相当于对 ( B ) 中的每个元素 ( B_{ij} ) 执行以下操作:
[
D_{ij} = a \cdot B_{ij} + c
]
广播机制 📡



在深度学习中,我们有时也允许矩阵和向量相加。这仅在矩阵在其中一个维度上与向量具有相同形状(相同的行数或列数)时才可行。


这个过程称为广播。其原理是将向量复制,以匹配矩阵的维度。



假设我们有一个列向量 ( \mathbf{b} ),我们想将其加到矩阵 ( A ) 上以得到矩阵 ( C )。我们将向量 ( \mathbf{b} ) 复制到矩阵 ( A ) 的所有列上,然后逐列相加。


用元素方式可以写为:
[
C_{ij} = A_{ij} + b_i
]
注意,( b ) 的索引只有 ( i ),没有 ( j ),因为它是列向量。这意味着对于所有列索引 ( j ),我们都加上相同的 ( b_i )。
以下是广播的示例:
- 列向量广播:向量 ( \begin{bmatrix} 1 \ 3 \end{bmatrix} ) 被加到矩阵 ( \begin{bmatrix} 1 & 2 \ 0 & 1 \end{bmatrix} ) 的每一列,结果为 ( \begin{bmatrix} 2 & 3 \ 3 & 4 \end{bmatrix} )。
- 行向量广播:行向量 ( \begin{bmatrix} 1 & 3 \end{bmatrix} ) 被加到矩阵 ( \begin{bmatrix} 2 & 0 \ 2 & 0 \end{bmatrix} ) 的每一行,结果为 ( \begin{bmatrix} 3 & 3 \ 3 & 3 \end{bmatrix} )。
如果你使用 Python 的 NumPy 库,你会发现它原生支持这种广播机制,深度学习框架也广泛使用它。


矩阵与向量的乘法 ✖️


现在让我们进入乘法运算。两个矩阵 ( A ) 和 ( B ) 可以相乘,当且仅当 ( A ) 的列数等于 ( B ) 的行数。

换句话说,如果 ( A \in \mathbb{R}^{m \times n} ),( B \in \mathbb{R}^{n \times l} ),那么它们的乘积 ( C = AB ) 是一个 ( m \times l ) 的矩阵。



矩阵乘积的元素定义如下:
[
C_{ij} = \sum_{k=1}^{n} A_{ik} \cdot B_{kj}
]
我们取矩阵 ( A ) 的第 ( i ) 行和矩阵 ( B ) 的第 ( j ) 列,将对应元素相乘后求和。

注意:矩阵乘积不是逐元素相乘。逐元素相乘被称为哈达玛积,用符号 ( A \odot B ) 表示,但要求 ( A ) 和 ( B ) 形状完全相同。

以下是矩阵乘积的示例:
[
\begin{bmatrix} 3 & 1 \ 2 & 1 \end{bmatrix} \times \begin{bmatrix} 1 & 2 \ 3 & 1 \end{bmatrix} = \begin{bmatrix} (31+13) & (32+11) \ (21+13) & (22+11) \end{bmatrix} = \begin{bmatrix} 6 & 7 \ 5 & 5 \end{bmatrix}
]


向量的内积与外积


向量本质上是维度为1的矩阵,因此也有两种乘法方式。

内积(点积):两个向量的内积得到一个标量。
假设有列向量 ( \mathbf{x} = \begin{bmatrix} 3 \ 2 \end{bmatrix} ) 和 ( \mathbf{y} = \begin{bmatrix} 1 \ 3 \end{bmatrix} ),将 ( \mathbf{x} ) 转置为行向量后相乘:
[
\mathbf{x}^T \mathbf{y} = \begin{bmatrix} 3 & 2 \end{bmatrix} \begin{bmatrix} 1 \ 3 \end{bmatrix} = 31 + 23 = 9
]
外积:两个向量的外积得到一个矩阵(秩为1的矩阵)。
使用相同的向量,但转置 ( \mathbf{y} ):
[
\mathbf{x} \mathbf{y}^T = \begin{bmatrix} 3 \ 2 \end{bmatrix} \begin{bmatrix} 1 & 3 \end{bmatrix} = \begin{bmatrix} 31 & 33 \ 21 & 23 \end{bmatrix} = \begin{bmatrix} 3 & 9 \ 2 & 6 \end{bmatrix}
]

有趣的是,我们可以用外积来显式地定义之前的广播操作。例如,将向量 ( \begin{bmatrix} 1 \ 3 \end{bmatrix} ) 广播到 2x2 矩阵,可以看作是该向量与全1向量 ( \begin{bmatrix} 1 \ 1 \end{bmatrix} ) 的外积,生成一个复制后的矩阵,然后再与目标矩阵相加。
矩阵运算的性质 📝


了解矩阵运算的一些基本性质非常重要:


- 分配律:( A(B + C) = AB + AC )
- 结合律:( A(BC) = (AB)C )
- 非交换律:一般情况下,( AB \neq BA )。这从维度要求上就可以看出。
- 转置的性质:( (AB)^T = B^T A^T )
- 向量点积的交换律:虽然矩阵乘法不满足交换律,但向量的点积是满足的,即 ( \mathbf{x}^T \mathbf{y} = \mathbf{y}^T \mathbf{x} )。这可以通过上述转置性质推导出来。

矩阵向量积与线性方程组

矩阵向量积允许我们紧凑地表示线性方程组,这在最小二乘法等问题中经常遇到。
假设我们有一系列线性方程:( \mathbf{a}_1^T \mathbf{x} = b_1, \mathbf{a}_2^T \mathbf{x} = b_2, ..., \mathbf{a}_m^T \mathbf{x} = b_m )。
我们可以将其写成一个紧凑的矩阵向量乘积形式:
[
A\mathbf{x} = \mathbf{b}
]
其中,矩阵 ( A ) 的每一行 ( A_i ) 就是方程中的行向量 ( \mathbf{a}_i^T ),( \mathbf{b} ) 是由所有 ( b_i ) 组成的列向量。



本节课中我们一起学习了矩阵与向量的基本运算:加法和乘法。我们掌握了逐元素相加、标量运算、广播机制,以及关键的矩阵乘法规则和性质。理解这些运算是后续学习更复杂的线性代数概念和深度学习模型的基础。
004:单位矩阵与逆矩阵 🔢

在本节课中,我们将要学习线性代数中两个核心概念:单位矩阵和矩阵的逆。理解它们是掌握后续矩阵运算和求解线性方程组的基础。
单位矩阵
上一节我们介绍了矩阵与向量的乘法。本节中我们来看看一种特殊的矩阵,它不会改变与之相乘的向量,这种矩阵被称为单位矩阵。
我们使用粗体 I 加下标 n 来表示能保持 n 维向量的单位矩阵,其中 n 指明了它所保持的向量的维度。这个矩阵属于 n × n 维的实数方阵空间。


这意味着,对于向量空间 R^n 中的任何向量,将其与该矩阵相乘后,得到的向量与原向量完全相同。
公式表示如下:
对于任意向量 v ∈ R^n,有:
I_n v = v
那么,这个矩阵应该是什么样子?显然,它必须是一个对角线元素为1,其余元素为0的矩阵,这样才能保留向量的所有分量。

以下是单位矩阵的具体形式:
- 对于一个三维向量空间,对应的单位矩阵是:
I_3 = [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ] - 由于这是一个对角矩阵,我们也可以将其写作:
I_3 = diag(1, 1, 1) - 对于四维向量空间,单位矩阵 I_4 具有相似的结构,只是维度增加。
总之,I_n 是一个对角线元素全为1,其他元素全为0的 n × n 方阵。
矩阵的逆

了解了单位矩阵作为“乘法单位元”的角色后,我们现在可以定义矩阵的逆。

对于一个方阵 A,其逆矩阵记作 A^{-1}。逆矩阵的定义与单位矩阵紧密相关:A 的逆矩阵 A^{-1} 满足,当它与 A 相乘时,结果是单位矩阵。
公式定义如下:
A^{-1} A = I_n
换句话说,乘以逆矩阵 A^{-1} 可以“抵消”矩阵 A 的作用,最终得到单位矩阵(即乘法单位元)。


利用逆矩阵求解线性方程组

掌握了逆矩阵的定义,我们就可以用它来解决上一单元见过的线性方程组。
考虑一个线性方程组,其形式为:
A x = b
如何求解向量 x 呢?我们可以利用矩阵的逆。


以下是求解步骤:
- 从方程 A x = b 开始。
- 在等式两边同时左乘 A 的逆矩阵 A^{-1}。这不会改变等式的成立。
A^{-1} (A x) = A^{-1} b - 根据矩阵乘法的结合律,以及逆矩阵的定义 A^{-1} A = I,左边变为:
(A^{-1} A) x = I x = x - 由于单位矩阵 I 乘以任何向量都等于该向量本身,我们可以直接得到解:
x = A^{-1} b


因此,理论上,只要计算出系数矩阵 A 的逆,再乘以向量 b,就能得到方程组的解 x。
重要说明与示例
在应用上述方法前,有两点关键说明:

- 逆矩阵的存在性:上述求解方法仅在矩阵 A 的逆矩阵 A^{-1} 存在时才可行。这要求矩阵 A 是满秩的(或称非奇异的),这个性质我们将在后续课程中详细讨论。
- 数值计算的建议:虽然从数学推导上看 x = A^{-1} b 是正确的,但在实际数值计算(如编程)中,通常不建议先显式计算逆矩阵再相乘来求解。因为直接求逆可能在数值上不稳定。更稳健的方法是使用高斯消元法、LU分解等专门的线性系统求解算法。

最后,让我们通过一个具体例子来巩固理解。
考虑矩阵 A:
A = [ [1, 1],
[2, 0] ]
通过计算(例如使用高斯消元法),我们得到它的逆矩阵 A^{-1} 为:
A^{-1} = [ [0, 0.5],
[1, -0.5] ]


我们可以验证 A^{-1} A 的结果确实是单位矩阵 I_2:
A^{-1} A = [ [0*1+0.5*2, 0*1+0.5*0],
[1*1+(-0.5)*2, 1*1+(-0.5)*0] ]
= [ [1, 0],
[0, 1] ]
= I_2

现在,假设我们想求解线性方程组 A x = b,其中 b = [2, 1]^T。
根据公式,解 x 为:
x = A^{-1} b = [ [0, 0.5], * [2,
[1, -0.5] ] 1]
= [0*2 + 0.5*1,
1*2 + (-0.5)*1]
= [0.5,
1.5]
总结

本节课中我们一起学习了:
- 单位矩阵 (I_n):一种对角线为1、其余为0的特殊方阵,任何向量与之相乘都保持不变,是矩阵乘法中的“单位元”。
- 逆矩阵 (A^{-1}):对于一个方阵 A,其逆矩阵满足 A^{-1} A = I。它的作用是“抵消” A 的变换。
- 应用:逆矩阵为求解形如 A x = b 的线性方程组提供了一种理论方法,即 x = A^{-1} b。但需要注意逆矩阵存在的条件,并在实际计算中选用更稳定的数值算法。
005:线性相关与张成空间
在本节课中,我们将通过分析线性系统的解空间,来学习线性相关性和矩阵列空间张成的概念。理解这些概念对于判断线性方程组是否有解、解是否唯一,以及矩阵是否可逆至关重要。
线性组合与列空间
上一节我们介绍了线性系统的基本形式。本节中,我们来看看如何通过线性组合来理解矩阵与向量的乘法。
矩阵向量乘法 A x = b 可以理解为向量 x 的元素作为权重,对矩阵 A 的列向量进行线性组合。具体来说,结果向量 b 是 A 的每一列乘以 x 中对应标量后的和。

公式表示:
b = x1 * a1 + x2 * a2 + ... + xn * an
其中,a1, a2, ..., an 是矩阵 A 的列向量,x1, x2, ..., xn 是向量 x 的元素。
例如,对于矩阵 A = [[1, 1], [2, 0]] 和向量 x = [3, 2]^T,其乘积为:
b = 3 * [1, 2]^T + 2 * [1, 0]^T = [5, 6]^T
矩阵 A 的所有列向量通过线性组合所能生成的所有可能向量的集合,称为 A 的列空间或值域,也称为这些列向量的张成空间。
因此,线性系统 A x = b 有解的一个关键条件是:向量 b 必须位于矩阵 A 的列空间内。
线性相关与无解的情况
理解了列空间的概念后,我们来看一种导致线性系统无解的情况:列向量线性相关。
如果矩阵 A 的列向量之间存在线性依赖关系,即其中一个列向量可以表示为其他列向量的线性组合,那么这些列向量张成的空间维度会降低。
例如,考虑矩阵 A = [[1, 2], [2, 4]]。其第二列 [2, 4]^T 恰好是第一列 [1, 2]^T 的两倍,即 a2 = 2 * a1。这两个向量是线性相关的。

由于它们线性相关,其张成的空间从整个二维平面退化为一维直线。此时,对于不在该直线上的目标向量 b(例如 b = [5, 6]^T),我们无法找到任何标量 x1 和 x2 使得 x1*a1 + x2*a2 = b 成立。因此,方程组 A x = b 无解。
线性相关与无穷多解的情况
现在,我们来看线性相关导致的另一种情况:方程组有无穷多解。
沿用上一个矩阵 A = [[1, 2], [2, 4]],但这次我们选择目标向量 b = [3, 6]^T。可以验证,b 恰好位于由 a1 和 a2 张成的那条直线上(因为 b = 3 * a1)。
此时,方程组 A x = b 有解,但由于列向量线性相关,解不唯一。以下是两个可能的解:

- 取
x1 = 3, x2 = 0,则3*a1 + 0*a2 = [3, 6]^T = b。 - 取
x1 = 1, x2 = 1,则1*a1 + 1*a2 = [1, 2]^T + [2, 4]^T = [3, 6]^T = b。

实际上,存在无穷多种 x1 和 x2 的组合可以得到相同的 b。因此,方程组有无穷多解。

矩阵可逆的条件总结
综合以上分析,我们可以总结出矩阵 A 可逆(即对于任意 b,A x = b 总有唯一解 x)所需的条件。
为了使 A x = b 对任意 b 都有解,矩阵 A 的列空间必须能够张成整个 R^n 空间(n 为 A 的行数)。这就要求 A 必须拥有至少 n 个线性无关的列向量。


为了使解唯一(即排除无穷多解的情况),A 不能有多余的列。具体来说:
- 列数必须等于行数
n,即A必须是方阵。 - 这
n个列向量必须是线性无关的。

满足以上条件的方阵称为满秩矩阵或非奇异矩阵,它是可逆的。


反之,如果方阵的列向量线性相关,则称为奇异矩阵,它不可逆。

核心概念:矩阵的秩
最后,我们引入一个重要的概念:矩阵的秩。

矩阵的秩定义为矩阵中线性无关的行向量或列向量的最大数目。它揭示了矩阵所代表的线性变换的真正“维度”。

- 对于之前的奇异矩阵
A = [[1, 2], [2, 4]],由于其列线性相关,它的秩为1。 - 对于非奇异矩阵
A = [[1, 1], [2, 0]],其两列线性无关,它的秩为2(等于其行数和列数)。


结论: 一个 n x n 方阵可逆的充要条件是它的秩等于 n,即它是一个满秩(非奇异)矩阵。





本节课中我们一起学习了线性相关、张成空间(列空间)和矩阵秩的概念。我们了解到:
- 线性系统
A x = b的解的存在性取决于b是否在A的列空间内。 - 列向量的线性相关性会影响解的数量:可能导致无解或无穷多解。
- 矩阵可逆要求其是满秩方阵,即列向量线性无关且能张成整个空间。
理解这些基础是掌握更复杂线性代数概念和深度学习模型的关键。
006:向量与矩阵范数 📏

在本节课中,我们将要学习如何衡量向量和矩阵的“大小”。我们将介绍一个称为“范数”的函数,并探讨几种常见的范数类型及其性质。

范数的定义与性质

我们可以使用一个称为范数的函数来衡量向量的大小。最通用的向量范数形式是 Lp 范数,其定义如下:
公式:||x||_p = (∑|x_i|^p)^(1/p)
首先,范数的符号是向量符号左右两侧的两条竖线。这里的下标 p 定义了范数的 p 值。例如,在欧几里得范数(L2范数)的情况下,p 等于 2,因此我们会用 2 代替这里的 p。

Lp 范数的定义是:我们取原始向量 x 的所有元素,取其绝对值,然后计算这些绝对值的 p 次方,将它们求和,最后对结果取 1/p 次方。通过这个方程,我们可以看到范数将向量映射到非负值。我们可以将其解释为根据这个特定的 Lp 范数来测量到原点的距离。

从数学上讲,一个范数函数 f 必须满足以下几个条件:
- 零向量条件:如果向量的范数等于 0,那么该向量本身也必须等于 0。如果到原点的距离为 0,那么该向量的所有元素都必须为 0。
公式:||x|| = 0 ⇒ x = 0


-
三角不等式:向量
x和y之和的范数小于或等于各自范数之和。
公式:||x + y|| ≤ ||x|| + ||y|| -
齐次性:对于任意标量
α,向量乘以α后的范数等于α的绝对值乘以该向量本身的范数。
公式:||αx|| = |α| * ||x||


常见的向量范数示例

上一节我们介绍了范数的通用定义和性质,本节中我们来看看几种具体的、常用的向量范数。
以下是三种最常见的向量范数:
- L1 范数(绝对范数):
p = 1。它是向量所有元素绝对值之和。
公式:||x||_1 = ∑|x_i|


-
L2 范数(欧几里得范数):
p = 2。它测量的是欧几里得距离(直线距离)。我们也可以将其写为向量与其自身内积的平方根。
公式:||x||_2 = √(∑x_i^2) = √(x^T x) -
L∞ 范数(最大值范数):
p趋近于无穷大。它是向量中绝对值最大的元素。
公式:||x||_∞ = max(|x_i|)
范数的几何可视化
我们可以通过绘制“单位范数”的等高线来可视化这些范数,即所有范数值等于 1 的点构成的集合。以下是 L1、L2 和 L∞ 范数在二维空间中的形状:

- L1 范数:形成一个红色的菱形。例如,向量
(1, 0)的范数为 1,向量(0.5, 0.5)的范数也为 1,向量(0, 1)的范数同样为 1。由于我们取每个元素的绝对值,负方向也是如此。

-
L2 范数:形成一个绿色的圆形。这是因为如果我们令
√(x1^2 + x2^2) = 1,得到的就是圆的方程。 -
L∞ 范数:形成一个蓝色的正方形。例如,在这条水平线上,所有点的
x2坐标无关紧要,因为x1坐标已经是 1,所以这条线上所有点的 L∞ 范数都等于 1。


扩展与应用
最后,我们做一些扩展说明。
两个向量 x 和 y 的点积也可以用范数来表示:
公式:x^T y = ||x||_2 * ||y||_2 * cos(θ)
其中 θ 是向量 x 和 y 之间的夹角。
矩阵的大小也可以衡量。一个常见的矩阵大小度量是 Frobenius 范数,可以将其视为 L2 向量范数对矩阵的直接扩展。我们用下标 F 表示它,其定义是矩阵 A 所有元素平方和的平方根。
公式:||A||_F = √(∑∑ A_ij^2)

本节课中,我们一起学习了向量和矩阵范数的概念。我们定义了通用的 Lp 范数及其必须满足的数学性质,并具体介绍了 L1、L2 和 L∞ 这三种常见范数及其几何意义。最后,我们了解了点积与范数的关系,以及如何将范数的概念扩展到矩阵上。理解这些“大小”的度量方式,是深入学习线性代数和后续机器学习算法的基础。
深度学习的数学:P07:特殊矩阵与向量



在本节课中,我们将学习几种在深度学习中频繁出现且非常有用的特殊矩阵和向量。它们通常拥有特定的名称和性质,理解它们有助于简化计算并加深对线性代数的理解。
上一节我们介绍了矩阵和向量的基本运算,本节中我们来看看几种具有特殊结构的矩阵和向量。

对角矩阵

首先,我们来看对角矩阵。对角矩阵是一种仅在主对角线上有非零元素,而其他位置均为零的矩阵。

例如,矩阵 D 是一个对角矩阵,我们可以用 diag(d) 的记号来表示它,其中向量 d 的元素被放置在矩阵 D 的主对角线上。


公式:若 D = diag(d),则 Dii = di,且当 i ≠ j 时,Dij = 0。
与对角矩阵相乘非常简便。
如果我们用一个对角矩阵 D 乘以一个向量 x,由于 D 只有对角线元素非零,结果相当于用 D 的对角线元素分别缩放 x 的对应元素。


公式:Dx = d ⊙ x,其中 ⊙ 表示逐元素乘法(哈达玛积)。
求对角矩阵的逆也非常容易。我们不需要复杂的数值算法,只需将对角线上的每个元素分别取倒数,即可得到其逆矩阵。
公式:若 D = diag(d1, d2, ..., dn),则 D-1 = diag(1/d1, 1/d2, ..., 1/dn)。


对称矩阵
接下来介绍对称矩阵。对称矩阵是等于其自身转置的矩阵,即 A = A⊤。

这意味着矩阵中所有位于主对角线上方的元素,都与主对角线下方对称位置上的元素相等。
公式:对于对称矩阵 A,有 Aij = Aji。
对称矩阵经常出现在涉及距离或相似度的场景中。例如,如果我们有五个城市,可以用一个5x5的矩阵来表示城市之间的距离。从城市A到城市B的距离等于从城市B到城市A的距离,因此这个距离矩阵就是一个对称矩阵。
单位向量与正交性

现在,我们转向向量的特殊概念。单位向量是指其L2范数(欧几里得范数)等于1的向量。

公式:向量 x 是单位向量,当且仅当 ||x||2 = 1。

如果两个向量 x 和 y 的内积等于0,则称它们相互正交。
公式:x 与 y 正交 ⇔ x⊤y = 0。


一组向量,如果其中每个向量都是单位向量,并且彼此两两正交,则称这组向量是标准正交的。“标准正交”这个词是“正交”和“标准化”(即长度为1)的组合。


正交矩阵

最后,我们学习正交矩阵。正交矩阵是一个方阵,其所有行向量和所有列向量分别构成一组标准正交向量。
公式:方阵 A 是正交矩阵,当且仅当 A⊤A = AA⊤ = I,其中 I 是单位矩阵。


这个性质意味着正交矩阵的逆矩阵就是其转置矩阵。
公式:对于正交矩阵 A,有 A-1 = A⊤。


因此,计算正交矩阵的逆非常高效,只需要进行转置操作即可,即沿着主对角线翻转矩阵元素。

本节课中我们一起学习了四种重要的特殊矩阵和向量:对角矩阵、对称矩阵、单位向量与正交性以及正交矩阵。理解它们的定义和性质,对于后续学习矩阵分解、优化算法等深度学习核心内容至关重要。
008:特征值与奇异值分解 📊

在本节课中,我们将学习两种非常重要的矩阵分解工具:特征值分解与奇异值分解。它们是深度学习、自动驾驶和计算机视觉等课程中的核心数学概念。通过将矩阵分解为更基础的组成部分,我们可以更好地理解矩阵的性质和其代表的线性变换。

矩阵分解的意义
许多数学对象可以通过分解为组成部分来更好地理解。例如,整数可以分解为质因数,这能直接揭示该整数能被哪些数整除。类似地,我们关注如何分解矩阵。
特征值分解
特征值分解将一个矩阵分解为所谓的特征向量和特征值。

核心概念
一个方阵 A 的特征向量是一个非零向量 v,使得与 A 相乘仅改变其尺度(即长度),而不改变其方向。这个缩放因子被称为对应的特征值 λ。
用公式表示即:
A v = λ v
任何缩放后的 v 仍然是特征向量。为了使特征分解唯一,我们通常只考虑单位特征向量,即要求这些向量的欧几里得范数为 1。
构建分解矩阵
我们将所有特征向量拼接起来,形成一个矩阵 V,其中每一列都是一个特征向量。同样地,我们将所有特征值放入一个对角矩阵 Λ 中,使得特征值 λ₁, λ₂, ... 按顺序排列在对角线上,其余位置为0。
作为补充说明,为了消除歧义,我们通常按降序排列特征值。这意味着如果 λ₁ 不是最大的特征值,我们就将其与更大的特征值交换,直到实现降序排列。当然,我们也需要以同样的方式交换 V 的列,使它们保持对应关系。

矩阵 A 的特征值分解由以下表达式给出:
A = V Λ V⁻¹
可以证明,每个实方阵都有这样的特征分解。


对称矩阵的特殊情况
更进一步,对于非常常见的实对称矩阵 A,它可以被分解为一个更简单的表达式:
A = Q Λ Qᵀ
这里没有逆矩阵 Q⁻¹,只有转置 Qᵀ。这是因为在这种情况下,Q 是一个由 A 的特征向量组成的正交矩阵,其所有列都相互正交。这意味着我们可以用转置来替代求逆。
几何解释
上一节我们介绍了特征值分解的数学定义,本节中我们来看看它的几何意义,即这个变换如何影响空间中的元素集合。
在下图中,黑色箭头表示第一和第二特征向量 v₁ 和 v₂。图中还绘制了一个圆(代表一组点)以及两个没有特殊含义的示例向量,以便观察它们如何被变换。


当我们对圆和这些向量应用矩阵 A 时,它们会发生变化。我们可以通过将变换分解为三个子变换来理解这个过程:
- 首先乘以 Qᵀ。由于 Q 是正交矩阵,Qᵀ 相当于一个旋转矩阵。它将整个坐标系旋转,使其与坐标轴对齐。
- 然后应用对角矩阵 Λ,这意味着我们沿着各个坐标轴按特征值进行缩放。例如,如果 λ₁ > 1 且 λ₂ < 1,则水平方向被拉伸,垂直方向被压缩。
- 最后应用 Q,即旋转回原始坐标系。
通过这三个子变换,我们有效地将各向同性的单位圆,沿着 v₁ 和 v₂ 的方向,分别按 λ₁ 和 λ₂ 进行了缩放和扭曲。

相关性质
以下是关于特征值的一些重要性质:
- 如果一个矩阵的任何特征值为0,则该矩阵被称为奇异矩阵。这意味着其列之间存在依赖关系,因此矩阵不可逆。
- 矩阵的秩等于其非零特征值的数量。这是一个很方便的性质,通过特征值分解,我们可以知道有多少特征值为0或接近0,从而判断矩阵是否可逆以及对应线性系统有多少解。
- 只有满秩矩阵(即所有特征值均不为0)才是可逆的。
- 所有特征值均为正的矩阵称为正定矩阵。
- 所有特征值均为正或零的矩阵称为半正定矩阵。对于半正定矩阵,对于所有向量 x,有 xᵀ A x ≥ 0。正定矩阵额外保证,如果 xᵀ A x = 0,则向量 x 必须为零向量。
计算方法
当然,我们可以用纸笔推导和计算特征值分解。但在实践中,我们通常不需要这样做,因为有优秀的数值线性代数包可供使用。例如,在 Python 的 NumPy 库中,我们可以使用 numpy.linalg.eig 函数,通过一次调用即可将矩阵 A 分解为其特征向量和特征值。
奇异值分解
现在,让我们来讨论另一种分解:奇异值分解。为什么我们需要另一种分解呢?特征值分解的问题在于它只能应用于方阵。然而,对于非方阵,我们可以使用奇异值分解。

核心概念
奇异值分解在形式上与特征值分解相似,但它可以分解一个非方阵 A(例如一个 m×n 的实数矩阵)。
其分解形式为:
A = U D Vᵀ
其中:
- U 是一个 m×m 的正交矩阵。
- D 是一个 m×n 的对角矩阵(在非方阵情况下,它是一个矩形对角矩阵)。
- V 是一个 n×n 的正交矩阵。
D 对角线上的元素被称为奇异值。U 和 V 的列分别被称为左奇异向量和右奇异向量。


与特征值分解的关系

实际上,特征值分解和奇异值分解密切相关。考虑任意实矩阵 A 的奇异值分解 A = U D Vᵀ。
如果我们计算 AᵀA,利用转置的规则和 U 的正交性(UᵀU = I),可以得到:
AᵀA = (V Dᵀ Uᵀ)(U D Vᵀ) = V Dᵀ D Vᵀ = V D² Vᵀ
由此可见,A 的右奇异向量 V 正是矩阵 AᵀA 的特征向量。类似地,左奇异向量 U 是矩阵 AAᵀ 的特征向量。而 AᵀA 和 AAᵀ 的特征值等于 A 的奇异值的平方。
应用实例:主成分分析
最后,让我们看一个应用实例,这个应用我们将在深度学习课程的第11讲中更详细地探讨,它被称为主成分分析。
PCA 是一种用于分析大型高维数据集的技术。我们可以将任何高维数据集投影到一个更小的维度空间中以便观察。我们这样做的目的是在投影时保留最多的信息,即我们希望沿着方差最大的方向进行投影。
这里的一个美妙特性是:如果我们计算散点矩阵或协方差矩阵的特征向量,这些特征向量被称为主成分,它们指向方差最大的方向。这一点可以被证明。
在下图的示例中,我们有一个蓝色的二维数据集。我们计算了其特征向量,可以看到最大的方差分布在这个方向上,因为数据点是这样展开的。下一个与这个向量正交的最大方差方向是第二个特征向量所指的方向。
因此,如果我们要将这个二维数据集投影到一维空间中,我们能做的最佳选择就是沿着这条线(第一主成分方向)投影,因为这是方差最大化分布的方向。在此图示中,两个特征向量 w₁ 和 w₂ 按其对应特征值的平方根进行了缩放,这指示了在每个方向上的标准差分布范围。
总结

本节课中,我们一起学习了两种强大的矩阵分解方法:特征值分解与奇异值分解。特征值分解适用于方阵,揭示了矩阵在其特征向量方向上的缩放特性。奇异值分解则更具普适性,可应用于任意矩阵,并与之密切相关。最后,我们看到了这些概念在数据降维技术(如主成分分析)中的实际应用,它们帮助我们在保留关键信息的同时简化数据。掌握这些工具对于理解后续更复杂的机器学习与深度学习模型至关重要。
009:迹算子与行列式 🧮



在本节课中,我们将学习两个重要的矩阵算子:迹算子和矩阵的行列式。它们是线性代数中的核心概念,对于理解矩阵的性质和后续的深度学习理论至关重要。

上一节我们介绍了特征值分解,本节中我们来看看两个与矩阵特征值密切相关的算子。
迹算子
迹算子返回一个矩阵所有对角线元素的和。换句话说,对于一个矩阵 A,其迹表示为 tr(A),计算公式如下:

tr(A) = Σᵢ Aᵢᵢ
其中 Aᵢᵢ 表示矩阵 A 第 i 行第 i 列的元素。

迹算子有几个重要的性质。以下是关于迹算子的一些关键点:

- 弗罗贝尼乌斯范数:迹算子可以简化弗罗贝尼乌斯范数的写法。矩阵 A 的弗罗贝尼乌斯范数可以表示为 ||A||_F = √(tr(AAᵀ))。
- 转置不变性:矩阵的迹在转置操作下保持不变,即 tr(A) = tr(Aᵀ)。这是因为转置操作不会改变矩阵的对角线元素。
- 循环置换不变性:对于多个方阵的乘积,迹在循环置换下保持不变。例如,对于三个方阵 A、B、C,有 tr(ABC) = tr(CAB) = tr(BCA)。

行列式


与迹算子不同,方阵的行列式等于其所有特征值的乘积。对于一个矩阵 A,其行列式表示为 det(A),计算公式如下:

det(A) = Πᵢ λᵢ


其中 λᵢ 是矩阵 A 的第 i 个特征值。
行列式可以被视为衡量矩阵 A 对空间进行伸缩变换程度的一个指标。


以下是行列式值的几何解释:

- 行列式 = 1:变换是保体积的。输入向量所描述的空间体积在乘以矩阵 A 后保持不变。
- 行列式 = 0:空间沿着至少一个维度被完全压缩。这意味着矩阵是奇异的或秩亏的,它将整个空间的体积压缩为零。
- 行列式 > 1 或 0 < 行列式 < 1:变换分别导致空间膨胀或收缩。行列式的绝对值大小反映了膨胀或收缩的程度。


本节课中我们一起学习了迹算子和行列式这两个矩阵算子。我们了解了迹是矩阵对角线元素之和,而行列式是所有特征值的乘积。更重要的是,我们探讨了行列式的几何意义——它衡量了矩阵变换对空间体积的缩放效应。理解这些概念是掌握后续更复杂线性代数运算和深度学习模型的基础。
010:微分学 📈


在本节课中,我们将学习微分学的基础知识。微分学是理解函数如何随输入变化而变化的数学工具,它是深度学习中优化算法的核心。我们将从单变量函数的导数开始,逐步扩展到多变量函数,并介绍链式法则、偏导数、全导数以及隐函数微分等重要概念。

单变量函数的导数

上一节我们介绍了函数的基本概念,本节中我们来看看如何衡量函数值随其输入变化的敏感度,这就是导数的定义。


对于一个单变量函数 f(x),其在点 a 处的导数定义为以下极限:

公式: f'(a) = lim (h -> 0) [f(a + h) - f(a)] / h
如果这个极限存在,我们就说函数在点 a 处可微,记作 f'(a) 或 df/dx|_a。导数的几何意义是函数图像在点 (a, f(a)) 处切线的斜率。


高阶导数

在理解了基本导数之后,我们可以进一步探讨高阶导数。高阶导数就是导数的导数。
例如,二阶导数记作 f''(a) 或 d²f/dx²|_a,它衡量的是函数斜率本身的变化率。

不可微函数的例子

并非所有函数在所有点都可微。以下是两个不可微函数的典型例子:
以下是两个关键例子:
- 不连续函数:在跳跃间断点处,函数不连续,自然也不可微。因为从左侧和右侧趋近该点时,极限值不同。
- 绝对值函数:函数 y = |x| 在 x=0 处连续,但不可微。因为从左侧趋近时,导数为 -1;从右侧趋近时,导数为 +1,左右导数不相等。

链式法则
当我们处理复合函数时,链式法则提供了计算其导数的有效方法。
链式法则表述如下:若 h(x) = f(g(x)),则 h(x) 关于 x 的导数为:
公式: h'(x) = f'(g(x)) * g'(x)
或使用莱布尼茨记号:
公式: dh/dx = (df/dg) * (dg/dx)
示例: 设 h(x) = (2x² + x)³。根据链式法则,其导数为:
代码/公式: h'(x) = 3*(2x² + x)² * (4x + 1)

多变量函数的导数:偏导数与全导数
之前我们讨论的都是单变量函数。现在,让我们将视野扩展到依赖于多个变量的函数。
考虑一个函数 f(x, y),其中 y 本身也可能是 x 的函数。这时,我们需要区分偏导数和全导数。
偏导数


偏导数在计算时,将其他所有变量视为常数。函数 f 关于 x 的偏导数记作 ∂f/∂x。
示例: 对于 f(x, y) = x * y,其关于 x 的偏导数为:
公式: ∂f/∂x = y
全导数
全导数则考虑了变量之间所有可能的依赖关系。如果 y 是 x 的函数,那么 f 关于 x 的全导数由多变量链式法则给出:


公式: df/dx = (∂f/∂x) * (dx/dx) + (∂f/∂y) * (dy/dx) = ∂f/∂x + ∂f/∂y * dy/dx

示例: 同样对于 f(x, y) = x * y,但现在假设 y = x。则其全导数为:
计算过程: df/dx = y * 1 + x * 1 = x + x = 2x
这与偏导数 ∂f/∂x = y = x 的结果不同,体现了考虑变量依赖关系的重要性。



隐函数与隐函数微分
有些函数关系无法显式地写成 y = f(x) 的形式,而是通过一个方程 F(x, y) = 0 来隐含地定义 y 与 x 的关系,这称为隐函数。
示例: 方程 x² + y² = 1 定义了一个单位圆。它无法解出唯一的 y = f(x),但依然描述了一条曲线。
为了求这种隐函数的导数(即曲线上某点的切线斜率),我们使用隐函数微分法:对方程 F(x, y) = 0 两边同时关于 x 求全导数,然后解出 dy/dx。


对于方程 x² + y² = 1:
- 两边对 x 求全导数:2x + 2y * (dy/dx) = 0
- 解出 dy/dx:dy/dx = -x / y



注意,结果中仍然包含 y,这是隐函数微分的一个特点。




本节课中我们一起学习了微分学的核心内容。我们从单变量函数的导数定义出发,介绍了链式法则,并重点区分了多变量函数中的偏导数与全导数。最后,我们探讨了如何通过隐函数微分法处理无法显式表达的函数关系。掌握这些概念是理解深度学习模型中梯度计算的基础。
011:向量微积分 🧮
在本节课中,我们将从微分学转向向量微积分,即向量场的微分(以及积分)。本单元我们只讨论微分。这部分内容与计算机视觉和深度学习高度相关,因为在这些领域中我们大量处理矩阵,因此需要了解如何对它们进行微积分运算。

概述


向量微积分处理的是输入和输出均为多维向量的函数。我们将学习如何计算这类函数的导数,特别是雅可比矩阵和梯度,并理解链式法则在向量函数中的形式。这些是理解深度学习模型(如神经网络)中参数优化(如梯度下降)的基础。


向量到向量函数的导数

上一节我们讨论了多元标量函数的导数。本节中,我们来看看当函数的输入和输出都是向量时,导数会是什么形式。
考虑一个函数 f,它从 R^n 映射到 R^m。我们使用粗体符号表示向量:
f: R^n → R^m

对于这样的函数,其导数(称为雅可比矩阵)是一个矩阵。这是因为我们需要描述输入向量 x 的每一个微小变化如何影响输出向量 f(x) 的每一个分量。

函数 f 在点 x 处关于 x 的偏导数定义如下:


$$
\frac{\partial \mathbf{f}}{\partial \mathbf{x}}(\mathbf{x}) =
\begin{bmatrix}
\frac{\partial f_1}{\partial x_1}(\mathbf{x}) & \frac{\partial f_1}{\partial x_2}(\mathbf{x}) & \cdots & \frac{\partial f_1}{\partial x_n}(\mathbf{x}) \
\frac{\partial f_2}{\partial x_1}(\mathbf{x}) & \frac{\partial f_2}{\partial x_2}(\mathbf{x}) & \cdots & \frac{\partial f_2}{\partial x_n}(\mathbf{x}) \
\vdots & \vdots & \ddots & \vdots \
\frac{\partial f_m}{\partial x_1}(\mathbf{x}) & \frac{\partial f_m}{\partial x_2}(\mathbf{x}) & \cdots & \frac{\partial f_m}{\partial x_n}(\mathbf{x})
\end{bmatrix}
$$
这个矩阵是一个 m × n 矩阵。矩阵中的第 i 行、第 j 列元素是第 i 个输出分量 ( f_i ) 关于第 j 个输入分量 ( x_j ) 的偏导数。
两种重要的特殊情况
理解了通用形式后,我们来看两个在深度学习中极其常见的特例。
1. 标量到标量函数 (n=1, m=1)

这是最基础的微积分情况。函数形式为:
( f: \mathbb{R} \to \mathbb{R} )
其导数就是我们所熟知的单变量导数,是一个 1×1 矩阵(即一个实数):
$$
\frac{df}{dx}(x) \in \mathbb{R}
$$

2. 向量到标量函数 (n>1, m=1)

这是深度学习中损失函数的典型情况:输入是许多参数(一个向量),输出是一个标量损失值。
函数形式为:
( f: \mathbb{R}^n \to \mathbb{R} )
其导数是一个特殊的向量,称为梯度,记作 ( \nabla_{\mathbf{x}} f ) 或 ( \frac{\partial f}{\partial \mathbf{x}} )。
梯度是一个 n 维行向量(或列向量,取决于约定):

$$
\nabla_{\mathbf{x}} f(\mathbf{x}) = \frac{\partial f}{\partial \mathbf{x}}(\mathbf{x}) = \begin{bmatrix} \frac{\partial f}{\partial x_1}(\mathbf{x}), & \frac{\partial f}{\partial x_2}(\mathbf{x}), & \cdots, & \frac{\partial f}{\partial x_n}(\mathbf{x}) \end{bmatrix}
$$


梯度指向函数值增长最快的方向,在优化算法(如梯度下降)中用于更新参数。


向量值函数的链式法则

现在,让我们将链式法则推广到向量函数。这是进行复杂函数求导(如神经网络反向传播)的核心工具。
假设我们有两个函数:
- f: R^n → R^m, 自变量为 x
- g: R^m → R^p, 自变量为 y
我们构造复合函数 h(x) = g(f(x))。那么 h: R^n → R^p。

向量值函数的链式法则如下:
$$
\frac{\partial \mathbf{h}}{\partial \mathbf{x}}(\mathbf{x}) = \frac{\partial \mathbf{g}}{\partial \mathbf{y}}(\mathbf{f}(\mathbf{x})) \cdot \frac{\partial \mathbf{f}}{\partial \mathbf{x}}(\mathbf{x})
$$


关键点:
- ( \frac{\partial \mathbf{g}}{\partial \mathbf{y}} ) 是一个 p × m 矩阵。
- ( \frac{\partial \mathbf{f}}{\partial \mathbf{x}} ) 是一个 m × n 矩阵。
- 它们的矩阵乘法结果 ( \frac{\partial \mathbf{h}}{\partial \mathbf{x}} ) 是一个 p × n 矩阵。
- 这里的“·”表示矩阵乘法。


链式法则的一个重要特例:全微分
链式法则有一个非常重要的特例,它将我们带回了熟悉的“全微分”概念。

考虑以下情况:
- f: R → R^n (标量输入,向量输出)
- g: R^n → R (向量输入,标量输出)
复合函数 h(x) = g(f(x)) 是一个标量到标量的函数:h: R → R。
应用链式法则:
$$
\frac{dh}{dx}(x) = \frac{\partial g}{\partial \mathbf{y}}(\mathbf{f}(x)) \cdot \frac{\partial \mathbf{f}}{\partial x}(x)
$$
现在:
- ( \frac{\partial g}{\partial \mathbf{y}} ) 是一个 1 × n 的行向量(梯度)。
- ( \frac{\partial \mathbf{f}}{\partial x} ) 是一个 n × 1 的列向量。
它们的点积是一个标量。我们可以将其写为求和形式:

$$
\frac{dh}{dx}(x) = \sum_{i=1}^{n} \frac{\partial g}{\partial y_i}(\mathbf{f}(x)) \cdot \frac{\partial f_i}{\partial x}(x)
$$
这正是我们之前学过的全导数公式!
它描述的是:一个最终标量输出 h,依赖于中间变量 y = f(x),而 y 的每个分量 ( y_i ) 又都依赖于输入 x。x 的微小变化会通过所有中间路径影响最终结果,总效应是这些路径贡献的总和。



总结
本节课中我们一起学习了向量微积分的基础:



- 雅可比矩阵:向量到向量函数的导数,是一个矩阵,包含了所有输出分量关于所有输入分量的偏导数。
- 梯度:向量到标量函数导数的特例,是一个向量,指向函数值上升最快的方向,是优化算法的基石。
- 向量链式法则:复合向量函数求导的规则,表现为雅可比矩阵的乘法。这是理解神经网络反向传播算法的数学基础。
- 与全导数的联系:链式法则的一个特例直接导出了全导数公式,揭示了多路径依赖下变化率的求和本质。


掌握这些概念,你就拥有了理解深度学习模型如何通过梯度下降等算法从数据中“学习”的关键数学工具。下一部分,我们可以在此基础上探讨这些知识在具体优化算法中的应用。
012:随机变量与概率分布 📊

在本节课中,我们将要学习概率论与信息论的基础知识,从随机变量和概率分布开始。理解这些概念对于处理深度学习中的不确定性至关重要。


为什么需要概率论?🤔
几乎所有活动都需要在不确定性存在的情况下进行推理。我们主要考虑三种不同的不确定性来源。
第一种是模型系统固有的随机性。例如,为自动驾驶汽车构建感知系统时,观察交通场景中的其他参与者,你无法精确知道他们的下一步计划,其行为存在无法建模的固有随机性。

第二种是不完全可观测性。这在计算机视觉等领域非常常见,例如从2D图像重建3D模型时,2D图像只是3D世界的投影,我们拥有的是不完整的场景信息,需要利用归纳偏置和先验知识来恢复缺失的信息。
第三种是不完全建模。例如,由于计算限制,机器人定位时可能将3D环境离散化为体素网格,这种表示的离散化会导致无法精确定位。我们的模型总是对无限复杂真实世界的一种近似,因此总是不完全的。
概率论正是处理这些不确定性的数学框架。它允许我们表示不确定的陈述,处理不同来源的不确定性,并在模型中传播不确定性。它也是量化不确定性的工具。信息论与概率论密切相关,它量化了分布中不确定性的总量,我们将在后续单元讨论。
随机变量与概率分布 📈
让我们从定义一些术语开始。随机变量是一个可以随机取不同值的变量。与取特定值的常规变量不同,随机变量与某种随机性相关联,通常通过分布来指定。

随机变量可以是离散的或连续的。离散随机变量具有有限或可数无限个可能状态,我们通常处理有限状态的情况。连续随机变量则与一个实数值相关联。
概率分布描述了随机变量(或一组随机变量)取每个可能状态的可能性。根据处理的是离散还是连续变量,概率分布由不同的函数描述。
- 对于离散变量,使用概率质量函数。
- 对于连续变量,使用概率密度函数。
需要注意,在数学文本中,读者通常需要根据随机变量的身份来推断使用哪个函数。我们通常用 P(x) 表示变量 x 的概率质量函数或密度函数,尽管名称相同,但根据参数 x 的不同,它们代表不同的分布。

离散概率分布 🎲
上一节我们介绍了随机变量的基本概念,本节中我们来看看离散概率分布的具体形式。

一个随机变量(通常用大写字母表示,如 X)可以从一个离散的结果集合 𝒳 中取值。例如,一个均匀的六面骰子,每个数字(1到6)出现的概率都是 1/6。
我们通常使用左边的简写符号来表示随机变量 X 取值为 x 的概率。完整的写法如右边所示:P(X = x)。这个概率必须在0到1之间。因为 P(X = x) 的写法较长,我们常简写为 P(x)。
在离散概率分布中,P(x) 被称为概率质量函数。与之相对,P(X)(大写 X)表示 X 上的概率分布。如果随机变量 X 服从分布 P(x),我们常写作 X ~ P(x)。

一个有效的概率质量函数 P(x) 必须满足以下条件:
- 对于任何可能的参数
x,概率必须大于等于0:P(x) ≥ 0。 - 对所有可能结果的概率求和必须等于1:
∑_{x∈𝒳} P(x) = 1。
联合、边缘与条件概率 🤝
现在让我们考虑涉及多个随机变量的情况:联合概率、边缘概率和条件概率。
两个随机变量 X 和 Y 的联合概率简写为 P(x, y),完整含义是 P(X=x, Y=y),即 X 取值为 x 且 Y 取值为 y 同时发生的概率。
随机变量 X 在给定另一个随机变量 Y 的条件下的条件概率简写为 P(x|y),其定义为联合概率除以 Y 的边缘概率:P(x|y) = P(x, y) / P(y)。这表示在已知 Y 取值为 y 的条件下,X 取值为 x 的概率。
最后,随机变量 Y 的边缘概率 P(y) 定义为对所有其他随机变量(这里是 X)的可能状态求和:P(y) = ∑_{x} P(x, y)。我们通常使用左边的简写符号,这在处理长表达式时更易于阅读。
一个离散概率的例子 📊
为了让概念更具体,让我们看一个离散概率的例子。考虑两个随机变量 X 和 Y,每个都有三个可能状态(x1, x2, x3 和 y1, y2, y3)。我们可以用一个计数表来表示观测到的联合出现次数。
以下是观测到的计数表:



| y1 | y2 | y3 | |
|---|---|---|---|
| x1 | 1 | 1 | 1 |
| x2 | 1 | 1 | 2 |
| x3 | 1 | 1 | 1 |



总计数为 10。根据这个表,我们可以计算各种概率。



联合概率 P(x, y):将每个单元格的计数除以总计数(10)。
P(x1, y1) = 1/10 = 0.1P(x2, y3) = 2/10 = 0.2(其他大部分为0.1)
边缘概率 P(x):对 y 的所有可能值求和。
P(x1) = 0.1 + 0.1 + 0.1 = 0.3P(x2) = 0.1 + 0.1 + 0.2 = 0.4P(x3) = 0.1 + 0.1 + 0.1 = 0.3
(验证:0.3 + 0.4 + 0.3 = 1)
边缘概率 P(y):对 x 的所有可能值求和。
P(y1) = 0.1 + 0.1 + 0.1 = 0.3P(y2) = 0.1 + 0.1 + 0.1 = 0.3P(y3) = 0.1 + 0.2 + 0.1 = 0.4

条件概率 P(x | y3):在 y3 发生的条件下,看 x 的分布。我们取 y3 对应的列(0.1, 0.2, 0.1),其和为0.4。将其归一化(每个值除以0.4)得到条件概率:
P(x1|y3) = 0.1 / 0.4 = 0.25P(x2|y3) = 0.2 / 0.4 = 0.5P(x3|y3) = 0.1 / 0.4 = 0.25

条件概率 P(y | x2):在 x2 发生的条件下,看 y 的分布。我们取 x2 对应的行(0.1, 0.1, 0.2),其和为0.4。将其归一化得到:
P(y1|x2) = 0.1 / 0.4 = 0.25P(y2|x2) = 0.1 / 0.4 = 0.25P(y3|x2) = 0.2 / 0.4 = 0.5

概率的基本规则 ⚖️
从上面的例子中,我们已经接触到了概率论的两个基本规则。
第一个是求和规则,即边缘化规则。对于离散变量:
P(x) = ∑_{y} P(x, y)P(y) = ∑_{x} P(x, y)
第二个是乘积规则,它关联了联合概率、条件概率和边缘概率:
P(x, y) = P(x|y) P(y)- 或等价地
P(x, y) = P(y|x) P(x)

由乘积规则可以推导出著名的贝叶斯定理:
P(y|x) = [P(x|y) P(y)] / P(x)
我们将在后面讨论决策论时看到贝叶斯定理的应用。

连续概率分布 📉
现在让我们转向连续概率分布。在这种情况下,x 是一个连续随机变量,在实数集 ℝ 中取值。
x 在某个区间 [a, b] 内取值的概率,通过积分概率密度函数来计算:
P(a ≤ x ≤ b) = ∫_{a}^{b} p(x) dx
我们称 p(x) 为概率密度函数。


一个有效的概率密度函数必须满足以下条件:
- 处处非负:
p(x) ≥ 0。 - 在整个定义域上的积分等于1:
∫_{-∞}^{∞} p(x) dx = 1。
此外,随机变量 x 取值小于等于 c 的概率由累积分布函数给出:
P(x ≤ c) = ∫_{-∞}^{c} p(x) dx
当 c 趋于无穷大时,该值趋于1。
重要提示:对于连续随机变量,取某个精确值的概率通常为0(例如
P(x=0.5) = 0),但该点处的概率密度p(0.5)可以大于0。这是概率密度与概率本身的关键区别。
连续情况下的联合、边缘与条件概率 🏔️
与离散情况类似,我们可以定义连续随机变量的联合、边缘和条件概率。


- 联合密度:
p(x, y) - 条件密度:
p(x|y) - 边缘密度:
p(y) = ∫ p(x, y) dx(通过对另一个变量积分得到)

我们可以用高斯分布的例子来可视化。考虑一个二维高斯分布,其等高线图展示了联合概率密度 p(x_A, x_B)。x_A 的边缘分布 p(x_A) 是通过对 x_B 维度积分得到的,在图上表现为一个一维高斯曲线。条件分布 p(x_A | x_B=0.7) 则是在 x_B=0.7 这条线上“切片”得到的分布,它是另一个一维高斯,但其均值和方差与边缘分布不同。
连续概率的求和规则和乘积规则与离散情况完全类似,只是求和换成了积分:
- 求和(边缘化)规则:
p(y) = ∫ p(x, y) dx - 乘积规则:
p(x, y) = p(x|y) p(y)
贝叶斯定理在连续情况下形式相同。



独立性与条件独立性 🧩
最后,我们来学习独立性的概念。
如果两个随机变量 x 和 y 的联合概率分布可以分解为各自边缘概率的乘积,则称它们是独立的:
p(x, y) = p(x) p(y)
如果两个随机变量 x 和 y 在给定第三个随机变量 z 的条件下,其联合条件概率可以分解,则称它们是条件独立的:
p(x, y | z) = p(x | z) p(y | z)


这些性质有简明的记号表示:
- 独立性:
x ⫫ y - 条件独立性:
x ⫫ y | z




本节课中我们一起学习了概率论的基础:随机变量、离散与连续概率分布、联合/边缘/条件概率、概率的基本规则(求和、乘积、贝叶斯定理)以及独立性的概念。这些是理解深度学习中不确定性建模和贝叶斯方法的基石。
014:贝叶斯决策理论 🧠

在本节课中,我们将学习贝叶斯决策理论。我们将通过一个简单的数字分类例子,来理解贝叶斯定理中涉及的各个量,并直观地展示如何结合先验知识和观测数据做出最优决策。

上一节我们介绍了贝叶斯定理的基本公式。本节中,我们来看看如何将其应用于一个实际的决策问题。
问题设定:数字分类任务
考虑一个数字分类任务,目标是区分字母“A”和“B”。我们有一个像素矩阵图像,需要判断它属于“A”类还是“B”类。我们的目标是做出分类决策,以最小化某种错误度量的概率。
先验概率
我们可以从思考这些数字出现的先验分布入手。在自然文本中,字母“A”比“B”更常见。假设“A”出现的频率是“B”的三倍。
以下是先验概率的设定:
- 设类别1(对应字母“A”)的概率为 P(C1) = 0.75。
- 设类别2(对应字母“B”)的概率为 P(C2) = 0.25。
先验概率必须是一个分布,其在整个定义域上的和为1,这里确实满足。这些数字可以通过统计(例如维基百科文本)并归一化得到。
特征与似然
我们用特征向量 x 来描述每个数字。特征可以是简单的(如图像中黑色像素的数量、宽高比),也可以是复杂的(如神经网络的表示)。为了便于可视化,我们假设特征空间是一维的。
似然 P(x|Ck) 定义了在给定类别(A或B)下,观测到特定特征 x 的可能性。我们需要两个不同的条件分布来区分类别。
以下是两个类别的似然分布特点:
- 对应字母“A”的特征分布(绿色)更偏向左侧。
- 对应字母“B”的特征分布(红色)更窄,且更偏向右侧。
这两个分布有重叠区域,说明分类并非易事。对于某些特征值,两个类别的似然可能都很高。
决策困境与贝叶斯定理
对于一个给定的特征值 x,我们应该将其归为哪一类?
- 如果 x 位于绿色分布的高概率区,显然应归为A类。
- 如果 x 位于红色分布的高概率区,显然应归为B类。
- 但如果 x 位于两个分布重叠的中间区域呢?此时,B类的似然可能略高于A类。然而,由于A类有更高的先验概率,我们可能仍应将其判为A类。
如何形式化这种直觉?这就需要用到贝叶斯定理。
我们将贝叶斯定理应用于当前语境,其中 y 对应类别,x 对应特征。公式如下:
P(Ck|x) = [ P(x|Ck) * P(Ck) ] / P(x)
以下是公式中各部分的名称:
- P(Ck|x):后验概率。这是我们最终关心的,即在观测到特征 x 后,该样本属于类别 Ck 的概率。
- P(x|Ck):似然。我们前面已经讨论过。
- P(Ck):先验概率。
- P(x):证据或归一化因子。它是特征 x 的边际概率,对于寻找最可能的类别而言是一个常数。
在决策理论中,我们通常选择具有最高后验概率的类别。
可视化决策过程
我们可以将这个过程可视化。
- 首先,我们有两个类别的似然函数曲线。
- 然后,将每条似然曲线乘以其对应的先验概率。这会显著改变曲线的形状和相对高度。
- 最后,除以归一化因子(证据),得到后验概率曲线。

此时,两条后验概率曲线的交点就是决策边界。如果特征值 x 落在交点左侧,我们应将其判为A类;否则判为B类。
简而言之,贝叶斯决策理论对先验和似然进行建模,然后选择具有最高后验概率的类别。
更完整的图景:损失函数
当然,这还不是决策理论的全部。完整的决策理论通常还会考虑损失函数或风险,以进行经验风险最小化。
并非所有分类错误的后果都是相等的。例如,在癌症检测中:
- 假阴性(有癌症但未检出)的危害远大于假阳性(无癌症但误报)。
- 假阳性可能引发不必要的治疗,但能很快被发现。
- 假阴性则可能导致患者错过治疗时机。
因此,通常会引入一个额外的损失或风险函数来评估整体风险,但它整合了我们所讨论的基于似然和先验的贝叶斯方法。

本节课中,我们一起学习了贝叶斯决策理论。我们通过一个二分类例子,理解了先验概率、似然函数和后验概率的概念,并看到了如何利用贝叶斯定理结合先验知识与观测数据做出最优分类决策。我们还了解到,在实际应用中,决策过程可能需要引入损失函数来权衡不同错误类型的代价。
015:期望、方差与协方差 📊

在本节课中,我们将学习随机变量及其函数的一些基本性质,特别是被称为期望、方差以及在多元情况下的协方差。这些概念是理解概率分布和后续机器学习模型的基础。
期望值
上一节我们介绍了随机变量的概念,本节中我们来看看如何衡量一个随机变量或其函数的“平均”表现,这就是期望值。

一个函数 f(x) 相对于概率分布 P(x) 的期望值或期望,是从该分布中抽取样本时 f(x) 的平均值。


对于离散变量,可以通过求和计算:
E_{x \sim P}[f(x)] = \sum_{x} P(x) f(x)
这是一个以概率 P(x) 为权重的加权和。

对于连续变量,则通过积分计算:
E_{x \sim P}[f(x)] = \int P(x) f(x) dx
这同样是一个加权平均。


一个重要的特例是当函数 f(x) 是恒等函数(即 f(x) = x)时,我们得到随机变量 X 本身的期望值。

对于离散变量:
E[x] = \sum_{x} P(x) x
对于连续变量:
E[x] = \int P(x) x dx
期望的一个重要性质是它是一个线性算子。这意味着:
E[\alpha f(x) + \beta g(x)] = \alpha E[f(x)] + \beta E[g(x)]
我们可以将期望算子线性地分解到函数内部。
对于高斯随机变量,其期望值就是该分布的均值 \mu,因为分布是对称的。

方差
了解了数据的“中心”位置(期望)后,我们接下来关心数据围绕这个中心的分散程度,这就是方差。

方差衡量了当我们从概率分布中抽取不同的 x 值时,函数 f(x) 的值变化有多大。

f(x) 的方差定义为:
Var(f(x)) = E[(f(x) - E[f(x)])^2]
即,函数值与其期望值之差的平方的期望。



例如,对于高斯随机变量,方差决定了分布的“宽度”或“扩散”程度。

- 当方差较低时,
f(x)的值会紧密地聚集在其期望值附近,概率密度函数更窄、峰值更高。 - 当方差较高时,分布会更加分散。

方差的平方根被称为标准差,它是定义单变量高斯分布的一个参数(通常记为 \sigma)。
协方差
在多元情况下,我们不仅关心单个变量的分散程度,还关心不同变量之间的关系。协方差就是衡量这种线性关系的工具。

协方差衡量两个值线性相关的程度。
对于函数 f(x) 和 g(y),其协方差定义为:
Cov(f(x), g(y)) = E[(f(x) - E[f(x)]) (g(y) - E[g(y)])]
即,各自减去期望值后的乘积的期望。


对于一个 n 维随机向量,其协方差矩阵是一个 n \times n 的矩阵,其中每个元素 (i, j) 是第 i 维与第 j 维之间的协方差。
以下是协方差矩阵的一些关键点:
- 协方差矩阵的对角线元素是各个维度自身的方差。
- 非对角线元素描述了不同维度之间的协方差。
- 协方差的符号决定了变量是正相关还是负相关。
我们可以通过二维高斯分布的协方差矩阵来直观理解:
\Sigma = \begin{bmatrix} Var(x) & Cov(x, y) \\ Cov(y, x) & Var(y) \end{bmatrix}
- 如果
Cov(x, y) > 0,则x和y呈正相关:x值较大时,y值也倾向于较大。 - 如果
Cov(x, y) < 0,则x和y呈负相关:x值较大时,y值倾向于较小。 - 如果
Cov(x, y) \approx 0,则x和y几乎不相关。
总结
本节课中我们一起学习了概率论中的三个核心概念:
- 期望:衡量随机变量或其函数的加权平均值,是线性算子。
- 方差:衡量随机变量取值相对于其期望的离散程度,是标准差的平方。
- 协方差:衡量两个随机变量之间的线性相关程度,协方差矩阵则描述了多元随机向量中各维度之间的关系。

理解这些概念对于掌握后续的机器学习算法,尤其是涉及概率模型和优化目标的部分至关重要。
016:信息与熵 📊
在本节课中,我们将学习信息论的基础知识。信息论是应用数学的一个分支,旨在量化给定信号中包含的信息量。我们将介绍自信息、香农熵等核心概念,并探讨它们与概率分布的关系。

信息论的起源 📜
上一节我们介绍了本课程的目标。本节中,我们来看看信息论的起源。
信息论之父是克劳德·香农。他在1948年发表了开创性论文《通信的数学理论》。一年后,这篇论文以书名《通信的数学理论》出版,这表明其重要性在当时已得到广泛认可,并奠定了整个信息论领域的基础。
以下是香农1948年原始论文的截图。


让我们看看这篇论文的开头几行。他写道:“最近各种调制方法(如PCM和PM)的发展,它们用带宽换取信噪比,加深了人们对通用通信理论的兴趣。奈奎斯特和哈特利关于该主题的重要论文包含了这一理论的基础。在本文中,我们将扩展该理论,纳入一些新因素,特别是信道中噪声的影响,以及由于原始消息的统计结构和信息的最终目的地性质而可能实现的节省。”
香农考虑的系统结构如下:信息源产生消息,通过数字信号传输,在接收端接收,然后解码回其原始形式。这个信道可能受到噪声的影响。


关于克劳德·香农有一个小轶事。香农于1960年至2001年生活。他从密歇根大学和麻省理工学院毕业后,于1941年加入AT&T贝尔电话实验室。1948年,他在《贝尔系统技术杂志》上发表了著名的论文《通信的数学理论》。这篇论文奠定了现代信息论的基础。该论文引入了“比特”一词。他关于信息可以作为一串0和1发送的概念为通信革命铺平了道路。据说冯·诺依曼建议香农使用“熵”这个术语,不仅因为它在物理学中的相似性,还因为没有人真正知道熵是什么。因此,在任何讨论中,你总是会占据优势。

信息论与机器学习 🤖
信息论最初是为了研究在噪声信道上发送来自离散字母表的消息而发明的。例如,通过无线电波进行消息通信。信息论告诉我们如何为这些消息设计最优编码,以及如何计算使用各种编码方案采样的消息的预期长度。我们将看到一个非常简单的例子。
在本短期课程中,我们主要使用信息论中的几个关键思想。这个领域非常庞大,我们甚至无法涵盖原始论文的一小部分。因此,我们只使用信息论中的几个关键思想,目的是描述概率分布或量化概率分布之间的相似性。这就是信息论在我们课程背景下进入机器学习的地方。
什么是信息? 💡
信息论的基本直觉如下:观察一个不太可能发生的事件比观察一个很可能发生的事件提供的信息更多。直观上,这是有道理的。例如,消息“今天早上太阳升起了”是完全无信息的。太阳每天早晨都会升起。发送这条消息不值得,它不包含任何有价值的信息。相比之下,消息“今天早上有日食”则信息量很大。日食实际上相当罕见。因此,如果你告诉我发生了日食,这对我来说信息量很大。
这是基本的直觉。像日食这样不太可能的事件比非常可能的事件(如太阳每天升起)包含更多的信息。换句话说,接收这条消息让我们感到惊讶。“惊讶”是“信息”的另一个说法。我们可以非正式地将信息内容量化为惊讶的程度。如果我们感到惊讶,这意味着我们获得了之前未知的信息。


量化信息:自信息 📏
我们希望以一种形式化这种直觉的方式来量化信息。可能的事件应该具有低信息内容。确定的事件应该没有信息内容。然而,不太可能的事件应该具有更高的信息内容。我们强加的另一个规则是:如果观察独立事件,那么信息应该相加。例如,发现抛出的硬币两次正面朝上应该传达两倍于发现一次正面朝上的信息。
给定这些假设,只有一个公式可以满足所有这些要求。我们定义自信息。我们将这个信息量称为事件 X = x 的自信息,其中 X 是一个随机变量,取值为 x。自信息 I(x) 定义为:
I(x) = -log(p(x))
这里,对数通常指自然对数,单位是奈特。如果使用以2为底的对数,单位称为比特或香农。自信息总是大于或等于0。
使用不同底数的对数只是缩放比例不同。可以证明,这是唯一满足上述所有要求的公式。这也很容易理解,因为对数的性质:乘积的对数等于对数的和,这满足了可加性要求。同时,-log(p(x)) 总是非负的,并且概率越高,信息量越低,因为这是一个单调递减函数。
自信息也被解释为量化惊讶的程度。一奈特是通过观察概率为 1/e 的事件所获得的信息量。当使用以2为底的对数时,单位称为比特或香农。以比特为单位测量的信息只是以奈特为单位测量的信息的重新缩放。

让我们看一个关于可加性的简单例子。考虑一次公平的抛硬币。如果硬币是公平的,出现正面的概率是 1/2。如果我们使用以2为底的对数,自信息是 -log₂(1/2) = 1 比特。

现在考虑两次公平的抛硬币。观察到两次正面的概率是 1/4。那么,观察到此事件的信息是 -log₂(1/4) = 2 比特。可以看到,通过观察这两个独立事件,我们有了可加效应:1比特 + 1比特 = 2比特。
相反,如果我们有一个总出现正面的不公平硬币(假设物理上可能),那么这个事件的概率是1。因此,该事件的信息是 -log₂(1) = 0 比特。因为它总是以确定性出现,所以我们有零比特信息。
从自信息到香农熵 📈
自信息只处理单个结果。但我们也可以量化整个概率分布中的不确定性量。我们使用所谓的香农熵来实现这一点。我们将香农熵写为 H(P),其中 P 是概率分布。它定义为当 x 从该分布中采样时,自信息的期望值。

因此,它可以重写为:
H(P) = E[I(x)] = -E[log(p(x))]
换句话说,熵 H(P) 等于从 P(x) 中抽取时的预期信息量。由于自信息是正的,熵也是正的。
当使用以2为底的对数时,熵指定了平均编码从概率分布 P(x) 中抽取的符号所需比特数的下限。当 x 是连续变量时,香农熵被称为微分熵。
以下是其形式。在离散情况下,香农熵定义为:
H(P) = -Σ p(x) log(p(x))
在连续情况下,求和被积分取代:
H(P) = -∫ p(x) log(p(x)) dx
按照惯例,我们将可能出现的 0 log 0 视为 x log x 当 x 趋近于0时的极限,即等于0。

熵的示例 🎲

最简单的例子是查看二元随机变量(如公平或不公平的硬币)的香农熵。在下图中,x轴是二元随机变量(如硬币)等于1的概率 p。对于公平硬币,p = 0.5;对于不公平硬币,p 可能为1或0。y轴是对应伯努利分布的熵,其公式为:
H(p) = -[(1-p) log(1-p) + p log(p)]
我们看到,如果分布接近均匀(p = 0.5),不确定性最大,熵最高(略低于0.7)。另一方面,如果分布接近确定性(硬币总是正面或反面),那么香农熵将接近0。因此,如果我们有一个完全随机的均匀分布,则熵高。如果事件以高确定性发生,则熵低。

我们也可以查看其他分布。这里我们有30个状态的离散概率分布的直方图。顶部显示了以奈特为单位的熵。我们可以看到,正如预期的那样,较宽分布(更不确定)的熵高于较窄分布(从该分布采样时更清楚哪些状态会被取到)的熵。同样,在这种情况下,均匀分布会产生可能的最大熵。如果我们有一个完全均匀的分布,那么熵将是 -log(1/30) ≈ 3.4 奈特,这是该特定分布可能具有的最高熵。
熵与最短编码长度 🔗
最后,我想简要展示熵与香农在从发送方向接收方传输消息时非常重要的最短编码长度之间的关系。这不仅对我们作为概率分布或不确定性的度量有用,而且它实际上源于编码。
考虑一个具有8种可能状态 {A, B, C, D, E, F, G, H} 的随机变量 X,以及该变量上的分布 P。如果每个状态的可能性相同(均匀分布),则熵 H(P) = -8 * (1/8) * log₂(1/8) = 3 比特。
现在假设一个非均匀分布。具体来说,让概率如图所示。第一个状态极有可能,占一半的概率质量。然后,另一半概率分布在所有其他状态上,其中第二个状态仍然相当可能,第三个状态也是,但其余状态则相当不可能。在这种情况下,我们也可以计算熵,结果是2比特。
我们已经看到,在均匀分布下,熵高于非均匀分布下的熵。但这与最短编码长度有什么关系呢?
现在考虑编码要从发送方发送给接收方的消息。因为我们有8种可能的状态,我们可以简单地用3位数字对消息中的每个符号进行编码。用3位,我可以唯一地编码具有8个字符的字母表的消息。然而,在这些字符的概率如图所示的情况下,这将是非常次优的。这两个分布之间的熵差异告诉了我们这一点。
因为我们可以做的是,对更可能的事件使用较短的代码,代价是对非常不可能的事件使用较长的代码。例如,我们可以取代码 0 代表符号 A,代码 10 代表符号 B,它们很短。然后,对于概率较低的符号 E, F, G, H,我们用较长的代码编码,如 111100。如果我们这样做,并且假设我们从该分布生成消息,那么我们将观察到平均代码长度现在等于熵(在这种情况下是2比特)。因为以概率 1/2,我们用长度为1的代码编码符号;以概率 1/4,我们用长度为2的代码编码符号;只有以概率 1/64,我们需要6位来编码一个符号。平均而言,我们得到2比特,即该分布的熵。因此,熵告诉我们,如果我们以最优方式编码这些消息,需要多少比特。
这里需要注意,较短的代码不能随意使用,同时需要唯一地消除符号歧义。我们需要知道一个符号何时结束,因此我们不能在这里使用任何任意代码。但我们必须以巧妙的方式编码这些符号,以便能够区分。例如,代码 1100, 1110 唯一地解码为序列 C A D。因为 110 是唯一以符号 C 开头的代码,然后 0 是唯一以符号 A 开头的代码。因此,所有代码都是唯一的。这就是为什么这些代码看起来是这样的。

总结 📝

在本节课中,我们一起学习了信息论的基础知识。我们从信息论的起源和克劳德·香农的贡献开始。然后,我们探讨了信息的直观概念,并将其形式化为自信息,定义为 I(x) = -log(p(x))。接着,我们将这个概念扩展到整个概率分布,引入了香农熵 H(P) = -E[log(p(x))],作为不确定性的度量。我们通过二元分布和多元分布的示例观察了熵的行为。最后,我们了解了熵与最优编码平均长度的深刻联系,它给出了编码从分布中抽取的符号所需比特数的下限。这些概念为在机器学习中理解和比较概率分布提供了重要的数学工具。
018:Argmin与Argmax算子 🎯


在本节课中,我们将学习优化问题中两个非常重要的算子:Argmin和Argmax。它们用于寻找使函数取得最小值或最大值的输入参数,而不是函数值本身。这在机器学习和深度学习的参数优化中非常常见。

算子的定义 📖
上一节我们介绍了函数极值的概念,本节中我们来看看如何精确地描述取得这些极值的点。
设 (\mathcal{X}) 表示一个集合,(f(x)) 是定义在该集合上的函数。Argmin和Argmax算子的定义如下:
- Argmin:函数 (f(x)) 关于 (x) 的Argmin,是所有使得函数值在定义域上取得最小值的 (x) 的集合。其数学表达式为:
[
\underset{x \in \mathcal{X}}{\operatorname{argmin}} f(x) = { x \in \mathcal{X} \mid f(x) = \min_{z \in \mathcal{X}} f(z) }
]
简单来说,它返回的是最小值点的位置(自变量),而不是最小值本身。


- Argmax:函数 (f(x)) 关于 (x) 的Argmax,是所有使得函数值在定义域上取得最大值的 (x) 的集合。其数学表达式为:
[
\underset{x \in \mathcal{X}}{\operatorname{argmax}} f(x) = { x \in \mathcal{X} \mid f(x) = \max_{z \in \mathcal{X}} f(z) }
]
同样,它返回的是最大值点的位置。

示例解析 🔍


为了更清晰地理解这两个算子,让我们通过几个具体的函数例子来看一看。


以下是几个Argmin和Argmax的计算示例:

- 平方函数:考虑函数 (f(x) = x^2)。
- (\underset{x}{\operatorname{argmin}} \ x^2 = 0)
- 解释:函数在 (x=0) 处取得最小值0。Argmin返回的是这个位置
0,而不是最小值0。

- 余弦函数:考虑函数 (f(x) = \cos(x)),定义域 (x \in [0, 4\pi])。
- (\underset{x \in [0, 4\pi]}{\operatorname{argmax}} \ \cos(x) = {0, 2\pi, 4\pi})
- 解释:余弦函数在区间 ([0, 4\pi]) 内,在 (x=0, 2\pi, 4\pi) 这三个点都取得了最大值1。因此,Argmax返回的是一个包含三个元素的集合。

- 线性函数:考虑函数 (f(x) = x),定义域 (x \in [-1, 1])。
- (\underset{x \in [-1, 1]}{\operatorname{argmin}} \ x = -1)
- 解释:在这个区间内,函数在 (x=-1) 处取得最小值。

- 常数函数:考虑函数 (f(x) = c)(c为常数),定义域为所有实数 (\mathbb{R})。
- (\underset{x \in \mathbb{R}}{\operatorname{argmin}} \ c = \mathbb{R})
- (\underset{x \in \mathbb{R}}{\operatorname{argmax}} \ c = \mathbb{R})
- 解释:因为函数值处处相等,所以每一个 (x) 都同时是“最小值点”和“最大值点”。因此,Argmin和Argmax的结果都是整个实数集。


在机器学习中的应用 🤖

理解了算子的基本概念后,我们来看看它们在机器学习中的一个核心应用场景:最大似然估计。
Argmax算子在机器学习中至关重要,尤其是在最大似然估计中。我们的目标是找到一组模型参数,使得观测到的数据在该模型下出现的“可能性”最大。

假设我们有一个数据集 (\mathcal{D}),包含从真实数据分布中独立同分布采样得到的样本 ((x, y))。我们有一个参数化的模型 (P_{\text{model}}(y|x; \mathbf{w})),它表示在给定输入 (x) 和参数 (\mathbf{w}) 时预测 (y) 的概率分布。

那么,参数 (\mathbf{w}) 的条件最大似然估计 (\hat{\mathbf{w}}) 可以定义为:
[
\hat{\mathbf{w}} = \underset{\mathbf{w}}{\operatorname{argmax}} \ P_{\text{model}}(\mathcal{D}; \mathbf{w})
]

利用数据样本独立同分布的假设,联合概率可以分解为每个数据点概率的乘积:
[
\hat{\mathbf{w}} = \underset{\mathbf{w}}{\operatorname{argmax}} \prod_{(x,y) \in \mathcal{D}} P_{\text{model}}(y|x; \mathbf{w})
]

由于对数函数是单调函数,最大化乘积等价于最大化其对数之和(即对数似然):
[
\hat{\mathbf{w}} = \underset{\mathbf{w}}{\operatorname{argmax}} \sum_{(x,y) \in \mathcal{D}} \log P_{\text{model}}(y|x; \mathbf{w})
]


我们可以看到,最终的目标就是寻找使对数似然函数取得最大值的参数 (\mathbf{w})。Argmax算子清晰地描述了这一优化问题的解。
总结 📝

本节课中我们一起学习了Argmin和Argmax这两个核心的数学算子。
- Argmin 返回使函数取得最小值的输入变量的集合。
- Argmax 返回使函数取得最大值的输入变量的集合。
它们与简单的min/max函数(返回极值本身)有本质区别。这两个算子在优化问题中,特别是在机器学习的模型参数估计(如最大似然估计)中,扮演着定义“最优解”的关键角色。理解它们有助于我们更精确地阅读和构建机器学习的目标函数。

浙公网安备 33010602011771号