流形假设
陈述
虽然现实世界中的数据比如一张图片是由成千上万个维度
Example
在数学拓扑学中,流形在局部近似欧几里得空间 (如平面/直线),但是整体上是可能有复杂结构的几何形状。
一张二维的纸(2D 平面),本身是二维的,其基为
以 mnist 数据集举例,每张原始图都是 28 * 28 =784 维的,但是实际上,我们在 使用 vae 生成图的时候,引入的隐变量 laten_dim
if d << 内在维度: 模型capacity不够 生成模糊 细节丢失else if d >> 内在维度: KL collapse/后验坍塌的风险增加 浪费 采样噪声大容易混淆的另一些东西(不等价)
| 说法 | 含义 |
|---|---|
| Mode collapse(GAN) | 生成器只覆盖少数模式,和 VAE 的 posterior collapse 不是一回事。 |
| 先验与后验「匹配」得好 | 训练健康时 KL 也会小,但此时 |
记忆点: 判断是否「真·坍塌」,要看 **
流形的连通性
Q:流形是一个还是多个? A:多个
比如对于 MNIST,一共 0-9,是个类别,那其实每个类别都有一个流形,这个的根本原理是数据的连续性
数据的连续性对于任意一个具体数字,比如 3,我们可以连续地改变:笔画的粗细,倾斜角度,大小等等。这种连续变化一位着:对于任意两种合理的 写法
和 ,有一条连续路径 使得 ,路径上的每一个 t 都属于数字 3 的低维流形分布
在深度学习语境下的几个推论
流形的存在说明了
数据的表观存在的维度虽然庞大 ,但是受现实条件的约束,数据的自由度很低<==>流形的存在
神经网络的作用其实是展开流形
在原始数据的高维空间中,各种特征的分布的流形可能复杂纠缠。深度学习实际上就是用深层网络+非线性变换的手段,找到特征空间的映射,这个映射可以做到在流形空间中,类内连续,类间可分。
神经网络的操作无非是矩阵运算,矩阵运算本质上是对空间/向量进行折叠、旋转、拉伸。
- 原始空间: 像是一团被揉得极皱的彩色面团(不同颜色代表不同类)。
- 神经网络: 像是一双由于非线性(Activation)而变得极其灵活的手,尝试把面团抻平。
Example 两张揉搓之后缠在一起的纸(2 D->3 D 纠缠的流形)。神经网络(应该具体说是 Encoder)就是通过逐步的前向过程,并且在其中应用非线性变换,来将他们两个抚平展开,最后还能在他俩中间画一条分界线(类间可分,但是只针对分类模型来说)。
But! 在生成模型中,隐空间通常被强制约束在正态分布上。这就意味着,在数学上,隐空间其实是连通的。这是不是自相矛盾呢?
答案是并不是。这个问题笔者思考许久才把逻辑理顺:流形假设所关注的层面是数据本身,也就是说,他表达的意思是,无论表象多复杂高维的数据,其就数据本身而言,是存在于一个嵌入到高维空间(现实)中的低维空间(仅观测数据,那数据本身是有一个低维流形)的。 而对于分类模型和生成模型而言,其区别是对数据所做的维度变换,也就是看数据的维度度(在什么维度上观测数据):
| 观测维度 | 操作 | 典型模型 | |
|---|---|---|---|
| 分类模型 | 高维 | 将数据升维,找到分类面,但是这并不于数据本身的流形假设矛盾,只是我们看数据的视角变了 | SVM |
| 生成模型 | 低维 | 将数据降维,找到一个低维参数化的映射,可以将原始高维数据映射到低维,再从低维恢复成高维(恢复的过程就是生成过程,同时由于低维流形是连续的,所以我们可以观察到生成数据的连续,平滑的变化) | VAE |
判别任务 :流形的 tangle(解纠缠与分离)
原始高维空间中,不同类别的样本往往位于高度卷曲且相互纠缠的流形上,单纯的线性分类器无法将其分离。但是神经网络形式的判别器可以通过层级化的非线性变换,充当拓扑学中的同胚映射(非严格,其实根本不是)-> 神经网络通过一系列非线性映射,把原始空间中的复杂分布变换到一个更“可分”的表示空间,在该空间中类别可以用简单(如线性)方式分离。
本质是将数据升维,以达到:将卷曲、纠缠的流形展开;使类别流形在高维空间中线性可分。但是最终输出是一个多对一的映射,毕竟映射到的是标签,从信息量角度,是降维/压缩。
严格的同胚定义:
- 设X,Y 是两个拓扑空间,一个映射 f:X->Y,称为同胚,当且仅当:- 双射 - 连续 - 逆映射也连续 同胚映射可以理解为,在不改变拓扑结构的前提下,对空间进行的连续变形。 同胚也不是算子,他是只函数空间上的映射。比如,他经常和连续映射,微分同胚,在一起比较。
| 条件 | 强度 | |
|---|---|---|
| 连续映射 | 只要求连续 | 弱 |
| 同胚 | 连续+可逆+逆连续 | 中 |
| 微分同胚 | 同胚+可微+逆可微 | 强 |
同胚的判别原则:
如果两个空间同胚,那么他们必须在以下性质上完全一致:
- 连通性
- 是否有边界:线段有(有两个端点),圆没有(没有端点)
- 洞的数量(拓扑亏格/genus)
- 维度
- 紧性:<=>闭且有界=> 1. 连续函数在紧集上一定能取到最大/最小值2. 紧性在同胚下保持 闭区间[0,1]->紧 开区间(0,1)->非紧 整个 R->非紧
| 空间对 | 关键差异 |
|---|---|
| 圆 vs 线段 | 是否有边界(线段有端点) |
| 球面 vs 环面 | 洞的数量(genus 0 vs 1) |
| 圆 vs 椭圆 | 全部不变量一致 → 同胚 |
| 球面 vs 立方体表面 | 全部不变量一致 → 同胚 |
生成任务:流形的参数化与便利
生成模型关注的是流形本身的几何形状与概率密度。对 diffusion model 来说,其去噪过程可以视为在高维能量景观中寻找流形的过程。模型学习了一个能够指示“(目前)距离流形有多远”的 score function/gradient field 。生成的过程就像是一个随机落入高维空间的噪点,沿梯度场将轨迹收敛至低维流形表面的过程。 这个过程要更加细节的分类:
隐变量模型(VAE,GAN):
引入隐变量
Flow 模型(Normalized Flow):
对于流形空间的一些实际的例证
隐空间插值(latent space interpolation)
如果直接在原始数据空间进行插值,会得到重影,非常不自然的图像,因为简单插值叠加后的数据,离开了流形,走到了高维空间中概率密度非常低的角落(空旷地带) ,但是如果使用训练后的 GAN/VAE…等等生成模型,将图片映射到低维的隐空间后,进行插值,再解码回来,则会看到较为平滑的变化。这说明,低维隐空间中数据,确实形成了连续的低维流形,变化的过程是流形上的坐标变化过程,同时自然就发生了数据特征的变化。
对抗样本(adversarial examples)
对抗攻击会在图向上添加微小扰动,这个扰动是随机的,所以一定会包含在流形法向上的位移,使数据越过决策的边界,模型这时候会崩溃,分类错误。这个现象实际上又反向说明了模型学习到的决策边界是紧贴着数据的流形的,这种紧贴必然会带来在数据流形切向上的健壮性和法向上的脆弱性。