ESC
输入关键词搜索文章
目录

ML Visualized

机器学习算法从第一性原理到可视化
数学推导 + NumPy 实现 + 训练过程动画
4章节
6算法
8独立 Repo
100%NumPy 实现
项目概述
ML Visualized 是什么?

ML Visualized 是一本由 Gavin H(University of Maryland)创建的 Jupyter Notebooks 电子书。它的核心理念是:从第一性原理出发,用数学推导 + 代码实现 + 可视化动画三者结合,彻底理解机器学习算法的本质。

核心特色

  • 第一性原理:每个公式都有完整推导过程
  • 纯 NumPy:不依赖 sklearn/TensorFlow,从零构建
  • 训练动画:每个 Notebook 输出 GIF,观测收敛行为
  • 开源共建:接受 PR,任何人都可贡献新的算法章节

每个 Notebook 的输出都是一个训练过程动画 GIF — 从随机初始化的权重开始,逐步迭代,最终收敛到最优解。这个过程比任何静态图表都更能建立直觉。

Chapter 1 · Optimization
Gradient Descent:优化的基石

第一章从最简单的线性回归出发,理解机器学习的核心范式:找到使损失函数最小的权重参数

损失函数:Mean Squared Error

模型预测 $\hat{y} = wx + b$,损失函数定义为:

$$MSE = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$

梯度下降更新规则

核心思想:沿着损失函数梯度的反方向迭代更新参数。

$$X_{n+1} = X_n - \eta \frac{\partial}{\partial X} f(X_n)$$

其中 $\eta$ 是学习率(learning rate),控制每一步更新的幅度。

偏导数推导

对权重 $w$ 的偏导:

$$\frac{\partial}{\partial w} MSE = -\frac{2}{n} \sum_{i=1}^{n} x_i (y_i - (wx_i + b))$$

对偏置 $b$ 的偏导:

$$\frac{\partial}{\partial b} MSE = -\frac{2}{n} \sum_{i=1}^{n} (y_i - (wx_i + b))$$
学习率的影响:学习率太小收敛慢,太大可能跳过最优点。需要在实践中调优。

NumPy 实现


def mse_loss(x, y, w, b):
    return np.mean(np.square(y - (w * x + b)))

def mse_loss_dw(x, y, w, b):
    return -2 * np.mean(x * (y - (w * x + b)))

def mse_loss_db(x, y, w, b):
    return -2 * np.mean(y - (w * x + b))

def update_w_and_b(x, y, w, b, learning_rate):
    w = w - mse_loss_dw(x, y, w, b) * learning_rate
    b = b - mse_loss_db(x, y, w, b) * learning_rate
    return w, b
  

可视化输出

该 Notebook 输出一个 GIF 动画,包含两个视图:

  • 左图:线性回归拟合散点数据,线条逐渐逼近最优解
  • 右图:3D 误差曲面(w-b 平面上的损失函数),红点追踪梯度下降轨迹

4000 epochs 后收敛到 $w \approx 0.456, b \approx 1.026$,loss 从 197.25 降到 39.06。

Gradient Descent 可视化
Gradient Descent 训练过程可视化 GIF — 线性回归从随机权重收敛到最优解
Chapter 2 · Clustering and Reduction
K-Means 与 PCA:理解数据

在训练模型之前,先要理解数据。第二章介绍两种无监督学习方法,用于数据探索和预处理。

K-Means Clustering

无监督聚类算法,将数据点分组到 K 个簇中。

算法步骤

  1. 随机初始化 K 个质心位置
  2. 将每个数据点分配给最近的质心(欧几里得距离)
  3. 更新质心为该簇所有点的均值
  4. 重复 2-3 直到收敛(质心不再移动)

距离函数

$$d_{euclidean} = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$$
$$d_{manhattan} = |x_2-x_1| + |y_2-y_1|$$
Elbow Method:通过绘制不同 K 值下的总距离平方,选择"肘部"拐点对应的 K 值。

可视化特点

  • 动态展示质心移动轨迹
  • Voronoi 图显示决策边界
  • Elbow Method 图表辅助选择最优 K
K-Means 动画
K-Means 聚类动画 — 质心逐步移动,数据点归属逐渐稳定

Principal Component Analysis (PCA)

降维技术,找到数据中方差最大的方向(主成分)。

核心思想

将高维数据投影到低维空间,同时尽可能保留信息(方差)。

数学基础

  • 协方差矩阵:$\Sigma = \frac{1}{n} XX^T$
  • 特征值分解:找到方差最大的正交方向
  • 投影:$X_{reduced} = X \cdot V_k$,其中 $V_k$ 是前 k 个特征向量
Chapter 3 · Linear Models and Activation Functions
Perceptron 与 Logistic Regression

第三章从最简单的单层模型出发,引入激活函数的概念,展示如何从线性分类器扩展到非线性模型。

Perceptron(感知机)

最简单的神经网络单元,无激活函数。

$$\hat{y} = WX + b$$

更新规则

若预测错误:$W := W + yx^T$

局限性:只能处理线性可分数据,且收敛性依赖数据分布。

Logistic Regression

引入激活函数,将二分类问题转化为概率输出。

Sigmoid 激活函数

$$\sigma(z) = \frac{1}{1 + e^{-z}}$$

将任意实数映射到 $(0, 1)$ 区间,表示属于正类的概率。

从 Perceptron 到 Logistic Regression:添加 Sigmoid 激活 + 使用 Binary Cross Entropy 损失函数,实现概率输出和梯度下降优化。

Binary Cross Entropy Loss

$$BCE = -\frac{1}{n} \sum_{i=1}^{n}[y_i \log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)]$$

