许多数据集本身就具有结构,这与图像等数据(通常将每个样本独立看待)形成对比。例如社交网络、分子结构或知识库,这些数据很自然地表现为图,由节点(实体)和边(关系)构成。将标准变分自编码器(VAEs)直接应用于这类图数据并不简单,因为它们的大小不一、拓扑结构复杂,且置换不变性很重要(图的含义不会因节点重新排序而改变)。图变分自编码器(Graph VAEs)是一类旨在从图结构数据中学习有意义的表示并生成这类数据的模型。主要思路是借助图神经网络(GNNs)作为VAE架构中的主要组成部分。GNNs是学习图数据的有效工具,因为它们通过迭代汇集节点局部邻域的信息来运作。这种消息传递机制使GNNs能够学习节点表示,这些表示既能体现节点自身的特征,也能反映其在图中的结构作用。图自编码器 (GAEs) 和变分图自编码器 (VGAEs)VAEs在图上的一个重要应用是学习节点嵌入和预测链接(即缺失的边)。图自编码器(GAEs)及其变分对应模型,即变分图自编码器(VGAEs),正是为此目的而设计。典型的VGAE设置如下:编码器:一个GNN(例如图卷积网络GCN)接收图的邻接矩阵$A$和节点特征$X$作为输入。对于每个节点$i$,它会为其潜在表示输出参数,一般是高斯分布的均值$\mu_i$和对数方差$\log \sigma_i^2$。因此,节点$i$的潜在向量$Z_i$的近似后验为$q(Z_i | X, A) = \mathcal{N}(Z_i | \mu_i, \text{diag}(\sigma_i^2))$。整体近似后验常被假定为在节点上分解:$q(Z | X, A) = \prod_i q(Z_i | X, A)$。采样:潜在节点表示$Z_i$通过重参数化技巧进行采样:$Z_i = \mu_i + \sigma_i \odot \epsilon_i$,其中$\epsilon_i \sim \mathcal{N}(0, I)$。解码器:解码器旨在从潜在节点嵌入$Z$重建邻接矩阵$A$。一种常用方法是在节点嵌入对之间使用内积(或一个简单的MLP)来预测边的概率: $$ p(\hat{A}{ij}=1 | Z_i, Z_j) = \sigma(Z_i^T Z_j) $$ 其中$\hat{A}{ij}$是重建的边概率,$\sigma(\cdot)$是sigmoid函数。VGAE的ELBO公式如下: $$ \mathcal{L}{VGAE} = \sum{(i,j) \in A \cup A^-} \log p(\hat{A}_{ij} | Z_i, Z_j) - \sum_i KL(q(Z_i|X,A) || p(Z_i)) $$ 第一项是邻接矩阵的重建对数似然(经常考虑观测到的边和等量的采样非边$A^-$以保持平衡)。第二项是每个节点潜在表示的近似后验$q(Z_i|X,A)$与先验$p(Z_i)$(一般是标准正态分布$\mathcal{N}(0,I)$)之间的KL散度之和。digraph VGAE { rankdir=TB; node [shape=box, style="filled", fillcolor="#e9ecef", fontname="Helvetica"]; edge [fontname="Helvetica"]; graph [fontname="Helvetica", label="用于链接预测的VGAE架构"]; subgraph cluster_encoder { label="编码器 q(Z|X,A)"; style="filled"; color="#dee2e6"; X_A [label="输入图 (特征X, 邻接矩阵A)", shape=cylinder, fillcolor="#a5d8ff"]; GNN [label="图神经网络\n(例如, GCN层)", fillcolor="#74c0fc"]; MuSigma_nodes [label="节点级潜在参数\nμ_i, log σ_i²", fillcolor="#4dabf7"]; X_A -> GNN; GNN -> MuSigma_nodes; } Z_nodes [label="采样的节点潜在变量Z_i\n(通过重参数化)", shape=ellipse, fillcolor="#b2f2bb"]; MuSigma_nodes -> Z_nodes; subgraph cluster_decoder { label="解码器 p(Â|Z)"; style="filled"; color="#dee2e6"; InnerProduct [label="链接解码器\n(例如, σ(Z_iᵀZ_j))", fillcolor="#74c0fc"]; A_hat [label="重建的邻接矩阵 Â", shape=cylinder, fillcolor="#a5d8ff"]; InnerProduct -> A_hat; } Z_nodes -> InnerProduct; ELBO [label="优化ELBO:\nE[log p(Â|Z)] - KL(q(Z|X,A) || p(Z))", shape=note, fillcolor="#ffec99"]; A_hat -> ELBO [style=dashed, arrowhead=none, label="重建项"]; MuSigma_nodes -> ELBO [style=dashed, arrowhead=none, label="KL散度项"]; }变分图自编码器(VGAE)的示意图。GNN编码器为每个节点生成潜在参数。采样后,解码器重建图的邻接矩阵。VGAEs特别适用于社群检测(嵌入相似的节点可能属于同一社群)和不完整图中的链接预测等任务。用于生成完整图的VAEs除了学习节点嵌入和预测链接之外,一个更具雄心的目标是生成与训练图数据集具有相似特征的全新图。这需要VAEs的潜在变量$z$代表整个图结构,而不仅仅是单个节点。编码器:编码器将输入图$G = (X, A)$映射到图级潜在空间$q(z|G)$上的分布参数。这一般涉及:使用GNN计算所有节点$v \in V$的节点嵌入$H_v$。应用图池化或读出函数(例如求和、平均,或更复杂的基于注意力机制的方法)将节点嵌入汇集为单个图表示$h_G = \text{READOUT}({H_v}_{v \in V})$。将$h_G$输入MLP以生成图级潜在变量$z$的均值$\mu_z$和对数方差$\log \sigma_z^2$。采样:使用重参数化从$z \sim \mathcal{N}(\mu_z, \text{diag}(\sigma_z^2))$中采样。解码器:解码器$p(G'|z)$接收图潜在变量$z$并生成新图$G'$。这是最具难度的一部分。方法包括:邻接矩阵生成:MLP可以直接输出扁平化的邻接矩阵,但这对于大型图在置换不变性和可扩展性方面存在困难。自回归生成:顺序生成节点和边。例如,可以先决定节点数量,然后迭代添加节点并在它们之间预测边,这都以$z$和部分构建的图为条件。GraphRNN或GRAN(图循环注意力网络)等模型就采用此类策略。一次性生成与细化:一些模型生成一个原型图结构,然后进行细化。用于图生成VAEs的ELBO如下: $$ \mathcal{L}{GraphVAE} = \mathbb{E}{q(z|G)}[\log p(G'|z)] - KL(q(z|G) || p(z)) $$ 重建项$\log p(G'|z)$可能很复杂,具体取决于图生成方法的定义(例如,边概率的乘积,或顺序生成过程下的似然)。digraph GraphGenVAE { rankdir=TB; node [shape=box, style="filled", fillcolor="#e9ecef", fontname="Helvetica"]; edge [fontname="Helvetica"]; graph [fontname="Helvetica", label="用于完整图生成的VAE"]; subgraph cluster_encoder { label="编码器 q(z|G)"; style="filled"; color="#dee2e6"; G_in [label="输入图 G", shape=cylinder, fillcolor="#a5d8ff"]; GNN_Enc [label="图神经网络", fillcolor="#74c0fc"]; Readout [label="图读出函数\n(例如, 节点嵌入上的求和/平均池化)", fillcolor="#4dabf7"]; MuSigma_graph [label="图级潜在参数\nμ_z, log σ_z²", fillcolor="#339af0"]; G_in -> GNN_Enc; GNN_Enc -> Readout; Readout -> MuSigma_graph; } z_graph [label="采样的图潜在变量z\n(通过重参数化)", shape=ellipse, fillcolor="#b2f2bb"]; MuSigma_graph -> z_graph; subgraph cluster_decoder { label="解码器 p(G'|z)"; style="filled"; color="#dee2e6"; GraphDecoder [label="图解码器\n(例如, 自回归, 用于邻接矩阵的MLP)", fillcolor="#74c0fc"]; G_out [label="生成的图 G'", shape=cylinder, fillcolor="#a5d8ff"]; GraphDecoder -> G_out; } z_graph -> GraphDecoder; ELBO_gen [label="优化ELBO:\nE[log p(G'|z)] - KL(q(z|G) || p(z))", shape=note, fillcolor="#ffec99"]; G_out -> ELBO_gen [style=dashed, arrowhead=none, label="图重建项"]; MuSigma_graph -> ELBO_gen [style=dashed, arrowhead=none, label="KL散度项"]; }旨在生成全新图结构的VAE架构。编码器为整个图生成一个潜在向量,解码器尝试从该向量合成新图。目标函数与架构考量编码器选择GNN架构(例如GCN、图注意力网络(GAT)、GraphSAGE)会对性能产生很大影响。GATs凭借其注意力机制,在学习节点邻域哪些部分最相关时能发挥特殊作用。对于图生成中的解码器,确保置换不变性是一个重要考量。如果解码器以特定顺序生成节点或边,模型可能会学习到依赖于顺序的偏差。自回归模型经常尝试通过以规范排序为条件或使用置换等变组件来缓解此问题。图的重建损失需要审慎定义。邻接矩阵重建(VGAE风格):对于无权重图,常用二元交叉熵;对于有权重图,则常用均方误差。节点特征重建:如果节点具有特征$X$,可以在ELBO中添加一个额外项以从$Z$重建$X$。完整图生成:损失可能涉及单个边的概率、节点存在性,甚至更复杂的图相似性度量。图VAEs的应用图VAEs已在各种方面得到应用:药物发现与分子生成:图是分子的自然表现形式。图VAEs可以学习生成具有所需化学属性的新颖分子结构。社交网络分析:建模社群结构、预测未来交互或生成逼真的合成社交网络。推荐系统:用户-物品交互可以建模为二分图。图VAEs可帮助学习用户和物品嵌入以用于推荐。知识图补全:预测大型知识图中的缺失关系(边)。生成逼真网络拓扑:用于物理学、生物学或基础设施规划中的模拟。进阶考量尽管图VAEs功能强大,但它们也面临自身的一系列难题:可扩展性:对于非常大的图,GNN计算可能成本很高。图的采样技术或小批量策略是活跃的研究方向。离散结构:图本质上是离散的。从连续潜在空间生成它们可能很棘手。一些方法使用离散潜在变量(如为图调整的VQ-VAEs)或采用强化学习技术来处理解码器中的离散决策。动态图:许多图随时间演变。扩展图VAEs以建模时序图动态是一个持续研究方向。评估:量化生成图的质量很困难。度量标准经常包括图统计量(度分布、聚类系数)、视觉相似性,或者如果生成的图用于下游任务时的任务特定性能。图VAEs代表了将生成建模扩展到复杂结构化数据方面的重要进展。通过结合VAEs的概率框架与GNNs的表示能力,它们提供了一个多功能工具集,用于理解、重建和生成各种科学和工业应用中的图数据。随着研究的推进,我们可以期待更高级和可扩展的图VAE模型,能够处理日益复杂的基于图的任务。