数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
十二、GraphGAN [2018]
graph representation learning
(也被称作network embedding
)旨在将图(或者network
)中的每个顶点表达为一个低维向量。graph representation learning
可以促进对顶点和边的网络分析和预测任务。学到的embedding
能够使广泛的实际application
受益,例如链接预测、节点分类、推荐、可视化、知识图谱representation
、聚类、text embedding
、社交网络分析。最近,研究人员研究了将representation learning
方法应用于各种类型的图,例如加权图weighted graph
、有向图directed graph
、有符号图signed graph
、异质图heterogeneous graph
、属性图attributed graph
。此外,先前的一些工作也试图在学习过程中保留特定的属性,例如全局结构global structure
、社区结构community structure
、分组信息group information
、非对称传递性asymmetric transitivity
。总的来讲,大多数现有的
graph representation learning
方法可以分为两类。- 第一类是生成式
graph representation learning
模型。类似于经典的生成模型generative model
(例如高斯混合模型Gaussian Mixture Model: GMM
或潜在狄利克雷分配Latent Dirichlet Allocation: LDA
),生成式graph representation learning
模型假设:对于每个顶点 $ v_c $ ,存在一个底层的真实的连通性分布underlying true connectivity distribution
$ p_\text{true}(v\mid v_c) $ ,它给出了 $ v_c $ 对图中所有其它顶点的连通性偏好connectivity preference
(或者相关性分布relevance distribution
)。因此,图中的边可以被视为由这些条件分布生成的观察样本observed sample
,并且这些生成模型通过最大化图中边的可能性来学习顶点embedding
。例如,DeepWalk
使用随机游走对每个顶点的上下文顶点进行采样,并尝试最大化观察给定顶点的上下文顶点的对数似然。node2vec
通过提出有偏随机游走过程进一步扩展了这个想法,这个有偏随机游走过程在为给定顶点生成上下文时提供了更大的灵活性。 - 第二类是判别式
graph representation learning
模型。与生成模型不同的是,判别式graph representation learning
模型不会将边视为从底层条件分布生成的,而是旨在学习一个分类器来直接预测边的存在。通常,判别模型discriminative model
将两个顶点 $ v_i $ 和 $ v_j $ 共同视为特征,并根据图中的训练数据预测两个顶点之间存在边的概率,即 $ p(\text{edge}\mid (v_i,v_j)) $ 。例如,SDNE
使用顶点的稀疏邻接向量sparse adjacency vector
作为每个顶点的原始特征,并应用自编码器在边存在edge existence
的监督下提取顶点的低维稠密特征。PPNE
直接通过对正样本(连接的顶点pair
对)和负样本(未连接的顶点pair
对)的监督学习来学习顶点embedding
,同时在学习过程中也保留了顶点的固有属性。
尽管生成模型和判别模型通常是
graph representation learning
方法的两个不相交的类别,但是它们可以被视为同一枚硬币的两个方面。事实上,LINE
已经对于隐式地结合这两个目标(一阶邻近性和二阶邻近性)进行了初步的尝试。最近,生成对抗网络Generative Adversarial Net: GAN
受到了极大的关注。通过设计一个博弈论game-theoretical
的minimax
游戏来结合生成模型和判别模型,GAN
及其变体在各种应用中取得了成功,例如图像生成image generation
、序列生成sequence generation
、对话生成dialogue generation
、信息检索information retrieval
、领域适应domain adaption
。受
GAN
的启发,论文《GraphGAN: Graph Representation Learning with Generative Adversarial Nets》
提出了一种新颖的框架GraphGAN
,它统一了graph representation learning
的生成式思维和判别式思维。具体而言,框架的目标是在GraphGAN
的学习过程中训练两个模型:- 生成器
generator
$ G(v\mid v_c) $ ,它试图拟合底层的真实的连通性分布 $ p_\text{true}(v\mid v_c) $ ,生成最有可能与 $ v_c $ 连接的顶点。 - 判别器
discriminator
$ D(v,v_c) $ ,它试图区分well-connected
的顶点pair
对和ill-connected
的顶点pair
对,并计算顶点 $ v $ 和 $ v_c $ 之间存在边的概率。
在提出的
GraphGAN
中,生成器 $ G $ 和判别器 $ D $ 在minimax
游戏中充当两个参与者:生成器试图在判别器提供的指导下产生最难以区分的 “假” 顶点,而判别器试图在ground truth
和 “假” 顶点之间划清界限从而避免被生成器愚弄。这场博弈中的竞争促使它们双方都提高自己的能力,直到生成器(代表模型学到的条件分布)与真实的连通性分布true connectivity distribution
无法区分。在
GraphGAN
框架下,论文研究了生成器和判别器的选择。不幸的是,作者发现传统的softmax
函数(及其变体)不适用于生成器,有两个原因:- 对于给定的顶点,
softmax
会同等对待图中的所有其它顶点,缺乏对图结构和邻近性信息proximity information
的考虑。 softmax
的计算涉及图中的所有顶点,耗时且计算效率低。
为了克服这些缺陷,论文在
GraphGAN
中提出了一种新的、针对生成器的softmax
实现,称作Graph Softmax
。Graph Softmax
为图中的连通性分布提供了新的定义。论文证明了Graph Softmax
满足规范化normalization
、图结构感知graph structure awareness
、以及计算效率computational efficiency
的理想特性。据此,论文为生成器提出了一种基于随机游走的在线生成策略online generating strategy
,该策略与Graph Softmax
的定义一致,可以大大降低计算复杂度。论文在五个真实世界的图结构数据集上将
GraphGAN
应用于三个真实世界场景,即链接预测、节点分类、推荐。实验结果表明:与graph representation learning
领域的state-of-the-art
的baseline
相比,GraphGAN
取得了可观的收益。具体而言,在准确率指标上,GraphGAN
在链接预测中的性能优于baseline
0.59% ~ 11.13%
,在节点分类中的性能优于baseline
0.95% ~ 21.71%
。此外,GraphGAN
在推荐任务上将Precision@20
至少提高了38.56%
、Recall@20
至少提高了52.33%
。作者将GraphGAN
的优越性归因于其统一的对抗性学习框架以及邻近性感知proximity-aware
的Graph Softmax
设计。其中,Graph Softmax
可以自然地从图中捕获结构信息。- 第一类是生成式
12.1 模型
- 这里我们首先介绍
GraphGAN
的框架,并讨论了生成器和判别器的实现和优化细节。然后,我们展示了作为生成器实现的Graph Softmax
,并证明了它优于传统softmax
函数的性能。
12.1.1 GraphGAN 框架
令图 $ \mathcal G=(\mathcal V,\mathcal E) $ ,其中 $ \mathcal V=\{v_1,\cdots,v_{|\mathcal V|}\} $ 为顶点集合, $ \mathcal E=\{e_{i,j}\} $ 为边集合。对于给定顶点 $ v_c $ ,定义 $ \mathcal N(v_c) $ 为 $ v_c $ 直接相连的顶点集合(即,直接邻域),通常该集合的规模远远小于全量顶点集合 $ \mathcal V $ 。
我们定义顶点 $ v_c $ 的底层真实连通性分布
underlying true connectivity distribution
为条件概率 $ p_\text{true}(v\mid v_c) $ ,它反映了 $ v_c $ 对 $ \mathcal V $ 中所有其它顶点的连通性偏好connectivity preference
。从这个角度来看, $ \mathcal N(v_c) $ 可以视为从 $ p_\text{true}(v\mid v_c) $ 中抽取的一组观测样本observed sample
。给定图 $ \mathcal G $ ,我们的目标是学习以下两个模型:
- 生成器
generator
$ G(v\mid v_c;\theta_G) $ :它的目标是逼近 $ p_\text{true}(v\mid v_c) $ ,然后针对 $ v_c $ 生成最有可能和它连接的顶点。更准确的说,是从 $ \mathcal V $ 中选择和 $ v_c $ 最有可能连接的顶点。 - 判别器
discriminator
$ D(v,v_c;\theta_D) $ :它的目标是判断顶点pair
对 $ (v,v_c) $ 之间的连通性connectivity
。它输出一个标量,代表顶点 $ v $ 和 $ v_c $ 之间存在边的概率。
生成器 $ G $ 和判别器 $ D $ 充当两个对手:
- 生成器 $ G $ 试图完美拟合 $ p_\text{true}(v\mid v_c) $ ,然后生成 “假” 顶点。这些生成的顶点和 $ v_c $ 真实连接的邻居顶点相似,从而欺骗判别器 $ D $ 。
- 判别器 $ D $ 试图检测这些顶点是否是 $ v_c $ 的真实邻居,还是由生成器 $ G $ 生成的 ”假“ 顶点。
形式化地,生成器 $ G $ 和判别器 $ D $ 正在参与具有以下值函数
$ \min_{\theta_G}\max_{\theta_D}V(G,D) = \sum_{c=1}^{|\mathcal V|}\left(\mathbb E_{v\in p_\text{true}(\cdot\mid v_c)}[\log D(v,v_c;\theta_D)]+\mathbb E_{v\sim G(\cdot\mid v_c;\theta_G)}[\log(1-D(v,v_c;\theta_D))]\right) $value function
$ V(G,D) $ 的双人minimax
游戏:其中生成器和判别器的参数可以通过交替最大化和最小化值函数 $ V(G,D) $ 来学习。
第一项要求判别器 $ D $ 尽可能给 ”真邻居” 以较高的预估概率,第二项要求判别器 $ D $ 尽可能给 “假邻居” 以较低的预估概率。
- 生成器
GraphGAN
整体框架如下图所示。每次迭代过程中,我们使用来自 $ p_\text{true}(\cdot\mid v_c) $ 的正样本(绿色顶点)和来自生成器 $ G(\cdot\mid v_c;\theta_G) $ 的负样本(带蓝色条纹的顶点)来训练判别器 $ D $ ,并在 $ D $ 的指导下使用策略梯度更新生成器 $ G $ 。$ G $ 和 $ D $ 之间的竞争促使它们都改进自己的参数,直到 $ G $ 与 $ p_\text{true} (\cdot\mid v_c) $ 无法区分。
判别器
Discriminator
:给定从底层真实连通性分布而来的正样本,以及从生成器而来的负样本,判别器 $ D $ 的目标是最大化将正确label
分配给正样本和负样本的概率的对数。如果判别器 $ D $ 是可微的,则可以通过针对 $ \theta_D $ 的梯度上升来解决。在
$ D(v,v_c) = \sigma\left(\mathbf{\vec d}_v^\top \mathbf{\vec d}_{v_c}\right) = \frac{1}{1+\exp\left(-\mathbf{\vec d}_v^\top \mathbf{\vec d}_{v_c}\right)} $GraphGAN
中,我们简单地定义判别器 $ D $ 为两个输入顶点的embedding
内积的sigmoid
函数。理论上SDNE
等任何判别式模型都可以用作判别器 $ D $ ,我们将如何选择合适的判别器作为未来的研究。因此,这里的判别器为:其中 $ \mathbf{\vec d}_v,\mathbf{\vec d}_{v_c}\in \mathbb R^k $ 分别是判别器 $ D $ 中顶点 $ v $ 和 $ v_c $ 的 $ k $ 维
representation
向量, $ \theta_D=\left\{\mathbf{\vec d}_1,\cdots,\mathbf{\vec d}_{|\mathcal V|}\right\} $ 。注意到这里仅包含 $ v $ 和 $ v_c $ ,这意味着给定一对样本 $ (v,v_c) $ ,我们仅仅需要通过对应的梯度上升来更新 $ \mathbf{\vec d}_v $ 和 $ \mathbf{\vec d}_{v_c} $ :
$ \nabla_{\theta_D}V(G,D) = \begin{cases} \nabla_{\theta_D}\log D(v,v_c),&\text{if}\; v\sim p_\text{true}\\ \nabla_{\theta_D}\left(1-\log D(v,v_c)\right),&\text{if}\; v\sim G \end{cases} $即,没必要更新全量顶点的
embedding
。生成器
Generator
:和判别器相比,生成器 $ G $ 的目标是,使得判别器 $ D $ 区分由 $ G $ 生成的 “假” 顶点的概率最小化。即,生成器通过调整参数 $ \theta_G $ 来移动其近似的连通性分布approximated connectivity distribution
,从而增加其生成的 “假” 顶点在判别器 $ D $ 中的得分。由于生成器采样的顶点 $ v $ 是离散的,因此遵循
$ \nabla_{\theta_G}V(G,D) = \nabla_{\theta_G}\sum_{c=1}^{|\mathcal V|}\mathbb E_{v\sim G(\cdot\mid v_c)}[\log(1-D(v,v_c))]\\ = \sum_{c=1}^{|\mathcal V|}\sum_{i=1}^N\nabla_{\theta_G}G(v_i\mid v_c)\log(1-D(v_i,v_c)) $《Gradient estimation using stochastic computation graphs》
和《Irgan: A minimax game for unifying generative and discriminative information retrieval models》
的做法,我们建议通过策略梯度policy gradient
计算 $ V(G,D) $ 对 $ \theta_G $ 的梯度:其中 $ N $ 为生成器采样的顶点数量。
考虑到 $ \log(1-D(v_i,v_c)) $ 与 $ \theta_G $ 无关,以及 $ G \nabla_{\theta_G} \log G = G\times \frac 1G\nabla_{\theta_G} G = \nabla_{\theta_G} G $ ,因此有:
$ \nabla_{\theta_G}G(v_i\mid v_c)\log(1-D(v_i,v_c)) = G(v_i\mid v_c)\nabla_{\theta_G}\log G(v_i\mid v_c)\log(1-D(v_i,v_c)) $则有:
$ \nabla_{\theta_G}V(G,D) = \sum_{c=1}^{|\mathcal V|}\sum_{i=1}^NG(v_i\mid v_c)\nabla_{\theta_G}\log G(v_i\mid v_c)\log(1-D(v_i,v_c))\\ = \sum_{c=1}^{|\mathcal V|} \mathbb E_{v\sim G(\cdot\mid v_c)}[\nabla_{\theta_G}\log G(v\mid v_c)\log(1-D(v,v_c))] $梯度 $ \nabla_{\theta_G}V(G,D) $ 的物理意义为: $ \nabla_{\theta_G}\log G(v\mid v_c;\theta_G) $ 的加权和,权重为 $ \log(1-D(v,v_c;\theta_D)) $ 。
- 当 $ v $ 更容易被判别器 $ D $ 识别时, $ D(v,v_c;\theta_D) $ 得分较小,则加权的权重较大。
- 当 $ v $ 更不容易被判别器 $ D $ 识别时, $ D(v,v_c;\theta_D) $ 得分较大,则加权的权重较小。
这表明:当我们对 $ G $ 应用梯度下降时,更容易被判别器 $ D $ 区分的 “假” 顶点将“拉扯”生成器,使其得到一个较大的更新。
生成器 $ G $ 最简单直接的实现方式是通过
$ G(v\mid v_c) = \frac{\exp\left(\mathbf{\vec g}_v^\top \mathbf{\vec g}_{v_c}\right)}{\sum_{v^\prime\ne v_c}\exp\left(\mathbf{\vec g}_{v^\prime}^\top \mathbf{\vec g}_{v_c}\right)} $softmax
函数来实现:其中 $ \mathbf{\vec g}_v,\mathbf{\vec g}_{v_c} \in \mathbb R^k $ 为分别是生成器 $ G $ 中顶点 $ v $ 和 $ v_c $ 的 $ k $ 维
representation
向量, $ \theta_G=\{\mathbf{\vec g}_1,\cdots,\mathbf{\vec g}_{|\mathcal V|}\} $ 。为了在每轮迭代中更新 $ \theta_G $ ,我们首先基于 $ G(v\mid v_c;\theta_G) $ 计算近似的连通性分布
approximated connectivity distribution
,然后根据该分布随机采样一组样本 $ (v,v_c) $ ,然后通过随机梯度下降法来更新 $ \theta_G $ 。注意,采样“假”顶点时采用更新前的生成器,然后通过随机梯度下降得到更新后的生成器。
12.1.2 Graph Softmax
在生成器中应用
softmax
有两个限制:- 计算 $ G(v\mid v_c;\theta_G ) $ 的
softmax
函数时涉及到图中的所有顶点,这意味着对于每个生成的样本 $ v $ ,我们需要计算梯度 $ \nabla_{\theta_G}\log G(v\mid v_c;\theta_G) $ ,并更新所有顶点。这在计算上是低效的,尤其是对于具有数百万个顶点的真实世界的大型Graph
。 - 图结构信息编码了顶点之间丰富的邻近性信息,但是
softmax
函数完全忽略了来自图的结构信息,因为它不加区分地对待所有顶点。
最近
hierarchical softmax
和负采样技术是softmax
的流行替代方案。尽管这些方法可以在一定程度上减少计算量,但是它们也没有考虑图的结构信息,因此应用于graph representation learning
时也无法获得令人满意的性能。- 计算 $ G(v\mid v_c;\theta_G ) $ 的
为解决
softmax
的问题,在GraphGAN
中我们提出了一个新颖的Graph Softmax
,其关键思想是:重新对生成器 $ G $ 定义一个满足下面三个属性的、理想的softmax
方法:- 归一化
normalized
:生成器 $ G $ 应该是一个有效的概率分布。即: $ \sum_{v\ne v_c} G(v\mid v_c;\theta_G) = 1 $ 。 - 图结构感知
graph structure aware
:生成器 $ G $ 应该利用图的结构信息。直观而言,对于图中的两个顶点,它们的连通性概率应该随着它们之间最短路径距离shortest distance
的增加而下降。 - 计算高效
computationally efficient
:和计算全量softmax
不同,计算 $ G(v\mid v_c;\theta_G) $ 应该仅仅包含图中的一小部分顶点。
- 归一化
Graph Softmax
:为计算 $ G(\cdot\mid v_c;\theta_G) $ ,我们首先从顶点 $ v_c $ 开始对原始图 $ G $ 进行广度优先搜索Breadth First Search: BFS
,这得到一棵以 $ v_c $ 为根的BFS
树 $ T_c $ 。给定 $ T_c $ ,我们将 $ \mathcal N_c(v) $ 表示为 $ T_c $ 中 $ v $ 的邻居的集合,即和 $ v $ 直连的顶点,包括 $ v $ 的直系父顶点和直系子顶点。注意: $ \mathcal N_c(v) $ 既依赖于顶点 $ v $ ,又依赖于顶点 $ v_c $ 。如果根顶点 $ v_c $ 不同,则
BFS
树 $ T_c $ 也不同,则 $ v $ 的邻居集合也不同。另外,这里仅包含直接相连的顶点(直系父顶点、直系子顶点)。对于给定的顶点 $ v $ 及其邻居顶点 $ v_i\in \mathcal N_c(v) $ ,我们定义给定 $ v $ 的条件下 $ v_i $ 的概率为:
$ p_c(v_i\mid v) = \frac{\exp\left(\mathbf{\vec g}_{v_i}^\top\mathbf{\vec g}_v\right)}{\sum_{v_j\in \mathcal N_c(v)}\exp\left(\mathbf{\vec g}_{v_j}^\top \mathbf{\vec g}_v\right)} $这其实是定义在 $ \mathcal N_c(v) $ 上的一个
softmax
函数。$ p_c(v_i\mid v) $ 定义的是路径概率:给定树 $ T_c $ 和顶点 $ v $ ,下一步选择其父顶点或子顶点的路径概率。这个概率并不是 “假” 顶点的生成概率。
注意到 $ T_c $ 中的每个顶点 $ v $ 可以从根节点 $ v_c $ 通过唯一的一条路径达到,定义该路径为 $ P_{v_c\rightarrow v} = (v_{r_0},v_{r_1},\cdots,v_{r_m}) $ ,其中 $ v_{r_0} = v_c, v_{r_m} = v $ 。则
$ G(v\mid v_c;\theta_G) = \left(\prod_{j=1}^m p_c(v_{r_j}\mid v_{r_{j-1}})\right)\times p_c(v_{r_{m-1}}\mid v_{r_m}) $Graph Softmax
定义为:其中 $ p_c(\cdot\mid \cdot) $ 由上式定义。最后一项因子 $ p_c(v_{r_{m-1}}\mid v_{r_m}) $ 是为了归一化从而得到概率分布。
可以证明这种定义的
Graph Softmax
满足归一性、结构感知、计算高效等性质。定理一:
Graph Softmax
满足 $ \sum_{v\ne v_c} G(v\mid v_c;\theta_G) = 1 $ 。证明见原始论文。定理二:在原始图中如果 $ v $ 和 $ v_c $ 的最短路径增加,则 $ G(v\mid v_c;\theta_G) $ 下降。
证明:由于 $ T_c $ 是通过广度优先
BFS
得到的,因此路径 $ P_{v_c\rightarrow v} $ 同时也定义了一条从 $ v_c $ 到 $ v $ 的最短路径,该路径长度为 $ m $ 。随着最短路径增加,则 $ G(v\mid v_c;\theta_G) $ 中的概率乘积越多,因此 $ G $ 越小。定理三:计算 $ G(v\mid v_c;\theta_G) $ 依赖于 $ O(d\times\log |\mathcal V|) $ 个顶点,其中 $ d $ 是所有顶点的平均
degree
, $ |\mathcal V| $ 为所有顶点的大小。证明:计算 $ G(v\mid v_c;\theta_G) $ 依赖于两种类型的顶点:
- 在路径 $ P_{v_c\rightarrow v} $ 上的顶点。路径的最长长度为 $ \log |\mathcal V| $ ,它是
BFS
树的深度。 - 路径上顶点直接相连的顶点。路径上每个顶点平均有 $ d $ 个邻居顶点相连。
- 在路径 $ P_{v_c\rightarrow v} $ 上的顶点。路径的最长长度为 $ \log |\mathcal V| $ ,它是
12.1.3 算法和讨论
在线生成策略
online generating strategy
:生成器 $ G $ 生成 “假” 顶点的一个简单方法是:为所有的 $ v\ne v_c $ 顶点计算 $ G(v\mid v_c;\theta_G) $ ,然后根据这个近似的连通性概率执行随机采样。这里我们提出一种在线的顶点生成方法,该方法计算效率更高并且与
Graph Softmax
的定义一致。为了生成一个顶点,我们从 $ T_c $ 中的根节点 $ v_c $ 开始,根据转移概率 $ p_c(v_i\mid v) $ 执行随机游走。在随机游走过程中,如果 $ G $ 首次需要访问 $ v $ 的父节点(即在路径上反向),则选择 $ v $ 作为生成的顶点。因为
Graph Softmax
的定义中包含 $ v_c $ 到 $ v $ 的一条路径,并且还包含 $ v $ 到 $ v $ 的父节点的反向。下图给出了 “假” 顶点的在线生成过程,以及
Graph Softmax
计算过程。蓝色数字表示概率 $ p_c(v_i\mid v) $ ,蓝色实线箭头表示随机游走的方向,蓝色条纹顶点是被采样的顶点。最后一幅图的带颜色顶点(绿色、橙色、蓝色、蓝色带条纹)是需要更新参数的顶点。我们将当前访问的顶点记作 $ v_\text{cur} $ ,前一个访问的顶点记作 $ v_\text{pre} $ (即父节点)。- 在每个随机游走步通过概率 $ p_c(v_i\mid v_\text{curr}) $ 随机选择当前顶点 $ v_\text{curr} $ 的一个邻居顶点(标记为蓝色)。
- 一旦 $ v_i = v_\text{pre} $ ,则将 $ v_\text{cur} $ 作为采样顶点并返回(标记为蓝色带条纹)。
- 然后根据 $ \nabla_{\theta_G}V(G,D) $ 对路径 $ P_{v_c\rightarrow v_\text{curr}} $ 上的所有路径顶点、以及它们直接相连的顶点的参数进行更新。
生成器 $ G $ 在线生成算法最多执行 $ O(\log |\mathcal V|) $ 个迭代步,因为随机游走路径最迟会在到达叶结点时终止。类似于
Graph Softmax
,在线生成方法的计算复杂度为 $ O(d\times\log|\mathcal V|) $ ,这大大低于离线生成方法的 $ O(|\mathcal V|\times d\log |\mathcal V|) $ 。生成器 $ G $ 在线生成算法:
输入:
- 图 $ G $
BFS
树 $ T_c $- 顶点的
embedding
$ \left\{\mathbf{\vec g}_i\right\}_{i\in |\mathcal V|} $
输出:生成的顶点 $ v_\text{gen} $
算法步骤:
初始化: $ v_\text{pre} \leftarrow v_c, v_\text{cur}\leftarrow v_c $
$ \text{while true do:} $
- 根据概率 $ p_c(v_i\mid v_\text{cur}) $ 随机选择一个顶点 $ v_i $
- 如果 $ v_i = v_\text {pre} $ ,则 $ v_\text{gen}\leftarrow v_\text{cur} $ ,直接返回 $ v_\text{gen} $
- 否则 $ v_\text{pre}\leftarrow v_\text{cur},v_\text{cur}\leftarrow v_i $
GraphGAN
算法:输入:
embedding
维度 $ k $- 生成样本数 $ N $
- 判别样本数 $ M $
输出:
- 生成器 $ G(v\mid v_c;\theta_G) $
- 判别器 $ D(v,v_c;\theta_D) $
算法步骤:
初始化和预训练 $ G(v\mid v_c;\theta_G) $ 以及 $ D(v,v_c;\theta_D) $
对每个顶点 $ v_c\in \mathcal V $ ,构建
BFS
树 $ T_c $ 。迭代直到
GraphGAN
收敛,迭代步骤为:$ \text{for G-steps} : $
- 根据生成器在线生成算法,生成器 $ G $ 对每个顶点 $ v_c $ 采样 $ N $ 个顶点
- 根据 $ \nabla_{\theta_G} V(G,D) $ 更新 $ \theta_G $
$ \text{for D-steps}: $
- 对每个顶点 $ v_c $ ,从真实邻居顶点中采样 $ M $ 个正样本,从 $ G(v\mid v_c;\theta_G) $ 中采样 $ M $ 个负样本。
- 根据 $ \nabla_{\theta_D} V(G,D) $ 来更新 $ \theta_D $
返回 $ G(v\mid v_c;\theta_G),D(v,v_c;\theta_D) $
由于构建每棵
BFS
树的算法复杂度为 $ O(|\mathcal V| + |\mathcal E|) $ ,则构建所有BFS
树的计算复杂度 $ O(|\mathcal V|\times (|\mathcal V| + |\mathcal E|)) = O(d\times |\mathcal V|^2) $ 。其中 $ d $ 为顶点的平均degree
。在
G-steps
,每一行的算法复杂度都是 $ O(N|\mathcal V|\times d\log|\mathcal V|\times k) $ ;在D-steps
,第一行的算法复杂度为 $ O(M|\mathcal V|\times d\log |\mathcal V|\times k) $ ,第二行的算法复杂度为 $ O(M|\mathcal V|\times k) $ 。由于 $ k,M,N,d $ 都是常数,因此GraphGAN
每次迭代的算法复杂度为 $ O(|\mathcal V|\times \log |\mathcal V|) $ 。因此总的算法复杂度为 $ O(|\mathcal V|^2) $ ,由构建
BFS
树的部分决定。读者注:论文将生成器的
embedding
$ \left\{\mathbf{\vec g}_i\right\}_{i=1}^{|\mathcal V|} $ 作为顶点的最终embedding
,而并没有采用判别器的embedding
$ \left\{\mathbf{\vec d}_i\right\}_{i=1}^{|\mathcal V|} $ 。这是因为在链接预测任务的实验中表明:生成器embedding
的效果要比判别器embedding
的效果更好。理论上也可以尝试拼接生成器的
embedding
和判别器的embedding
从而得到顶点的最终embedding
。
12.2 实验
我们评估
GraphGAN
在一系列真实数据集上的性能,包括链接预测、节点分类、推荐等三个任务。数据集:
arXiv-AstroPh
数据集:来自arXiv
上天文物理领域的论文,包含了作者之间的co-author
关系。顶点表示作者,边表示co-author
关系。该图包含18772
个顶点、198110
条边。arXiv-GrQc
数据集:来自arXiv
上广义相对论与量子宇宙学领域的论文,包含了作者之间的co-author
关系。顶点表示作者,边表示co-author
关系。该图包含5242
个顶点、14496
条边。BlogCatalog
数据集:来自BlogCatelog
网站上给出的博主的社交关系网络。顶点标签表示通过博主提供的元数据推断出来的博主兴趣。该图包含10312
个顶点、333982
条边、39
个不同的标签。Wikipedia
数据集:来自维基百科,包含了英文维基百科dump
文件的前 $ 10^9 $ 个字节中的单词co-occurrence
网络。顶点的标签表示推断出来的单词词性Part-of-Speech:POS
。该图包含4777
个顶点、184812
条边、40
个不同的标签。MovieLens-1M
数据集:是一个二部图,来自MovieLens
网站上的大约100
万个评分(边),包含6040
位用户和3706
部电影。
baseline
方法:DeepWalk
:通过随机游走和skip-gram
来学习顶点embedding
。LINE
:保留了顶点的一阶邻近性和二阶邻近性。Node2Vec
:是DeepWalk
的一个变种,通过一个biased
有偏的随机游走来学习顶点embedding
。Struct2Vec
:捕获了图中顶点的结构信息。
参数配置:
所有方法的
embedding
的维度 $ k=20 $ 。所有
baseline
模型的其它超参数都是默认值。在所有任务上,
GraphGAN
的学习率都是0.001
, $ N=20 $ , $ M $ 为测试集的正样本数,然后分别执行G-steps
和D-steps
30
次。这些超参数都是通过交叉验证来选取的。最终学到的顶点
embedding
为生成器的 $ \mathbf{\vec g}_i $ (而不是判别器的 $ \mathbf{\vec d}_i $ ) 。
12.2.1 连通性分布
我们首先实验了图中连通性分布的模式,即:边的存在概率如何随着图中最短路径的变化而变化。
我们首先分别从
arXiv-AstroPh
和arXiv-GrQc
数据集中随机抽取100
万个顶点pair
对。对于每个选定的顶点pair
对,我们删除它们之间的连接(如果存在),然后计算它们之间的最短距离。我们计算所有可能的最短距离上边存在的可能性,如下图所示。显然,顶点
pair
对之间存在边的概率随着它们最短路径的增加而急剧下降。从对数概率曲线几乎为线性可以看出,顶点
pair
对之间的边存在概率和它们最短距离的倒数成指数关系。这进一步证明了Graph Softmax
捕获了真实世界Graph
的本质。这进一步证明了
Graph Softmax
捕获了真实世界Graph
的结构信息。
12.2.2 链接预测
在链接预测任务中,我们的目标是预测两个给定顶点之间是否存在边。因此该任务显式了不同的
graph representation learning
方法预测链接的能力。我们随机将原始图中
10%
的边作为测试集,并在图上删掉这些边,然后用所有的顶点和剩下的边来训练模型。训练后,我们根据所有顶点训练得到的embedding
向量,然后用逻辑回归来预测给定顶点pair
对之间存在边的概率。测试集包含原始图中删掉的10%
条边作为正样本,并随机选择未连接的相等数量的pair
对作为负样本。我们使用
arXiv-AstroPh
和arXiv-GrQc
作为数据集,并在下表报告准确率和Macro-F1
的结果。结论:LINE
和struct2vec
的性能在链接预测方面相对较差,因为它们不能完全捕获图中链接存在的模式。DeepWalk
和node2vec
的性能优于LINE
和struct2vec
,这可能优于DeepWalk
和node2vec
都利用了基于随机游走的skip-gram
模型,该模型在提取顶点之间邻近性方面表现更好。GraphGAN
优于所有baseline
方法。具体而言,GraphGAN
将arXiv-AstroPh
的预测准确率提升1.18% ~ 4.27%
、将arXiv-GrQc
的预测准确率提升0.59% ~ 11.13%
。我们认为,与baseline
方法的单个模型训练相比,对抗训练为GraphGAN
提供了更高的学习灵活性。
为直观了解
GraphGAN
学习的稳定性,我们进一步给出了生成器和判别器在arXiv-GrQc
上的学习曲线learning curve
。可以看到:GraphGAN
中的minimax game
达到了平衡,其中生成器在收敛后表现出色,而判别器的性能首先增强然后逐渐降到0.8
以下。注意,判别器不会降级到随机盲猜的水平,因为在实践中生成器仍然提供很多真正的负样本。结果表明,与
IRGAN
不同,Graph Softmax
的设计使得GraphGAN
中的生成器能够更有效地采样顶点和学习顶点embedding
。这个实验表明生成器
embedding
要比判别器embedding
效果更好。
12.2.3 节点分类
在节点分类中,每个顶点被分配一个或者多个标签。在我们观察到一小部分顶点及其标签之后,我们的目标是预测剩余顶点的标签。因此,顶点分类的性能可以揭示不同
graph representation learning
方法下顶点的可分性。我们在BlogCatalog
和Wikipedia
数据集上执行顶点分类任务。我们在整个图上训练模型,然后将顶点embedding
作为逻辑回归分类器的输入。其中训练集、测试集按照9:1
的比例进行拆分。我们报告了测试集的准确率和Macro-F1
结果。可以看到:
GraphGAN
性能在这两个数据集上都优于所有基准模型。例如,GraphGAN
在这两个数据集的准确率上分别实现了1.75% ~ 13.17%
以及0.95% ~ 21.71%
的增益。这表明:尽管GraphGAN
设计用于建模顶点之间的连通性分布,但是它仍然可以有效的将顶点信息编码到顶点embedding
中。
12.2.4 推荐
我们使用
Movielens-1M
作为推荐数据集,我们的目标是对每个用户向该用户推荐一组尚未观看、但是可能被用户喜欢的电影。我们首先将所有的
4
星和5
星评级视为边,从而得到一个二部图。然后将原始图的10%
边随机隐藏作为测试集,并为每个用户构建BFS
树。注意:和之前的两个任务不同,在之前任务中,对于给定的顶点我们定义了它与所有其它顶点的连通性分布。但是推荐任务中,一个用户的连接概率仅定义在图中的一小部分电影顶点上(用户顶点之间不存在连接、电影顶点之间也不存在连接)。因此我们在用户的BFS
树中,对于除根顶点之外的所有用户顶点,我们将它们和位于当前BFS
树中的电影顶点添加直连边来shortcut
。在训练并获得用户和电影的
embedding
之后,对于每个用户,我们基于user embeding
和电影embedding
的相似度来挑选 $ K $ 个用户未观看的电影来作为推荐结果。我们给出测试集上的Precision@K
和Recall@K
指标。可以看到:GraphGAN
始终优于所有基准方法,并在两个指标上均有显著改进。以Precision@20
为例,GraphGAN
比DeepWalk, LINE, node2vec, struct2vec
分别高出38.56%
、58.60%
、124.95%
、156.85%
。因此,我们可以得出结论:GraphGAN
在ranking-based
任务中保持了更出色的性能。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论