第24讲 · EECS 189:自监督学习

UC Berkeley EECS 189/289A《机器学习导论》2026 春季 · 课堂实录重构

原始标题 Self-Supervised Learning — Pretext Tasks, Autoencoders, Contrastive Learning and CLIP
视频 https://www.youtube.com/watch?v=iGcer6b6mp8
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 24) Google Drive 文件夹
图片来源 书中幻灯片插图为官方 PDF 高清渲染图

对应讲次:第24讲(UC Berkeley EECS 189 机器学习导论)

制作模型:deepseek-flash(coding-agent / pi;据 ~/.pi/agent/settings.json)

说明:课程材料版权归 UC Berkeley 及授课教师所有,本书仅供学习

本讲路线图

(参考时间: 00:00)

本讲的主线:用自监督从原始数据中学到可迁移的表示。等价说法:

标题页

📷 标题页
回到原视频 (00:00:20)

路线图

📷 路线图
回到原视频 (00:01:33)


一、自监督与迁移学习

1.1 为什么需要自监督

(参考时间: 00:02)

核心矛盾:原始数据(X)几乎无穷且便宜(网页文本、图片、蛋白质序列),但标注(Y)极其昂贵(雇人标注、做临床试验)。

自监督(self-supervision):从 $X$ 自己造标签,构造pretext(假)任务;训练中得到的表示向量会迁移到真正关心的下游任务上,于是只需很少甚至零标注。这就是旧的迁移学习(transfer learning)。

自监督

📷 自监督
回到原视频 (00:02:46)

监督 vs 无监督学习

📷 监督 vs 无监督学习
回到原视频 (00:03:59)

自监督学习

📷 自监督学习
回到原视频 (00:05:12)

自监督学习示例

📷 自监督学习示例
回到原视频 (00:06:25)

怎么做?

📷 怎么做?
回到原视频 (00:07:38)

迁移学习

📷 迁移学习
回到原视频 (00:08:51)

1.2 迁移学习:以 CNN 为例

经典例子:下载预训练 ResNet(在 ImageNet 上训练过),冻结前面的层,只重训最后的线性头,用少量标注(如 100 张图)。

真实成功故事:一位农夫用 PyTorch 预训练 ResNet + 几百张自建黄瓜图片,微调出"好黄瓜 vs 坏黄瓜"分类器,为家族生意省下大量分拣时间。

为什么预训练重要? 它把数据变换到更易分的坐标(原空间里圆和三角不可线性分离,变换后可分离),并大幅降维。但选什么 pretext 任务很关键:区分橙子和苹果时,颜色特征有用、形状特征没用 ⇒ 应设计对颜色敏感的自监督任务。

用 CNN 做迁移学习(一)

📷 用 CNN 做迁移学习(一)
回到原视频 (00:10:04)

用 CNN 做迁移学习(二)

📷 用 CNN 做迁移学习(二)
回到原视频 (00:11:17)

用 CNN 做迁移学习(三)

📷 用 CNN 做迁移学习(三)
回到原视频 (00:12:30)

微调(一)

📷 微调(一)
回到原视频 (00:13:43)

微调(二)

📷 微调(二)
回到原视频 (00:14:56)

为什么 pretext 学习很重要

📷 为什么 pretext 学习很重要
回到原视频 (00:16:09)

自监督学习的挑战

📷 自监督学习的挑战
回到原视频 (00:17:22)

自监督

📷 自监督
回到原视频 (00:18:35)

方法

📷 方法
回到原视频 (00:19:48)


二、生成式 Self-Supervision

生成式

📷 生成式
回到原视频 (00:21:01)

2.1 自编码器(Autoencoder)

结构:编码器 $f$ 把大向量 $x$(如图像)压成小潜向量 $z=f(x)$,解码器 $g$ 从 $z$ 重建 $\hat x=g(z)$。

Pretext 任务 = 重建,损失:

$$ \mathcal{L}=\sum_i \lVert x_i-\hat x_i\rVert^2 \quad(\text{MSE}) $$

生成:训练后把随机 $z$ 送进解码器 $g$,会"梦"出一张黄瓜/人脸——最早的生成模型。把非黄瓜图像编码再解码,会得到它在黄瓜流形上的投影(模糊的黄瓜版)。$z$ 的分布理论上应是最大熵(高斯 iid)——这正是变分自编码器(VAE) 的思路。PCA 是自编码器的线性版。

自编码器

📷 自编码器
回到原视频 (00:22:14)

自编码器的思想

📷 自编码器的思想
回到原视频 (00:23:27)

卷积自编码器(一)

📷 卷积自编码器(一)
回到原视频 (00:24:40)

卷积自编码器(二)

📷 卷积自编码器(二)
回到原视频 (00:25:53)

去噪自编码器(一)

📷 去噪自编码器(一)
回到原视频 (00:27:06)

