向量 (Vector)
向量是具有大小和方向的量。在AI中,向量用于表示数据点、特征、词嵌入等。
\[ \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \in \mathbb{R}^n \]
n维列向量,表示一个具有n个特征的数据点
数值示例:假设一个学生的成绩用向量表示:
\[ \mathbf{s} = \begin{bmatrix} 90 \\ 85 \\ 78 \\ 92 \end{bmatrix} \]
分别对应:数学、英语、物理、化学成绩
向量运算:
\[ \mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n \]
点积(内积):衡量两个向量的相似度
AI中哪里用到:词向量(Word Embedding)将词语映射为高维向量;特征向量表示数据样本;注意力机制中的Query、Key、Value都是向量。
矩阵 (Matrix)
矩阵是按照矩形排列的数字阵列。在AI中,矩阵用于表示数据集、权重矩阵、变换等。
\[ A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n} \]
m行n列的矩阵
数值示例:一个3个样本、4个特征的数据集:
\[ X = \begin{bmatrix} 1.0 & 2.3 & 0.5 & 3.1 \\ 0.8 & 1.9 & 0.7 & 2.8 \\ 1.2 & 2.1 & 0.3 & 3.5 \end{bmatrix} \]
3行(样本)x 4列(特征)
AI中哪里用到:数据集通常组织为矩阵形式(样本数 x 特征数);神经网络每一层的权重都是一个矩阵;图像可以看作像素矩阵。
矩阵乘法 (Matrix Multiplication)
矩阵乘法是神经网络前向传播的核心运算。
\[ C = A \times B, \quad c_{ij} = \sum_{k=1}^{K} a_{ik} \cdot b_{kj} \]
A(m x K) 乘以 B(K x n) 得到 C(m x n)
数值示例:
\[ \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \times \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} = \begin{bmatrix} 1 \times 5 + 2 \times 7 & 1 \times 6 + 2 \times 8 \\ 3 \times 5 + 4 \times 7 & 3 \times 6 + 4 \times 8 \end{bmatrix} = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix} \]
逐步计算矩阵乘法
AI中哪里用到:神经网络层的计算 \( \mathbf{h} = \sigma(W\mathbf{x} + \mathbf{b}) \),其中 \( W \) 是权重矩阵,\( \mathbf{x} \) 是输入向量,\( \mathbf{b} \) 是偏置向量,\( \sigma \) 是激活函数。整个深度网络就是一系列矩阵乘法的组合。
导数 (Derivative)
导数描述函数在某一点处的变化率,即"瞬时速度"。
\[ f'(x) = \frac{df}{dx} = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h} \]
导数的定义
常用导数公式:
\[ \frac{d}{dx}x^n = nx^{n-1}, \quad \frac{d}{dx}e^x = e^x, \quad \frac{d}{dx}\ln(x) = \frac{1}{x}, \quad \frac{d}{dx}\sin(x) = \cos(x) \]
基本函数的导数
AI中哪里用到:导数告诉我们损失函数在某个参数值处的变化方向,是梯度下降法的基础。激活函数的导数决定了反向传播中梯度的流动。
偏导数 (Partial Derivative)
当函数有多个变量时,偏导数是固定其他变量,对某一个变量求导。
\[ f(x, y) = x^2 + 3xy + y^2 \]
\[ \frac{\partial f}{\partial x} = 2x + 3y, \quad \frac{\partial f}{\partial y} = 3x + 2y \]
多变量函数的偏导数
AI中哪里用到:损失函数通常有大量参数(可能数百万个),我们需要分别对每个参数求偏导数,以确定每个参数应该如何调整来减小损失。
链式法则 (Chain Rule)
链式法则是微积分中最重要的法则之一,用于求复合函数的导数。
\[ \frac{d}{dx}[f(g(x))] = f'(g(x)) \cdot g'(x) \]
链式法则基本形式
多变量链式法则:
\[ \frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} \]
多层复合函数的链式求导
AI中哪里用到:反向传播算法(Backpropagation)的核心就是链式法则。神经网络由多层组成,损失函数对第一层参数的梯度需要逐层传递,每一层都通过链式法则将梯度向后传递。这是深度学习能够高效训练的关键。
梯度 (Gradient)
梯度是一个向量,由函数对所有变量的偏导数组成,指向函数值增长最快的方向。
\[ \nabla f = \begin{bmatrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2} \\ \vdots \\ \frac{\partial f}{\partial x_n} \end{bmatrix} \]
梯度向量(n个变量的函数)
梯度下降更新公式:
\[ \theta_{t+1} = \theta_t - \alpha \cdot \nabla_\theta L(\theta_t) \]
梯度下降:沿梯度的反方向更新参数,\(\alpha\) 为学习率
AI中哪里用到:梯度下降是几乎所有机器学习模型的训练方法。SGD、Adam、RMSprop等优化器都是基于梯度下降的变体。理解梯度是理解模型训练过程的关键。
概率分布 (Probability Distribution)
概率分布描述了随机变量取各个值的可能性。
常见分布:
\[ \text{正态分布: } f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]
高斯分布,\(\mu\)为均值,\(\sigma\)为标准差
\[ \text{伯努利分布: } P(X=k) = p^k(1-p)^{1-k}, \quad k \in \{0, 1\} \]
二值分布,如抛硬币
\[ \text{Softmax分布: } P(y_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \]
多分类中常用的概率分布
AI中哪里用到:正态分布用于权重初始化和数据假设;Softmax将网络输出转化为概率分布,用于多分类任务(如ImageNet的1000类分类)。
期望与方差 (Expectation & Variance)
期望是随机变量的"平均值",方差衡量数据的离散程度。
\[ \mathbb{E}[X] = \sum_{i} x_i \cdot P(x_i) \quad \text{(离散)} \]
\[ \mathbb{E}[X] = \int_{-\infty}^{\infty} x \cdot f(x) \, dx \quad \text{(连续)} \]
期望(数学期望)
\[ \text{Var}(X) = \mathbb{E}[(X - \mathbb{E}[X])^2] = \mathbb{E}[X^2] - (\mathbb{E}[X])^2 \]
方差:衡量随机变量偏离均值的程度
数值示例:掷骰子的期望和方差:
\[ \mathbb{E}[X] = \frac{1+2+3+4+5+6}{6} = 3.5 \]
\[ \text{Var}(X) = \frac{(1-3.5)^2 + (2-3.5)^2 + \cdots + (6-3.5)^2}{6} \approx 2.92 \]
公平骰子的期望和方差
AI中哪里用到:期望用于计算预测值;方差用于衡量模型的不确定性;Batch Normalization利用批次的均值和方差来稳定训练。
贝叶斯定理 (Bayes' Theorem)
贝叶斯定理描述了在获得新证据后如何更新我们的信念。
\[ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} \]
贝叶斯定理:后验概率 = 似然 x 先验概率 / 证据
数值示例:疾病检测
\[ \text{假设:疾病发病率} P(D) = 0.01, \text{检测灵敏度} P(+|D) = 0.99, \text{误报率} P(+|\neg D) = 0.05 \]
\[ P(D|+) = \frac{P(+|D) \cdot P(D)}{P(+|D) \cdot P(D) + P(+|\neg D) \cdot P(\neg D)} = \frac{0.99 \times 0.01}{0.99 \times 0.01 + 0.05 \times 0.99} \approx 0.167 \]
即使检测为阳性,实际患病的概率也仅有约16.7%(贝叶斯定理的经典应用)
AI中哪里用到:朴素贝叶斯分类器(垃圾邮件过滤);贝叶斯优化(超参数调优);贝叶斯神经网络(量化模型不确定性);最大后验估计(MAP)。
练习题
[1]
给定矩阵 \( A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \) 和向量 \( \mathbf{x} = \begin{bmatrix} 5 \\ 6 \end{bmatrix} \),手动计算 \( A\mathbf{x} \),然后用NumPy验证结果。
[2]
对函数 \( f(x, y) = x^2 y + y^3 \),分别求 \( \frac{\partial f}{\partial x} \) 和 \( \frac{\partial f}{\partial y} \),并计算在点 \( (2, 1) \) 处的梯度 \( \nabla f \)。
[3]
一个二分类问题中,真实标签为 \( y = 1 \),模型预测概率为 \( \hat{y} = 0.8 \)。计算该样本的交叉熵损失 \( \mathcal{L} = -[y \log \hat{y} + (1-y)\log(1-\hat{y})] \)。如果预测概率提高到 \( \hat{y} = 0.95 \),损失如何变化?
代码实践
以下代码示例展示了AI数学基础中常用的NumPy矩阵运算和matplotlib函数可视化。这些操作在深度学习框架中随处可见。
示例1:NumPy矩阵运算
import numpy as np
# 创建矩阵
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
# 矩阵加法
C = A + B
print("A + B =")
print(C)
# 矩阵乘法(点积)
D = np.dot(A, B)
print("\nA · B =")
print(D)
# 矩阵转置
print("\nA的转置:")
print(A.T)
# 矩阵求逆
A_inv = np.linalg.inv(A)
print("\nA的逆矩阵:")
print(A_inv)
# 验证:A · A_inv = 单位矩阵
print("\n验证 A · A_inv:")
print(np.dot(A, A_inv))
运行结果
A + B =
[[ 6 8]
[10 12]]
A · B =
[[19 22]
[43 50]]
A的转置:
[[1 3]
[2 4]]
A的逆矩阵:
[[-2. 1. ]
[ 1.5 -0.5]]
验证 A · A_inv:
[[1. 0.]
[0. 1.]]
示例2:绘制激活函数图像
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
# 生成数据
x = np.linspace(-5, 5, 100)
# Sigmoid 函数
sigmoid = 1 / (1 + np.exp(-x))
# ReLU 函数
relu = np.maximum(0, x)
# Tanh 函数
tanh = np.tanh(x)
# 绘制图像
plt.figure(figsize=(10, 6))
plt.plot(x, sigmoid, label='Sigmoid', linewidth=2)
plt.plot(x, relu, label='ReLU', linewidth=2)
plt.plot(x, tanh, label='Tanh', linewidth=2)
plt.axhline(y=0, color='k', linestyle='-', linewidth=0.5)
plt.axvline(x=0, color='k', linestyle='-', linewidth=0.5)
plt.grid(True, alpha=0.3)
plt.legend(fontsize=12)
plt.title('常见激活函数', fontsize=14)
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.tight_layout()
plt.show()
运行结果
运行后会弹出一个窗口,显示三条曲线:
- Sigmoid:S形曲线,输出范围 (0, 1)
- ReLU:x<0时为0,x>0时为直线
- Tanh:S形曲线,输出范围 (-1, 1)
这些激活函数是神经网络的核心组件,理解它们的图像有助于理解模型行为。