核心改进

特性PerceptronLogistic Regression
输出0/1 分类概率 $[0, 1]$
激活函数无(线性)Sigmoid
损失函数0-1 LossCross Entropy
优化方法感知机规则梯度下降
Chapter 4 · Neural Networks
多层堆叠:从线性到非线性

第四章是全书核心,介绍如何堆叠多层线性变换 + 非线性激活函数,构建能逼近任意复杂函数的神经网络。

网络结构

3 层全连接网络:Input → Hidden 1 → Hidden 2 → Output

前向传播

$$Z_1 = W_1 X + B_1, \quad A_1 = \tanh(Z_1)$$
$$Z_2 = W_2 A_1 + B_2, \quad A_2 = \tanh(Z_2)$$
$$Z_3 = W_3 A_2 + B_3, \quad \hat{y} = \tanh(Z_3)$$

矩阵形式:$Z = WX + B$(线性变换),$A = g(Z)$(激活函数)。

Tanh 激活函数

$$\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}$$

梯度:$\tanh'(z) = 1 - \tanh^2(z)$,计算高效。

损失函数

$$J = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$

反向传播(Backpropagation)

核心思想:用链式法则从后向前计算每个参数的梯度,然后梯度下降更新。

链式法则推导

对输出层的权重 $W_3$

$$\frac{\partial J}{\partial W_3} = \frac{\partial J}{\partial A_3} \cdot \frac{\partial A_3}{\partial Z_3} \cdot \frac{\partial Z_3}{\partial W_3}$$

三个分量的含义:

  • $\frac{\partial J}{\partial A_3}$:损失函数对输出的梯度(MSE 梯度)
  • $\frac{\partial A_3}{\partial Z_3}$:激活函数的梯度(tanh 梯度)
  • $\frac{\partial Z_3}{\partial W_3} = A_2$:输入(上一层的激活输出)
反向传播的本质:从输出层向输入层逐层反推梯度,每个参数接收来自后层的"误差信号",乘以本地梯度后继续反传。

梯度更新公式


# 输出层梯度
dZ3 = (y_pred - y_true) * tanh_prime(Z3)
dW3 = np.dot(dZ3, A2.T) / n
dB3 = np.mean(dZ3, axis=1, keepdims=True)

# 隐藏层梯度(反传)
dA2 = np.dot(W3.T, dZ3)
dZ2 = dA2 * tanh_prime(Z2)
dW2 = np.dot(dZ2, A1.T) / n
dB2 = np.mean(dZ2, axis=1, keepdims=True)

# 更新权重
W3 = W3 - learning_rate * dW3
B3 = B3 - learning_rate * dB3
  

四个可视化部分

部分内容目的
Loss Landscape权重空间的损失函数曲面理解收敛行为和局部最小值
Transformations每层如何变换数据空间直觉理解特征提取过程
Function Approximation验证通用近似定理理解网络的表达能力
Backpropagation链式法则和梯度计算理解优化过程的核心机制
神经网络结构
3 层全连接神经网络结构图 — Input(2) → Hidden1(8) → Hidden2(8) → Output(1)
附录
数学基础汇总

核心公式表

概念公式代码实现
MSE Loss$\frac{1}{n}\sum(y_i-\hat{y}_i)^2$np.mean(np.square(y-y_pred))
Sigmoid$\frac{1}{1+e^{-z}}$1/(1+np.exp(-z))
Tanh$\frac{e^z-e^{-z}}{e^z+e^{-z}}$np.tanh(z)
BCE Loss$-\sum[y\log\hat{y}+(1-y)\log(1-\hat{y})]$-np.mean(ynp.log(p)+(1-y)np.log(1-p))
链式法则$\frac{\partial f}{\partial x} = \frac{\partial f}{\partial u} \cdot \frac{\partial u}{\partial x}$逐层反向传播
矩阵求导$\frac{\partial}{\partial W}(WX+B) = X^T$np.dot(dZ, A_prev.T)

代码基础模式


# 训练循环模板
for epoch in range(epochs):
    # Forward
    Z, A = forward(X, W, B)
    
    # Compute Loss
    loss = compute_loss(y, A)
    
    # Backward
    dW, dB = backward(y, A, Z, X)
    
    # Update
    W = W - learning_rate * dW
    B = B - learning_rate * dB
  

核心数据结构

  • 权重矩阵 W:形状 (output_dim, input_dim)
  • 偏置向量 B:形状 (output_dim, 1)
  • 层输出 A:形状 (batch_size, output_dim)
  • 梯度 dZ:与 Z 同形状的反向传播信号
对比分析
与其他资源的对比
资源特点适合人群
ML Visualized公式推导 + 代码实现 + 可视化初学者想深入理解
Stanford CS229数学严谨,涵盖面广学术方向
3Blue1Brown直觉可视化,动画精美建立直观理解
fast.ai实践导向,快速上手工程应用
ML Visualized 独特优势
  1. 每个公式都有完整推导过程(不只是结论)
  2. 代码可以直接运行复现(纯 NumPy)
  3. 训练过程动画展示收敛行为(不只是最终结果)
结论与推荐

ML Visualized 是一套优质的机器学习入门资源,特别适合:

  • 想要从数学层面理解 ML 算法的人
  • 想要亲手实现经典算法(不依赖框架)的人
  • 需要可视化辅助建立直觉的视觉型学习者
推荐学习路径
  1. 先看动画了解整体流程(网站直接浏览)
  2. 再读数学推导理解原理(讲义 PDF)
  3. 最后跑代码亲手实验(Colab 或本地)