图自编码器的起源和应用

在这里插入图片描述
此文章同步发布于 paperweekly
图自编码器的起源和应用

0. 介绍

Kipf 与 Welling 16 年发表的「Variational Graph Auto-Encoders」提出了基于图的(变分)自编码器 Variational Graph Auto-Encoder(VGAE),自此开始,图自编码器凭借其简洁的 encoder-decoder 结构和高效的 encode 能力,在很多领域都派上了用场。

本文将先详尽分析最早提出图自编码器的「Variational Graph Auto-Encoders」这篇论文,将从以下几个角度进行分析:

  1. VGAE 的思想
  2. 没有变分阶段的 GAE 的 encoder、decoder 阶段
  3. 有变分阶段的 VGAE 如何从确定分布再到从分布中采样
  4. 实验效果分析

然后会再介绍两篇关于如何应用图自编码器的文章。

1. Variational Graph Auto-Encoders

论文链接:http://bayesiandeeplearning.org/2016/papers/BDL_16.pdf

1.1 论文概览

先简单描述一下图自编码器的intention 和用途:获取合适的 embedding 来表示图中的节点不是容易的事,而如果能找到合适的 embedding,就能将它们用在其他任务中。VGAE 通过 encoder-decoder 的结构可以获取到图中节点的 embedding,来支持接下来的任务,如链接预测等。

VGAE 的思想和变分自编码器(VAE)很像:利用隐变量(latent variables),让模型学习出一些分布(distribution),再从这些分布中采样得到 latent representations(或者说 embedding),这个过程是 encode 阶段,然后再利用得到的 latent representations 重构(reconstruct)出原始的图,这个过程是 decode 阶段。只不过,VGAE 的 encoder 使用了 GCN,decoder 是简单的内积(inner product)形式。

下面具体讲解变分图自编码器(VGAE)。先讲 GAE,即图自编码器(没有变分)。

1.2 图自编码器(GAE)

统一规范,规定几个 notation 如下:

  • 图用 G = ( V , E ) \mathcal{G} = (\mathcal{V}, \mathcal{E}) G=(V,E) 表示,其中 V \mathcal{V} V 表示节点集合, E \mathcal{E} E 表示边集合
  • A \mathbf{A} A: 邻接矩阵
  • D \mathbf{D} D: 度矩阵
  • N N N: 节点数
  • d d d: 节点的特征(features)维度
  • X ∈ R N × d \mathbf{X} \in \Bbb{R}^{N \times d} XRN×d表示节点的特征矩阵
  • f f f: embedding 维度
  • Z ∈ R N × f \mathbf{Z} \in \Bbb{R}^{N \times f} ZRN×f: 节点的 embedding
1.2.1 Encoder

GAE 使用 GCN 作为 encoder,来得到节点的 latent representations(或者说 embedding),这个过程可用一行简短的公式表达:

Z = G C N ( X , A ) \mathbf{Z} = \mathrm{GCN}(\mathbf{X}, \mathbf{A}) Z=GCN(X,A)

G C N \mathrm{GCN} GCN 视为一个函数,然后将 X \mathbf{X} X A \mathbf{A} A 作为输入,输入到 G C N \mathrm{GCN} GCN 这个函数中,输出 Z ∈ R N × f \mathbf{Z} \in \Bbb{R}^{N×f} ZRN×f Z \mathbf{Z} Z 代表的就是所有节点的 latent representations,或者说 embedding。

如何定义 G C N \mathrm{GCN} GCN 这个函数?kipf 在论文中定义如下:

G C N ( X , A ) = A ~ R e L U ( A ~ X W 0 ) W 1 \mathrm{GCN}(\mathbf{X}, \mathbf{A}) = \tilde{\mathbf{A}} \mathrm{ReLU} (\tilde{\mathbf{A}}\mathbf{XW_0})\mathbf{W_1} GCN(X,A)=A~ReLU(A~XW0)W1

其中, A ~ = D − 1 2 A D − 1 2 \tilde{\mathbf{A}} = \mathbf{D}^{-\frac{1}{2}} \mathbf{A} \mathbf{D}^{-\frac{1}{2}} A~=D21AD21 W 0 \mathbf{W_0} W0 W 1 \mathbf{W_1} W1 是待学习的参数。

简言之,这里 G C N \mathrm{GCN} GCN 就相当于一个以节点特征和邻接矩阵为输入、以节点 embedding 为输出的函数,目的只是为了得到 embedding

1.2.2 Decoder

GAE 采用 inner-product 作为 decoder 来重构(reconstruct)原始的图

A ^ = σ ( Z Z T ) \hat{\mathbf{A}} = \sigma(\mathbf{Z} \mathbf{Z}^\mathrm{T}) A^=σ(ZZT)

上式中, A ^ \hat{\mathbf{A}} A^ 就是重构(reconstruct)出来的邻接矩阵。

1.2.3 How to learn

一个好的 Z \mathbf{Z} Z,就应该使重构出的邻接矩阵与原始的邻接矩阵尽可能的相似,因为邻接矩阵决定了图的结构。因此,GAE 在训练过程中,采用交叉熵作为损失函数:

L = − 1 N ∑ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) \mathcal{L} = - \frac{1}{N} \sum y \log \hat{y} + (1-y) \log (1-\hat{y}) L=N1ylogy^+(1y)log(1y^)

上式中, y y y 代表邻接矩阵 A \mathbf{A} A 中某个元素的值(0 或 1), y ^ \hat{y} y^ 代表重构的邻接矩阵 A ^ \mathbf{\hat{A}} A^ 中相应元素的值(0 到 1 之间)。

从损失函数可以看出来,希望重构的邻接矩阵(或者说重构的图),与原始的邻接矩阵(或者说原始的图)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值