0. 先不要背结构:AE 到底在解决什么问题
理解自编码器,不能从“编码器加解码器”开始,因为那只是结构描述。真正的问题起点是:我们如何从高维观测中提取对数据生成机制有用的低维表示?
设一个样本为 。原始维度 可能很大,但这些维度并不一定彼此独立。以手写数字为例,一张 的灰度图有 784 个像素,但决定图像外观的潜在因素可能只有数字类别、笔画粗细、倾斜角度、位置和书写风格。
这意味着真实数据往往只占据高维空间中的一个低维区域。我们希望找到一个表示 ,其中 ,并同时满足三个条件:
- 充分性: 保留重建数据或完成下游任务所需的信息。
- 紧凑性: 不机械保存输入中的每个细节。
- 结构性:相似样本在潜在空间中仍然接近,重要变化对应可理解的方向。
AE 的核心不是“把输入复制到输出”,而是利用一个受约束的信息通道,逼迫模型回答:如果只能保留有限信息,哪些信息最值得保留?
1. AE 是一个受约束的恒等映射
自编码器由编码器 和解码器 组成:
编码器参数是 ,解码器参数是 。训练目标是让重构结果 接近输入 :
从函数角度看,AE 在学习一个接近恒等映射 的复合函数:
但如果模型可以毫无限制地实现恒等映射,潜在表示就没有意义。一个维度不变、参数量巨大、没有噪声或正则约束的 AE,完全可能只学习“如何复制”。因此,重构目标本身不保证表示有用,约束才是表示学习发生的原因。
2. 为什么瓶颈会产生表示
最直接的约束是令潜在维度 小于输入维度 :
编码器必须把 维输入压进 维通道。由于通道容量有限,它无法无损保留全部细节,只能优先保存那些能够解释训练数据中大量共同变化的方向。
可以把它理解成一次信息预算分配:
- 偶然噪声只解释一个样本,保存价值低。
- 重复出现的笔画、轮廓或语义结构能解释大量样本,保存价值高。
- 解码器能利用的规律越稳定,编码器越愿意把容量分配给它。
但“低维”不是唯一约束。常见约束还包括:
- 去噪约束:输入被污染为 ,目标仍是恢复干净的 。
- 稀疏约束:限制只有少量潜在单元可以活跃。
- 收缩约束:惩罚编码器对输入微小变化过度敏感。
- 概率约束:像 VAE 一样,让潜在变量服从受控分布。
这些方法本质相同:它们都在阻止网络走向“逐样本记忆”这一退化解。
3. 线性 AE 为什么与 PCA 有关
先看最简单的情况。假设编码器和解码器都是线性的,不使用偏置和激活函数:
若使用均方重构损失:
并将潜在维度限制为 ,那么最优线性 AE 所学习的子空间与 PCA 的前 个主成分张成的子空间一致。
为什么?因为 的秩最多为 。模型必须在所有秩不超过 的线性变换中,寻找一个对数据重构误差最小的投影。PCA 做的正是保留方差最大的 个正交方向,因为丢弃这些方向会造成最大的平方误差。
这个结论揭示了 AE 的底层角色:
线性 AE 是低秩子空间学习;加入非线性后,AE 尝试学习弯曲的数据流形。
非线性 AE 不再局限于一个平面子空间。编码器可以把弯曲流形展开到潜在空间,解码器再把潜在坐标映射回观测空间。
4. 从流形角度理解编码器和解码器
假设观测数据由某些低维潜在因素 经过未知生成过程 产生:
其中 表示噪声。我们看不到 ,只能看到 。
理想情况下:
- 编码器 近似求逆过程,从 推断潜在坐标。
- 解码器 近似生成过程,从潜在坐标恢复观测。
但必须注意:AE 学到的 通常不可唯一识别。只要编码器和解码器同时做出互相抵消的可逆变换,重构结果就可以完全不变。因此,不能因为某个潜在维度变化就轻易断言它一定对应“笔画粗细”或某个真实因果因素。
重构只能约束信息是否足够,不能自动保证语义可解释、因果正确或维度解耦。
5. 重构损失不是随便选的
不同重构损失对应不同的数据假设。
均方误差
MSE 可以理解为假设每个输出维度服从以 为均值、方差固定的高斯分布。偏差越大,惩罚按平方增长。
二元交叉熵
对于二值数据或取值在 的伯努利参数,可使用:
为什么特征尺度重要
如果一个特征取值范围是 0 到 10000,另一个特征是 0 到 1,直接使用 MSE 时,第一个特征会主导梯度。模型会把大部分容量用于重构数值尺度大的变量,而不一定是语义更重要的变量。
所以,损失函数和数据预处理共同决定了模型认为什么叫“相似”和“重要”。
6. 梯度到底怎样让 AE 学会重构
以单样本 MSE 为例:
损失对重构输出的梯度为:
这个残差指出每个输出维度应该向哪个方向移动。梯度先通过解码器反向传播,更新 ,使解码器更善于把 映射回 ;然后继续穿过 传入编码器,更新 ,使编码器产生更容易被解码器利用的表示。
因此,AE 学到的不是“客观最正确的表示”,而是在当前编码器、解码器、损失函数和约束共同定义下,最有利于重构的表示。
7. 从普通样本到图:独立同分布假设失效
普通 AE 通常把每个样本独立输入编码器。但图数据中的节点不是孤立样本。
一个图写作:
并通常包含:
- 邻接矩阵 。
- 节点特征矩阵 。
第 个节点的语义可能同时由 、邻居属性和所在结构位置决定。若仍使用逐节点 MLP:
那么两个属性完全相同、结构位置完全不同的节点会得到相同表示。图结构信息被彻底丢失。
GAE 的第一个改变,就是让编码器依赖 和 :
通常, 是 GCN、GraphSAGE、GAT 或其他消息传递网络。
8. GAE 的两个祖先:自编码器与矩阵分解
GAE 表面上是“AE 加 GNN”,但从更底层看,它还继承了图矩阵分解思想。
如果目标是重构邻接矩阵,我们希望找到低维矩阵:
使得:
原本需要 个位置描述节点对关系,而 只需要 个数。若 ,这相当于用低秩潜在因子解释图连接。
传统矩阵分解直接把每个节点的向量当作待优化参数;GAE 则进一步规定:节点向量必须由一个共享的图编码器从特征和邻域中计算出来。
这带来两种归纳偏置:
- 相似局部结构通过共享编码器获得相似处理方式。
- 节点表示不仅要解释连接,还要与节点属性和消息传播一致。
9. 从邻域平滑推导 GCN 编码器
经典 GAE 常使用两层 GCN。先给邻接矩阵加入自环:
自环的意义是:节点更新时不仅接收邻居信息,也保留自身信息。
令 为 的度矩阵:
对称归一化邻接矩阵为:
一层 GCN 可以写成:
逐项解释:
- :初始节点特征。
- :按归一化权重聚合邻居表示。
- :模型需要学习的特征变换矩阵。
- :非线性激活函数。
度归一化不是形式装饰。若直接求和,高度节点会因邻居多而产生数值更大的表示;归一化使不同度数节点的消息尺度更可控。
一个两层 GAE 编码器常写成:
第一层融合一阶邻域,第二层继续融合更远信息。 和 是训练学习的参数, 通常是给定数据,不是通过梯度直接更新的参数。
10. 内积解码器究竟假设了什么
经典 GAE 使用内积预测节点 与节点 是否相连:
其中:
内积大,预测边概率高;内积小或为负,预测边概率低。
这隐含了几个重要假设:
- 同质性假设:容易相连的节点应该在潜在空间中相似。
- 对称性假设:,因此天然适合无向关系。
- 低秩假设:复杂邻接关系可以由少量潜在维度解释。
如果图是有向的、多关系的,或连接主要发生在“不同类型”节点之间,简单内积解码器可能先天不合适。
11. 图重构损失如何产生“吸引与排斥”
对节点对 ,二元交叉熵为:
其中:
对内积分数 求导:
这条式子揭示了 GAE 的学习动力:
- 对真实边,。若预测概率偏低,梯度为负,优化会推动内积增大,使两个表示更接近。
- 对不存在的边,。若预测概率偏高,梯度为正,优化会推动内积减小,使两个表示分离。
所以经典 GAE 的潜在空间由两股力塑造:真实边产生吸引,负边产生排斥;GNN 编码器又要求这些位置必须由邻域传播和共享参数产生。
12. 为什么负采样不是实现细节
一个含 个节点的无向图大约有 个候选节点对,而真实边数通常远小于这个数量。
若把所有非边都加入损失:
- 计算和内存接近 。
- 负样本远多于正样本。
- 模型可能通过几乎全部预测为非边获得看似不错的平均结果。
因此训练通常只采样部分非边:
是正边集合, 是采样负边, 控制两类损失权重。
不同负采样会定义不同难度的问题:随机负样本通常很容易;结构相近但未连接的“困难负样本”更能检验模型是否真的理解关系。论文若没有交代负采样和数据划分,其链接预测结果很难公平比较。
13. 属性重构与结构重构在约束什么
GAE 可以重构图结构:
也可以重构节点属性:
联合目标为:
这两个目标不一定一致:
- 结构重构要求 能解释谁与谁连接。
- 属性重构要求 能保留节点自身特征。
当图具有强同质性时,两者可能互相促进;当相连节点属性差异很大时,两者可能产生梯度冲突。 不是普通调参项,它实际规定了“好表示”更偏向结构还是属性。
14. 一次完整的 GAE 训练到底发生了什么
以 GCN 编码器和内积解码器为例:
- 输入 和训练图 。
- 计算归一化矩阵 。
- GCN 通过 聚合消息,输出节点表示 。
- 对正边和采样负边计算 。
- 经过 Sigmoid 得到边概率。
- 用二元交叉熵计算重构损失。
- 梯度先更新解码相关分数,再穿过 回到 GCN。
- 优化器更新 、 等参数。
模型学习的是一套共享编码规则,不是给每条边背答案。但在传导式设置中,编码器训练时已经看到整张图的大部分结构,所以不能把“共享参数”误解成天然具备对新图的归纳能力。
15. 链接预测中最容易犯的数据泄漏
如果要预测测试边,就必须先把测试边从编码器使用的邻接矩阵中删除。
错误做法是:
- 用完整邻接矩阵进行 GCN 消息传播。
- 再要求模型预测其中一部分“测试边”。
此时测试边已经参与了节点表示计算,模型等于提前看到了答案。
正确流程应该先划分:
然后仅用 构造编码器邻接矩阵。验证边和测试边只能用于评价,不能参与消息传播或负样本构造。
16. 从 GAE 到 VGAE:为什么要学习分布
普通 GAE 为每个节点输出一个确定向量 。VGAE 则让编码器输出概率分布参数:
通过重参数化采样:
训练目标不再只有重构,还包含 KL 散度:
第一项要求潜在变量能够重构图;第二项限制后验分布不要任意散开,使其接近先验 ,通常是标准正态分布。
这带来更连续、可采样的潜在空间,但也引入新的权衡:KL 约束太强时,潜在变量可能忽略输入,出现后验坍塌;太弱时,模型又接近普通 GAE。
17. GAE 学到的表示究竟是什么
经典 GAE 学到的 不是图结构的“真实本质”,而是以下条件共同定义的最优折中:
这里 表示编码器能够产生的表示集合。
换句话说, 同时受四件事约束:
- 编码器允许怎样传播信息。
- 解码器用什么相似性判断关系。
- 损失函数如何定义错误。
- 负样本和训练数据如何分布。
只要其中一项改变,“好表示”的含义就会改变。因此,不能脱离任务和解码器孤立评价 embedding。
18. 为什么重构好不等于下游任务好
假设图中节点度数差异很大。模型可能仅凭节点度数就很好地预测大量边,从而获得很高的重构指标,但这种表示未必包含节点类别所需的语义。
同样,内积解码器偏爱同质连接。如果下游任务需要区分连接紧密但类别不同的节点,极强的结构重构反而可能压缩掉有判别力的差异。
所以评价表示至少需要两层证据:
- 重构层证据:AUC、AP、重构误差等。
- 下游层证据:节点分类、聚类、异常检测或推荐指标。
若论文只报告重构指标,就只能证明模型适合当前重构问题,不能证明表示具有普遍价值。
19. GAE 常见失效机制
19.1 过平滑
消息传播层数过多时,相连节点表示不断平均,最终趋于相似。编码器失去区分节点的能力。
19.2 过压缩
大量远距离信息必须通过固定维度向量和有限边路径传递,形成信息瓶颈。即使增加层数,也不一定能保留所有远程依赖。
19.3 度数捷径
模型可能主要学习节点度数或局部密度,而不是任务真正关心的语义结构。需要使用度数控制基线或结构扰动实验检查。
19.4 异配图失效
当相连节点倾向于属于不同类别时,邻域平滑和内积相似性假设都可能错误。此时需要关系感知、符号传播或更灵活的解码器。
19.5 结构噪声被忠实重构
重构目标默认观测图值得恢复。如果图中存在错误边、恶意连接或采样偏差,模型会把噪声也当成监督信号。
19.6 二次复杂度
完整计算 的时间和空间复杂度接近 ,大图上不可行。实际系统必须采用边采样、候选召回、子图训练或分块计算。
19.7 解码器能力不足
内积无法自然表示有向边和多关系边,也难以表达非对称规则。可替换为双线性、MLP、距离函数或关系特定解码器。
20. 一个最小例子:三节点链
考虑三节点链:
A — B — C
真实正边是 和 ,非边是 。
训练会产生三种力量:
- 正边损失拉近 与 。
- 正边损失拉近 与 。
- 负边损失推远 与 。
但因为 同时连接两端,三个目标可能冲突。若潜在维度太低或解码器过于简单,模型无法同时完美满足所有关系。
这个小例子说明:图嵌入不是把每条边单独拟合,而是在有限维空间中寻找全局折中。图越复杂,折中越明显。
21. 读 AE/GAE 论文时的第一性检查表
问题层
- 作者真正要保留的信息是什么?
- 为什么原始空间不适合直接完成任务?
- 重构是最终目的,还是获得表示的代理任务?
模型层
- 编码器的归纳偏置是什么?
- 瓶颈在哪里:维度、噪声、稀疏性还是分布约束?
- 解码器能表达哪些关系,不能表达哪些关系?
目标层
- 损失函数隐含什么数据分布假设?
- 正负样本怎样构造,权重如何设置?
- 多个损失之间是否存在梯度冲突?
实验层
- 测试边是否从消息传播图中移除?
- 提升来自编码器、解码器、采样策略还是更大计算量?
- 是否用下游任务证明表示价值,而不只报告重构效果?
适用边界
- 方法是否依赖同质性、低秩性或图结构可靠性?
- 时间和空间复杂度能否扩展到真实图?
- 面对新节点、新图或分布变化时还能否工作?
22. 最后的统一理解
AE 的第一性原理是:通过受约束的信息通道和重构目标,迫使模型寻找能够解释观测数据的紧凑表示。
GAE 在此基础上增加两层结构:
- 用 GNN 规定信息如何沿图传播。
- 用图解码器规定什么样的潜在几何能够解释连接关系。
经典 GAE 既可以看成图上的自编码器,也可以看成由 GNN 参数化的非线性低秩矩阵分解。
真正应该记住的不是“编码器—解码器”六个字,而是下面这条因果链:
约束信息容量,产生表示压力;用消息传递引入图结构;用重构误差定义好坏;用梯度把真实边变成吸引、非边变成排斥;最终得到在特定假设和任务下有效的节点表示。