表征学习
从数据到嵌入(embedding)的编码学习:基于压缩(自编码器、对比学习、聚类、信息瓶颈)与基于预测(自监督、缺失填补)两大原则,以及 KL 散度、交叉熵、互信息等信息论工具。
🎯学习目标
- 理解表征学习问题:编码 f:𝒳→𝒵 与向量嵌入(embedding);
- 掌握"好表征"应具备的性质,以及压缩原则与奥卡姆剃刀;
- 熟悉自编码器、对比学习、聚类(k-means)等压缩方法;
- 理解自监督学习、代理任务(pretext task)与缺失填补;
- 掌握 KL 散度、交叉熵、信息熵、互信息与信息瓶颈原则;
- 了解迁移学习与预训练(如 CLIP)。
1什么是表征学习
深度网络逐层变换数据点,每一层都是数据的一种不同表示。两个方向:
表征学习
前向:从观测数据 → 潜在嵌入(latent embedding)。学习编码器 f:𝒳→𝒵。
生成式建模
反向:从潜在嵌入 → 观测数据。即解码 / 生成。
表示学习的目标是学习如何把数据点 $x \in \mathcal{X}$ 映射到抽象表示 $z \in \mathcal{Z}$,这种映射称为"编码",学得函数 $f:\mathcal{X} \to \mathcal{Z}$。通常 $x$、$z$ 都是高维向量,$z$ 被称为 $x$ 的向量嵌入(embedding)。
核心意思:
表征学习 = 让机器学会"整理笔记",把乱七八糟的原始数据变成有用的特征
举个例子:
一张交通图片的表征:
原始数据 x(几百万个像素):
像素(0,0) = (120, 130, 125)
像素(0,1) = (115, 128, 122)
...(几百万个数字)
好的表征 z(512个数字):
z[0] = 0.8(有车)
z[1] = 0.2(有人)
z[2] = 0.9(道路)
z[3] = 0.1(建筑)
z[4] = 0.7(是否拥堵)
z[5] = 0.0(是否事故)
...
对比:
原始数据x 表征z
几百万个数字 512个数字
信息很乱 信息整理好
难以直接使用 容易用于分类/检测
像"500页教科书" 像"1页复习笔记"
好的表征应该做到:
- 更短:压缩信息(500页→1页)
- 更整齐:相似东西靠近
- 更清楚:不同因素分开
- 更好懂:人能解释一部分
生活类比:
原始数据像一堆没整理的草稿纸;好的表征像整理好的笔记;模型像帮你整理笔记的助手。
2好表征应具备的性质
训练映射 f 的目的是让 z 具备某些理想属性,使 𝒵 成为比 𝒳 更简单、更抽象、组织更好的表示空间:
- z 的维度低于 x(压缩);
- z 的分布 p(z) 具有简单结构(如单位正态分布);
- z 各维度是解耦的(disentangled);
- z 是可解释的。
核心意思:
神经嵌入 = 神经网络中间层输出的一串数字,就是数据的"特征表示"
举个例子:
图片 → 神经网络 → 中间特征 → 分类结果
输入:猫的图片(224×224×3 = 150,528个数字)
中间层(第10层):
输出:512个数字 = 神经嵌入
这512个数字里包含了:
- 有毛茸茸的耳朵
- 有尖尖的爪子
- 有圆圆的眼睛
- 是四条腿的动物
...
输出层:
根据这512个数字判断:是猫(概率0.95)
嵌入的作用:
- 分类:根据嵌入判断类别
- 检索:找嵌入相似的图片
- 聚类:把嵌入相近的归为一类
- 可视化:把高维嵌入降到2D/3D显示
嵌入 vs 原始数据:
原始数据 嵌入
150,528个数字 512个数字
像素级信息 语义级信息
"这个点是什么颜色" "这是什么动物"
难以比较 可以计算相似度
生活类比:
神经嵌入像人的"印象"。你看到一只猫,脑子里不是记住每个像素,而是形成"毛茸茸、四条腿、会喵喵叫"的印象。这个印象就是"嵌入"。
核心意思:
好的表征 = 压缩、整齐、解耦、可解释
目标1:压缩(维度低于原始数据)
原始:100,000个数字 表征:512个数字 保留重点,去掉废话
目标2:分布简单(摆放有规律)
相似的东西靠近: - 轿车、公交车、货车 → 靠得近 - 车、道路、行人 → 有关系但不完全一样 - 车、香蕉、杯子 → 离得远
目标3:解耦(每个维度管一类信息)
不好的表征: - 一个数字同时混着颜色、速度、位置 好的表征: - z[0] 管颜色 - z[1] 管车型 - z[2] 管位置 - z[3] 管速度
目标4:可解释(人能看懂)
z[0] = 0.8 → 有车 z[1] = 0.2 → 有人 z[2] = 0.9 → 有路
生活类比:
压缩像把文章压缩成摘要;整齐像把书按类别放在书架上;解耦像把颜色、形状、大小分开记录;可解释像笔记写得让人看得懂。
学习特征(深度学习):让模型自己学怎么提取特征,从数据中自动发现规律。效果好,能学到人想不到的特征。
类比:手工特征 = 老师划重点(可能划不准);学习特征 = 学生自己总结重点(更适合自己)。
端到端学习:输入原始数据 → 直接输出结果,中间的特征提取也自动学习,不需要人工设计特征。
3基于压缩的学习原则 ⭐
好的表示是简约的(parsimonious),只捕捉数据中对任务必需的本质特征。压缩的必要性体现在三层面:
| 层面 | 含义 |
|---|---|
| 存储 | 压缩表示占用更少内存 |
| 不变性 | 压缩是对无关干扰因素(nuisance factors)保持不变性的方式 |
| 奥卡姆剃刀 | 同等解释数据的假设中,最简单的往往最可能真实 |
表征学习器的类型
| 学习方法 | 学习原则 | 摘要 |
|---|---|---|
| 自编码 Autoencoding | 压缩 | 移除冗余信息 |
| 对比学习 Contrastive | 压缩 | 实现对观察变换的不变性 |
| 聚类 Clustering | 压缩 | 把连续数据量化为离散类别 |
| 未来预测 Future prediction | 预测 | 预测未来 |
| 缺失填补 Imputation | 预测 | 预测缺失数据 |
| 代理任务 Pretext tasks | 预测 | 预测数据的抽象属性 |
4自编码器(Autoencoders)
自编码器是一个把数据映射回其自身的函数,但中间必须经过一个低维表示瓶颈。它强制网络学到数据的紧凑编码(移除冗余)。
5对比学习(Contrastive Learning)
对比学习让表征被监督对特定观察变换保持不变性,产生只捕获不同数据"视图"之间共有属性的压缩表示。监督信号以正样本对和负样本对的形式提供。
基于变换
同一图像的两个增强视图(裁剪/旋转/颜色抖动)应有相近嵌入(正对)。
基于共现
常一起出现的内容(如配对的图文)应有相近嵌入。
6聚类与 k-means
聚类同样源于压缩原则:若能仅用一个离散类别标签很好地概括一个信号,这个概括就成为后续推理更轻量、更抽象的基础。
k-means:把数据点映射到整数(即聚类),映射方式使每个数据点尽可能接近其所属聚类的均值。可看作 Encoder(数据→聚类)+ Decoder(聚类→均值)的离散版自编码。
7基于预测的原则与自监督学习
拥有视觉系统的意义在于能采取行动实现理想未来。预测泛指在给定观测下推断世界的任意属性(未来、过去、因果等)。视觉中大多数表征学习算法都在学习世界的压缩编码,同时这些编码要对未来有预测能力。
自监督学习(Self-Supervised Learning)
- 把无监督问题转化为有监督的经验风险最小化问题;
- 代理任务(pretext task):直接从原始数据本身"炮制/构造"出标签(预测目标)。
有趣的发现:在场景分类等任务上训练的深层 CNN,会自发涌现出物体检测器(Object Detectors Emerge in Deep Scene CNNs)。
8信息论与信息瓶颈 ⭐
KL 散度(相对熵 / 信息增益)
衡量从认知 $q(x)$ 到 $p(x)$ 我们的认知"更新了多少"。具有非负性、非对称性等性质:
$$D_{KL}(p \| q) = \sum p(x) \cdot \log\left[ \frac{p(x)}{q(x)} \right]$$ (离散)
性质:$$D_{KL}(p \| q) \geq 0$$, $$D_{KL}(p \| q) \neq D_{KL}(q \| p)$$(非对称)
核心意思:
KL散度 = 衡量两个分布有多"不同",用分布Q近似分布P会损失多少信息
举个例子:
真实分布P(考试成绩):
90-100分:30%
80-89分:40%
70-79分:20%
60-69分:10%
你的估计Q:
90-100分:20%
80-89分:30%
70-79分:30%
60-69分:20%
KL散度计算:
KL(P||Q) = Σ P(x) × log(P(x)/Q(x))
= 0.3×log(0.3/0.2) + 0.4×log(0.4/0.3) + ...
≈ 0.05
KL散度的性质:
- KL ≥ 0(永远非负)
- KL = 0 当且仅当 P = Q(完全一样)
- KL不对称:KL(P||Q) ≠ KL(Q||P)
在VAE中的应用:
希望学到的分布接近标准正态分布,用KL散度衡量"接近程度",KL越小,学到的分布越规整。
生活类比:
KL散度像"考试估分"的偏差。P = 真实成绩分布,Q = 你的估计,KL = 你的估计有多"离谱"。KL越小,你估得越准。
信息熵与交叉熵编码
$$H(X) = -\sum p(X) \cdot \log p(X)$$ 熵:描述不确定性
理想码长 $$= -\log_2 p_j$$(对真实概率 $$p$$)
实际码长(按模型 $$q$$ 编码) → 交叉熵 $$H_{ce}(p,q) = -\sum p_j \cdot \log q_j$$
$$H_{ce}(p,q) - H(p) = D_{KL}(p \| q)$$ 实际比理想多用的比特数
压缩编码核心:对出现概率大的符号用短码,概率小的用长码;平均码长下界即熵 $H(X)$。
核心意思:
信息熵 = "不确定性"的度量,不确定性越高,信息量越大
举个例子:
抛硬币:
公平硬币(正反各50%):
H = -0.5×log(0.5) - 0.5×log(0.5) = 1 bit
最不确定,熵最大
假硬币(正面90%,反面10%):
H = -0.9×log(0.9) - 0.1×log(0.1) = 0.47 bit
比较确定,熵较小
作弊硬币(永远正面):
H = -1×log(1) = 0 bit
完全确定,熵为0
信息熵的意义:
- 熵越大:越难预测,信息量越大
- 熵越小:越容易预测,信息量越小
- 熵为0:完全确定,没有新信息
在机器学习中:
分类问题:希望预测的熵小(确定是哪类);生成问题:希望生成的样本熵大(多样性强)。
生活类比:
信息熵像"惊喜程度"。抛公平硬币:结果很惊喜(熵大);抛假硬币:结果不太惊喜(熵小);抛作弊硬币:结果不惊喜(熵为0)。
互信息与信息瓶颈
互信息 $I(X;Y)$:衡量两变量依赖性,即从 $p(X)p(Y)$ 到 $p(X,Y)$ 的信息增益。
核心意思:
信息瓶颈 = 只保留"有用的"信息,丢弃"无关的"信息
举个例子:
输入X = 教科书全部内容(500页)
输出Y = 考试答案(10页)
信息瓶颈的目标:
找到一个表征Z,使得:
1. Z保留了关于Y的所有有用信息(考试要考的)
2. Z丢弃了关于X的无关信息(考试不考的)
类比:
X = 教科书500页
Y = 考试答案10页
Z = 复习笔记1页
好的Z应该:
- 保留:考试要考的所有知识点
- 丢弃:考试不考的废话
压缩 vs 保留的平衡:
压缩太多:可能丢失重要信息(考到没记的) 压缩太少:还有无关干扰(记了不考的) 最佳点:刚好保留所有有用信息
在深度学习中:
每一层都在做"信息瓶颈",逐层压缩,保留任务相关信息,最后一层得到最精炼的表征。
生活类比:
信息瓶颈像"划重点"。老师划重点:只保留考试要考的。划得太少:可能漏掉考点。划得太多:复习负担重。划得刚好:复习效率最高。
9迁移学习与预训练
表征学习的重要价值在于得到的嵌入可迁移:先在大规模数据上预训练一个通用表征,再迁移到下游小数据任务上微调。
| 概念 | 说明 |
|---|---|
| 预训练 (Pre-training) | 在大规模数据上学通用表征 |
| 迁移学习 (Transfer) | 把预训练表征迁移到下游任务 |
| 微调 (Fine-tuning) | 在下游小数据上调整参数 |
| 嵌入 (Embedding) | 数据的低维向量表示,可复用 |
⭐重点例题
🎯自测(点击展开)
表征学习和生成式建模分别是哪个方向?
自编码器为什么要设一个低维瓶颈?
对比学习的监督信号以什么形式提供?
自监督学习如何获得标签?
KL 散度为什么是非对称的?
信息瓶颈中"Z 对 Y 充分"是什么意思?
📝强化题库
选择题点选即时判分;填空题输入后"检查"或"显示答案"。