去噪自编码器(二)

📷 去噪自编码器(二)
回到原视频 (00:28:19)

重建 $\hat x$

📷 重建 $\hat x$
回到原视频 (00:29:32)

去噪自编码器的流程(一)

📷 去噪自编码器的流程(一)
回到原视频 (00:30:45)

去噪自编码器的流程(二)

📷 去噪自编码器的流程(二)
回到原视频 (00:31:58)

$\hat x$(一)

📷 $\hat x$(一)
回到原视频 (00:33:11)

$\hat x$(二)

📷 $\hat x$(二)
回到原视频 (00:34:24)

生成式

📷 生成式
回到原视频 (00:35:37)

2.2 图像着色(Colorization)

Pretext 任务:把黑白图变成彩色图。数据自动生成(把彩色图去色),损失 = 生成彩色与原彩色的距离。由 Berkeley 的 Alyosha Efros 组开创。若下游任务颜色重要,这个表示就有用。

图像着色(一)

📷 图像着色(一)
回到原视频 (00:36:50)

图像着色(二)

📷 图像着色(二)
回到原视频 (00:38:03)

图像着色(三)

📷 图像着色(三)
回到原视频 (00:39:16)

2.3 跨通道预测(Cross-Channel Prediction)

Pretext 任务:从部分通道(如灰度)预测其余通道(如 RGB 中的某通道)。

生成式(二)

📷 生成式(二)
回到原视频 (00:40:29)

跨通道预测(一)

📷 跨通道预测(一)
回到原视频 (00:41:42)

跨通道预测(二)

📷 跨通道预测(二)
回到原视频 (00:42:55)

跨通道预测(三)

📷 跨通道预测(三)
回到原视频 (00:44:08)

2.4 上下文编码器(Context Encoders)

Pretext 任务:遮住图像的一块,让网络根据上下文填补缺失区域——学习语义与结构。

生成式(三)

📷 生成式(三)
回到原视频 (00:45:21)

上下文编码器(一)

📷 上下文编码器(一)
回到原视频 (00:46:34)

上下文编码器(二)

📷 上下文编码器(二)
回到原视频 (00:47:47)

上下文编码器(三)

📷 上下文编码器(三)
回到原视频 (00:49:00)

上下文编码器(四)

📷 上下文编码器(四)
回到原视频 (00:50:13)

上下文编码器(五)

📷 上下文编码器(五)
回到原视频 (00:51:26)

上下文编码器(六)

📷 上下文编码器(六)
回到原视频 (00:52:39)

上下文编码器(七)

📷 上下文编码器(七)
回到原视频 (00:53:52)

2.5 图像超分辨率(Super-Resolution)

Pretext 任务:把低分辨率图(下采样)还原成高分辨率。数据自动生成,且本身就有实用价值(手机相机里的超分网络)。

生成式(四)

📷 生成式(四)
回到原视频 (00:55:05)

图像超分辨率(一)

📷 图像超分辨率(一)
回到原视频 (00:56:18)

图像超分辨率(二)

📷 图像超分辨率(二)
回到原视频 (00:57:31)


三、判别式 Self-Supervision

判别式

📷 判别式
回到原视频 (00:58:44)

3.1 图像旋转预测(Image Rotation)

做法:对每张图随机做 $0°/90°/180°$ 旋转,标签就是旋转角度。用 CNN 提取表示 $r(x)$,与三个线性头 $w$ 做内积、softmax,用多类逻辑回归训练——可生成无限数据。

关键点:旋转任务本身无用,但训练出的 $r(x)$ 是好的图像表示;于是丢弃线性头,把 $r(x)$ 当特征做下游任务(如区分角鸮 vs 白头海雕)。这就是自监督的"魔法"。

图像旋转(一)

📷 图像旋转(一)
回到原视频 (00:59:57)

图像旋转(二)

📷 图像旋转(二)
回到原视频 (01:01:10)

图像旋转:泛化性

📷 图像旋转:泛化性
回到原视频 (01:02:23)

ImageNet Top-1 分类结果

📷 ImageNet Top-1 分类结果
回到原视频 (01:03:36)

任务泛化

📷 任务泛化
回到原视频 (01:04:49)

3.2 相对 Patch 位置(Relative Patch Position)

Pretext 任务:给两个图像块,预测第二个相对第一个的方位(上/下/左/右……)。

相对 Patch 位置(一)

📷 相对 Patch 位置(一)
回到原视频 (01:06:02)

相对 Patch 位置(二)

📷 相对 Patch 位置(二)
回到原视频 (01:07:15)

相对 Patch 位置(三)

📷 相对 Patch 位置(三)
回到原视频 (01:08:28)

相对 Patch 位置(四)

📷 相对 Patch 位置(四)
回到原视频 (01:09:41)

3.3 图像拼图(Jigsaw Puzzle)

Pretext 任务:把图像切成若干块打乱,让网络还原正确顺序(本质是求解一个置换)。

判别式(二)

📷 判别式(二)
回到原视频 (01:10:54)

图像拼图(一)

📷 图像拼图(一)
回到原视频 (01:12:07)

图像拼图(二)

📷 图像拼图(二)
回到原视频 (01:13:20)

3.4 深度聚类(Deep Clustering)

做法:联合学习表示与聚类分配(可迭代地"聚类 → 用簇标签当伪标签训练")。

判别式(三)

📷 判别式(三)
回到原视频 (01:14:33)

深度聚类(一)

📷 深度聚类(一)
回到原视频 (01:15:46)

深度聚类(二)

📷 深度聚类(二)
回到原视频 (01:16:59)


四、对比学习(Contrastive Learning)

对比

📷 对比
回到原视频 (01:18:12)

对比表示学习:让正样本对(同一样本的不同增强)在嵌入空间靠近,负样本对(不同样本)远离。

常见损失(InfoNCE / NT-Xent):对一个 batch 内的 $N$ 个样本,各自做两种增强得 $2N$ 个嵌入;对每个锚点,正例是它的另一个增强视图,负例是其余 $2N-2$ 个。

$$ \mathcal{L}=-\log\frac{\exp(\mathrm{sim}(z_i,z_j)/\tau)}{\sum_{k\neq i}\exp(\mathrm{sim}(z_i,z_k)/\tau)} $$

SimCLR:简洁框架——强数据增强 + 编码器 + 投影头 + 上述对比损失,无需记忆库也能达到很强效果。

对比表示学习

📷 对比表示学习
回到原视频 (01:19:25)

对比学习的公式化

📷 对比学习的公式化
回到原视频 (01:20:38)

对比损失

📷 对比损失
回到原视频 (01:21:51)

SimCLR:一个简单框架

📷 SimCLR:一个简单框架
回到原视频 (01:23:04)

MLTrain(一)

📷 MLTrain(一)
回到原视频 (01:24:17)

MLTrain(二)

📷 MLTrain(二)
回到原视频 (01:25:30)

4.1 CLIP:多模态对比学习

(参考时间: 01:00)

CLIP(Contrastive Language–Image Pre-training) 由 OpenAI 提出,训练两个编码器:

训练:从 4 亿(如 LAION / DataComp,12 亿对)图文对中取一个 $N\times N$ 的 batch(论文 $N=32000$,$d=512$):

零样本分类:把每个类别名(如 "Persian baklava" / "Greek baklava" / "Turkish baklava")编码成文本向量,与图像向量做内积、取最大。可用于任意类别。

应用:图文检索、视频自由文本搜索(离线编码所有帧,在线用文本向量做内积检索);这类快速内积检索由 vector store 公司提供。若有第三模态(音频),可加一个音频编码器,用相同损失训练——任何"天然配对"的多模态数据都能提供免费监督。

batch 构造技巧:随机采样使任务容易;刻意把相似对象分到同一 batch(难负例)能提高区分力,但需训练更久。

CLIP 对比语言-图像预训练(一)

📷 CLIP 对比语言-图像预训练(一)
回到原视频 (01:26:43)

CLIP 对比语言-图像预训练(二)

📷 CLIP 对比语言-图像预训练(二)
回到原视频 (01:27:56)

CLIP 对比语言-图像预训练(三)

📷 CLIP 对比语言-图像预训练(三)
回到原视频 (01:29:09)

CLIP 对比语言-图像预训练(四)

📷 CLIP 对比语言-图像预训练(四)
回到原视频 (01:30:22)

MLTrain(三)

📷 MLTrain(三)
回到原视频 (01:31:35)

自监督学习

📷 自监督学习
回到原视频 (01:32:48)


总结(Takeaways)


附:参考与延伸阅读

主题 链接
本讲视频 https://www.youtube.com/watch?v=iGcer6b6mp8
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 24) Google Drive 文件夹
Zhang et al., Colorful Image Colorization 图像着色 · https://arxiv.org/abs/1603.08511
Pathak et al., Context Encoders 上下文编码 · https://arxiv.org/abs/1604.07379
Gidaris et al., Unsupervised Representation Learning by Predicting Image Rotations 旋转预测 · https://arxiv.org/abs/1803.07728
Noroozi & Favaro, Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles 拼图 · https://arxiv.org/abs/1603.09246
Chen et al., SimCLR 对比学习 · https://arxiv.org/abs/2002.05709
Radford et al., CLIP 多模态对比学习 · https://arxiv.org/abs/2103.00020

版权说明:本讲视频、幻灯片与课程材料版权归 UC Berkeley EECS 189/289A 课程团队所有。本书为课堂内容的学习性中文重构,仅供学习交流。