数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
十二、FastGCN [2018]
图是
pairwise relationship
的universal representation
。许多现实世界的数据自然而然地以graph
的形式展现,如社交网络、基因表达网络、知识图谱。为了提高graph-based
学习任务的性能,最近人们努力将已有的网络架构(包括RNN
和CNN
)推广到graph
数据。虽然学习
graph
的feature representation
是一个重要主题,但是这里我们重点关注节点的feature representation
。在这方面,《Semi-supervised classification with graph convolutional networks》
提出的GCN
是最接近CNN
架构的工作。借助针对图片像素的卷积滤波器的概念,或者信号的linear array
的概念,GCN
使用图的连通性结构connectivity structure
作为滤波器进行邻域混合neighborhood mixing
。该架构可以用总结为:其中:
$ \hat{\mathbf A} $ 是图的某个归一化邻接矩阵。 $ \mathbf H^{(l)} $ 为图的所有节点在网络第 $ l $ 层embedding
组成的embedding
矩阵(按行)。 $ \mathbf W^{(l)} $ 为网络第 $ l $ 层的参数矩阵。 $ \sigma $ 为非线性函数。
与许多图算法一样,邻接矩阵编码了训练数据和测试数据中的
pairwise relationship
。模型的学习和embedding
是同时在训练数据和测试数据上进行的,至少根据作者的建议而言。然而,对于许多应用程序而言,测试数据可能并不容易获得,因为图可能会不断扩展新的节点(如,社交网络的新成员、推荐系统的新产品、以及用于功能测试的新药物)。这样的场景需要一个归纳式的方案inductive scheme
,该方案仅从训练数据中学习模型并且可以很好地泛化到测试数据。因为
GCN
是transductive
的,因此需要在训练期间就知道测试数据,并同时针对测试数据进行训练。GCN
面临的一个更严峻的挑战是:跨层的邻域递归扩展会在batched training
中产生昂贵的计算。尤其是对于稠密图dense graph
和幂率图powerlaw graph
,单个节点的邻域扩展会迅速填满图的大部分。然后,即使是一个很小的batch size
,每个mini-batch
训练都涉及到大量数据。因此,GCN
难以推广到大型稠密图。为解决这两个挑战,
《FASTGCN: FAST LEARNING WITH GRAPH CONVOLUTIONAL NETWORKS VIA IMPORTANCE SAMPLING》
从另一个角度考察图卷积,并将图卷积解释为概率测度下embedding
函数的积分变换。这种观点为归纳式学习inductive learning
提供了一种从损失函数的公式到梯度的随机版本的原则性的机制principled mechanism
。具体来讲,论文将图节点解释为某种概率分布的独立同分布
iid
样本,并将损失函数以及每个卷积层视为节点embedding
函数的积分。然后通过对积分进行蒙特卡洛模拟来求解,从而得到损失函数和梯度(损失函数和梯度中包含了embedding
函数的积分)。也可以进一步改变蒙特卡洛模拟中的采样分布(如,重要性采样)来减少积分近似的方差。论文所提出的方法称作
FastGCN
,该方法不仅是inductive
的,并且每个batch
的计算成本可控。在撰写该论文时,作者注意到新发表的作品GraphSAGE
,其中GraphSAGE
提出使用采样来减少GCN
的计算代价。相比而言,FastGCN
的方法代价更低。实验表明,FastGCN
的每个batch
计算速度比GraphSAGE
快一个量级以上,并且分类准确性相差无几。相关工作:在过去的几年中,出现了几种
graph-based
的卷积网络模型,它们用于解决图结构数据的应用,如分子的representation
(《Convolutional networks on graphs for learning molecular fingerprints》
)。一个重要的工作方向是建立在谱图理论上的。它们受到傅里叶变换的启发,在谱域中定义了参数化的滤波器。这些方法学习整个图的
feature representation
,并可用于图分类。另一个工作方向是学习
graph vertex
的embedding
。《Graph embedding techniques, applications, and performance: A survey》
是最近的一项综述,全面涵盖了几类方法。- 一个主要的类别包括基于分解的算法,这些算法通过矩阵分解来产生
embedding
。这些方法共同学习训练数据和测试数据的representation
。 - 另一类方法基于随机游走,通过探索邻域来计算
node representation
。LINE
就是这样的一种技术,它的动机是保留一阶邻近性和二阶邻近性。 - 同时,也出现了一些深度神经网络架构,它们可以更好地捕获图中的非线性,如
SDNE
。
如前所述,我们的工作是基于
GCN
模型的。- 一个主要的类别包括基于分解的算法,这些算法通过矩阵分解来产生
与我们工作最相关的工作是
GraphSAGE
,它通过聚合邻域信息来学习node representation
。作者还承认所提出的聚合器之一采用了GCN
架构。作者还承认GCN
的内存瓶颈,因此提出了一种临时采样方案ad hoc sampling scheme
来限制邻域大小。我们的采样方法基于一个不同的、更有原则的公式。主要区别是我们采样节点而不是邻域。
12.1 模型
GCN
和许多标准神经网络架构之间的一个显著区别是:样本损失之间缺乏独立性。诸如随机梯度下降SGD
以及它的batch
版本等训练算法是基于损失函数相对于独立数据样本的可加性来设计的。另一方面,对于图,每个节点都与它的所有邻居进行卷积,因此定义一个计算计算高效的样本梯度非常简单。具体而言,考虑标准的随机梯度下降
SGD
,其中损失函数是某个函数 $ g $ 对数据分布 $ D $ 的期望,其中 $ g $ 为单个样本的损失:其中
$ \mathbf{\vec x} $ 为单个样本特征, $ \mathbf W $ 为待学习的模型参数。通常数据分布
$ D $ 是未知的,因此我们可以用经验损失函数(来代替上述损失函数,即:其中
$ \mathbf{\vec x}_i $ 为 $ n $ 个从分布 $ D $ 中采样的iid
样本。在
SGD
的每一步中,梯度近似为 $ \nabla g(\mathbf W; \mathbf{\vec x}_i) $ ,它是 $ \nabla\mathcal L $ 的一个无偏估计。人们可以解释为:每个梯度的step
都会朝向着样本损失 $ g(\mathbf W; \mathbf{\vec x}_i) $ 增加的方向(因此,负梯度是最小化的方向)。这里,样本损失和样本梯度仅涉及单个样本 $ \mathbf{\vec x}_i $ 。对于图,利用样本独立性并通过递归地丢弃邻域节点及其邻域信息来计算样本梯度
$ \nabla g(\mathbf W; \mathbf{\vec x}_i) $ ,这是不可行的。因此,我们寻求另一个替代公式。为了在相同的采样框架下解决学习问题,我们假设存在一个(可能无限大)的图 $ G^\prime $ ,它包含节点集合 $ V^\prime $ 。这个图定义了一个概率空间 $ (V^\prime, F, P) $ ,其中: $ V^\prime $ 为样本空间。 $ F $ 为事件空间。如 $ F=2^{V^\prime} $ 表示 $ V^\prime $ 中的每个节点是否被选中。 $ P $ 为概率测度,它定义了一个采样分布。
对于给定的图
$ G $ ,我们假设 $ G $ 为 $ G^\prime $ 的诱导子图: $ G $ 的节点是根据概率测度 $ P $ 在节点集合 $ V^\prime $ 上采样的独立同分布iid
样本。为解决图卷积的损失函数缺乏独立性问题,我们将卷积层定义为节点的
embedding
的函数,不同节点关联了相同的概率测度,但是节点之间相互独立。注意,这里每个节点代表一个随机变量。
具体而言,考虑
GCN
体系架构:从函数泛化的角度,我们改写为:
第一个积分是对邻域聚合的替代,第二个积分是对损失函数求均值的替代。
其中:
$ u,v $ 为独立的随机变量,它们都有相同的概率测度 $ P $ 。函数
$ \mathbf{\vec h}^{(l)} $ 为第 $ l $ 层的embedding
函数。第 $ l+1 $ 层embedding
为第 $ l $ 层embedding
的卷积,并通过积分变换来公式化卷积。其中卷积核 $ \hat A(v,u) $ 对应于矩阵 $ \hat{\mathbf A} $ 的位置 $ (v,u) $ 的元素。注意:积分不是通常的
Riemann–Stieltjes
积分,因为随机变量 $ u,v $ 为图上的节点。但是这种区别只是形式上的区别而已。 $ \mathbf H^{(l)} $ 为第 $ l $ 层的embedding
矩阵,每个节点占据一行。 $ \mathbf{\vec h}^{(l)}(v) $ 表示 $ \mathbf H^{(l)} $ 中节点 $ v $ 对应的向量。而 $ ()^\top $ 将列向量转换为行向量。最终的损失函数是对
$ g\left(\mathbf{\vec h}^{(L)}\right) $ 的期望。
我们通过蒙特卡洛模拟来求解上述积分,从而得到
batch
训练算法,并很自然地得到inductive learning
。对于第
$ l $ 层,假设我们随机采样得到 $ t_l $ 个独立同分布的节点 $ u_1^{(l)},\cdots,u_{t_l}^{(l)}\sim P $ ,则得到:其中
$ \mathbf{\vec h}_* ^{(l)}(\cdot) $ 表示根据蒙特卡洛模拟近似的embeding
函数。最终的损失函数估计为:
原理是以蒙特卡洛模拟来执行 “期望公式 -- 积分” 之间的替代,即:“原始公式(期望视角) --> 积分 --> 新公式(期望视角)”。
要保证结果正确的核心是:大数定理。例如,样本邻域不能太稀疏,否则计算
$ \tilde{\mathbf{\vec h}}_*^{(l+1)}(v) $ 时可能一个邻居都没有采样到,最终导致模型效果较差。定理:如果
$ g(\cdot) $ 和 $ \sigma(\cdot) $ 是连续函数,则 $ \lim_{t_0,\cdots,t_L\rightarrow \infty} \mathcal L_{*} $ 以概率1
收敛到 $ \mathcal L $ 。证明见原始论文,其中依赖于大数定律、连续函数理论(要求激活函数
$ \sigma(\cdot) $ 是连续的)。实际应用中,给定一个图
$ G $ ,图的节点被假设为从 $ V^\prime $ 中采样的样本。因此我们的蒙特卡洛模拟采样过程中需要bootstrap
采样从而获得一致的估计。给定一个
batch
,我们从图 $ G $ 中随机采样 $ t_L $ 个节点。我们在网络每一层进行有放回的采样从而得到样本节点 $ u_i^{(l)}, i =1,\cdots,t_l; l=0,\cdots,L-1 $ 。该过程等价于在每一层对 $ \mathbf H^{(l)} $ 的列进行均匀采样。注意:在第
$ L $ 层的时候我们不需要进行采样,因为第 $ L $ 层的 $ \mathbf H^{(L)} $ 是输出结果。我们将 $ \mathbf H^{(L)} $ 划分为若干个batch
(注意:这里是划分,而不是采样)。我们使用节点 $ u_1^{(L)},\cdots,u_{t_L}^{(L)} $ 来描述一个batch
的节点,因此得到batch loss
:其中:
该公式可以理解为:基于采样的消息传播机制。其中,消息为
$ \left( \mathbf {\vec h}^{(l)}\left(u_j^{(l)}\right)\right)^\top \mathbf W^{(l)} $ ,聚合权重由 $ \hat A(v,u) $ 给出。由于均匀采样,所以采样概率为 $ 1/n $ ,因此需要除以采样概率从而恢复原始的期望值。注意:这里激活函数
$ \sigma(\cdot) $ 内部的 $ n $ 为图中节点数量,用于解决GCN
原始的矩阵形式和我们的embedding
积分形式之间的归一化差异。可以通过在每个
$ \mathbf H^{(l)} $ 上应用链式法则来直接获取相应的batch
梯度,最终我们得到了batch
损失以及batch
梯度。理论上讲,如果跨
batch
共享,那么训练速度会更快,但是效果可能会更差。论文这里选择batch
之间独立地采样,即,不共享。下图给出了
GCN
的两种观点。- 左图:图卷积的观点。每个圆圈表示图中的一个节点。在连续的两行上,如果图中两个节点存在连接,则对应的圆圈以灰线相连(其中部分灰线被橙线覆盖)。卷积层利用图的连接性来融合图的节点特征或者
embedding
。 - 右图:积分变换的观点。下一层
embedding
函数为前一层embedding
函数的积分变换,用橙色扇形表示。
在
FastGCN
中,所有积分(包括损失函数)都是通过蒙特卡洛模拟采样进行评估的。对应于图中,FastGCN
从每一层进行有放回的节点采样从而近似卷积。采样部分由蓝色实体圆圈,以及橙线来表示。例如:- 输出层(第二层)的一个
batch
包含三个节点 - 第一层有放回地随机采样三个节点,通过这三个节点来求解输出层的
embedding
- 第零层有放回地随机采样三个节点,通过这三个节点来求解第一层三个节点的
embedding
每个
batch
采样的节点集合(即,输出节点)不同、相同batch
每一层采样的节点集合不同。- 左图:图卷积的观点。每个圆圈表示图中的一个节点。在连续的两行上,如果图中两个节点存在连接,则对应的圆圈以灰线相连(其中部分灰线被橙线覆盖)。卷积层利用图的连接性来融合图的节点特征或者
FastGCN
的batch
训练算法(一个epoch
):输入:
- 图
$ G(V,E) $ ,以及图的邻接矩阵 $ \hat{\mathbf A} $ - 学习率
$ \eta $
- 图
输出:更新后的参数
$ \left\{\mathbf W^{(l)}\right\}_{l=0}^{L-1} $算法步骤:
迭代每个
batch
,迭代过程:对每一层
$ l $ ,均匀随机采样 $ t_l $ 个节点: $ u_1^{(l)},\cdots,u_{t_l}^{(l)} $ 。对每一层
$ l $ ,如果节点 $ v $ 在第 $ l+1 $ 层被采样到,则计算:参数更新:
$ \mathbf W\leftarrow \mathbf W-\eta \nabla \mathcal L_{batch} $ 。
12.2 重要性采样
根据前文所述,
$ \mathcal L_{*} $ 是 $ \mathcal L $ 的一个一致的估计量。现在我们关心这个估计量的方差,期望得到较小的方差。但是,由于网络架构非线性的影响,评估 $ \mathcal L_{*} $ 的方差非常具有挑战性。因此这里我们考虑每一层的非线性之前embedding
函数的方差。考虑第
$ l $ 层,函数 $ \tilde{\mathbf{\vec h}}_*^{(l+1)}(v) $ 是卷积 $ \int \hat A(v,u) \left(\mathbf{\vec h}^{(l)}(u) \right)^\top\mathbf W^{(l)} dP(u) $ 的近似。当考虑 $ t_{l+1} $ 个样本 $ v=u_1^{(l+1)},\cdots,u_{t_{l+1}}^{(l+1)} $ 时,这些样本的 $ \tilde{\mathbf{\vec h}}_*^{(l+1)}\left(u_j^{(l+1)}\right) $ 的均值存在一个方差,该方差捕获了第 $ l $ 层对最终损失函数估计量偏离的贡献。因此,我们现在希望改善这个方差。- 这里我们并未考虑单个函数
$ \tilde{\mathbf{\vec h}}_*^{(l+1)}\left(u_j^{(l+1)}\right) $ ,因为我们的目标是整个第 $ l $ 层的方差。 - 我们考虑的是非线性之前的
embedding
函数 $ \tilde{\mathbf{\vec h}}_*^{(l+1)}(v) $ ,而不是非线性之后的embedding
函数 $ \mathbf{\vec h} _*^{(l+1)}(v) $ 。
- 这里我们并未考虑单个函数
为表述方便,我们修改某些符号。
- 对于第
$ l $ 层的随机变量记作 $ u $ ,采样的节点 $ u_j^{(l)} $ 记作 $ u_j $ ,采样数量 $ t_l $ 记作 $ t $ , $ \left(\mathbf{\vec h}^{(l)}(u) \right)^\top\mathbf W^{(l)} $ 记作 $ \mathbf{\vec x}(u) $ 。 - 对于第
$ l+1 $ 层的随机变量记作 $ v $ ,采样的节点 $ u_i^{(l+1)} $ 记作 $ v_i $ ,采样数量 $ t_{ l+1} $ 记作 $ s $ , $ \tilde{\mathbf{\vec h}}_*^{(l+1)}(v) $ 记作 $ \mathbf{\vec y}(v) $ 。
在随机变量
$ v,u $ 的联合分布下,上述 $ t_{l+1} $ 个样本的 $ \tilde{\mathbf{\vec h}}_*^{(l+1)}\left(u_j^{(l+1)}\right) $ 的均值为:- 对于第
推论:
$ \mathbf{\vec g} $ 的方差为:其中:
其中向量的平方
$ (\cdot)^2 $ 为向量逐元素的平方。证明见原始论文。
可以看到,
$ \mathbf{\vec g} $ 的方差由两部分组成:- 第一部分
$ \mathbf{\vec r} $ 几乎没有改善的余地,因为 $ v $ 变量空间的采样并未在第 $ l $ 层完成,第 $ l $ 层执行的是对 $ u $ 变量空间的采样。 - 第二部分(双重积分)取决于
$ u $ 变量空间的节点采样方式。
当前结果是使用概率测度
$ P $ 对 $ u_j $ 进行采样得到。我们可以执行importance sampling
重要性采样,从而改变采样分布来减少 $ \mathbf{\vec g} $ 的方差。具体而言,我们使用新的概率测度
$ Q(u) $ 来对 $ u_j $ 进行采样。因此我们定义样本均值新的近似。定义:以及新的均值:
当然,无论新的测度
$ Q $ 如何, $ \mathbb E[\mathbf{\vec g}_Q] = \mathbb E[\mathbf{\vec g} ] $ 。因为:- 第一部分
定理:如果:
其中
$ b(u) = \left[\int \hat A(v,u)^2 dP(v)\right]^{1/2} $ ,则 $ \mathbf{\vec g}_Q $ 的方差为:则该方差为所有可选分布
$ Q $ 中最小的方差。其中
$ |\cdot| $ 表示向量的长度。证明见原始论文。
$ b(u) $ 的物理意义为:基于邻接向量 $ \hat{\mathbf A} $ 的、节点 $ u $ 的邻接向量的 $ L_2 $ 范数。考虑
$ dQ(u) = \frac{b(u)| \mathbf{\vec x}(u)| dP(u)}{\int b(u)| \mathbf{\vec x}(u)| dP(u)} $ ,这种方式定义的采样分布 $ Q $ 存在一个缺点:它涉及 $ | \mathbf{\vec x}(u)| $ ,而 $ \mathbf{\vec x}(u) $ 在训练期间不断变化,因为权重矩阵 $ \mathbf W^{(l)} $ 在训练期间不断更新。另外它还涉及到embedding
矩阵 $ \mathbf H^{(l)} $ 和 $ \mathbf W^{(l)} $ 的矩阵乘法,计算代价太高。作为折衷方案,我们考虑
$ Q $ 的另一种选择,它仅涉及 $ b(u) $ 。对于新的 $ Q $ , $ \text{var}(\mathbf{\vec g}_Q) $ 可能会也可能不会小于 $ \text{var}(\mathbf{\vec g}) $ ,但是实践中我们发现它几乎总是有益的。推论:如果
$ dQ(u) = \frac{b(u)^2 dP(u)}{\int b(u)^2 dP(u)} $ ,则 $ \mathbf{\vec g}_Q $ 的方差为:证明见原始论文。
$ dQ(u) $ 的物理意义为:给定邻接向量 $ \hat{\mathbf A} $ ,节点 $ u $ 的邻接向量长度的平方,占所有节点邻接向量长度平方之和的比例。使用
$ dQ(u) = \frac{b(u)^2 dP(u)}{\int b(u)^2 dP(u)} $ 之后, $ dQ(u)/dP(u) $ 正比于 $ b(u)^2 = \int \hat A(v,u)^2 dP(v) $ 。这只是简单地将 $ \hat A(v,u)^2 $ 对 $ v $ 的积分。实际应用过程中,我们为图中所有节点定义了概率质量函数:
其中
$ \mathbf{\vec a}(u) = \left(\hat A(v_1,u),\cdots,\hat A(v_n,u)\right)^\top $ ,为矩阵 $ \hat {\mathbf A} $ 第 $ u $ 列组成的向量,即节点 $ u $ 的邻接向量。然后我们根据这个概率分布来采样
$ t $ 个节点: $ \{u_1,\cdots,u_t\} $ 。即,根据邻域连接强度的平方之和为概率来采样。因此,
degree
较高的节点更有可能被采样。从
$ q(u) $ 表达式中我们发现: $ q(u) $ 和 $ l $ 不相关。因此所有层的节点采样分布都相同。使用
$ q(u) $ 之后,batch
损失 $ \mathcal L_\text{batch} $ 为:其中:
它和前述
$ \mathbf {\vec h}^{(l+1)}(v) = \sigma\left(\frac{n}{t_l}\sum_{j=1}^{t_l}\hat A\left(v,u_j^{(l)}\right)\left( \mathbf {\vec h}^{(l)}(u_j^{(l)})\right)^\top \mathbf W^{(l)}\right) $ 的主要区别在于:- 新的
$ \mathbf {\vec h}^{(l+1)}(v) $ 根据 $ q $ 来采样,因此缩放比例为 $ {1}/{q\left(u_j^{(l)}\right)} $ 。 - 旧的
$ \mathbf {\vec h}^{(l+1)}(v) $ 均匀采样,因此缩放比例为 $ 1/n $ 。
可以通过在每个
$ \mathbf H^{(l)} $ 上应用链式法则来直接获取相应的batch
梯度,最终我们得到了batch
损失以及batch
梯度。为什么选择这样的
$ Q(u) $ 和 $ q(u) $ ,没有理论的依据。论文是根据邻域连接强度的平方和作为采样概率,也可以选择 $ k $ 次方, $ k $ 为超参数。- 新的
基于重要性采样的
FastGCN batch
训练算法(一个epoch
):输入:
- 图
$ G(V,E) $ ,以及图的邻接矩阵 $ \hat{\mathbf A} $ - 学习率
$ \eta $
- 图
输出:更新后的参数
$ \left\{\mathbf W^{(l)}\right\}_{l=0}^{L-1} $算法步骤:
对每个节点
$ u $ ,计算采样概率 $ q(u) \propto \left\|\mathbf{\vec a}(u)\right\|^2 $ 。迭代每个
batch
,迭代过程:对每一层
$ l $ ,根据概率 $ q(u) $ 随机采样 $ t_l $ 个节点: $ u_1^{(l)},\cdots,u_{t_l}^{(l)} $ 。这里根据邻域连接强度的平方和作为概率,而不是均匀采样。
对每一层
$ l $ ,如果节点 $ v $ 在第 $ l+1 $ 层被采样到,则计算:参数更新:
$ \mathbf W\leftarrow \mathbf W-\eta \nabla \mathcal L_\text{batch} $ 。
这里虽然使用了邻接矩阵
$ \hat{\mathbf A} $ ,但是主要依赖于连接的强度 $ \hat A(v,u) $ ,因此整个算法是inductive
的。
12.3 讨论
inference
:前述的采样方法清晰地将训练数据和测试数据分开,因此这种方法是inductive
的,而不是transductive
。本质是将图的节点集合转换为独立同分布的iid
样本,以便学习算法可以使用损失函数的一致估计量的梯度来执行参数更新。在测试过程中,可以使用完整的
GCN
架构来计算新节点的embedding
,也可以使用在训练过程中通过采样来近似的方法。通常,使用完整GCN
来inference
更容易实现。与
GraphSAGE
的比较:GraphSAGE
通过聚合邻域信息来生成节点embedding
。由于递归邻域扩展,它和GCN
一样都存在内存瓶颈。为减少计算量,作者建议限制每一层的直接邻域大小。- 在
GraphSAGE
中,如果在第 $ l $ 层每个节点采样了 $ t_l $ 个邻居,那么扩展的邻域大小为 $ \prod_{l =1}^L t_{l } $ 。 - 而在
FastGCN
中,在每一层中,我们对节点进行采样,而不是对每个节点的邻居进行采样,因此涉及的节点数量为 $ \sum_{l=1}^L t_l $ ,远小于GraphSAGE
。实验表明,FastGCN
这种方式可以大幅度提高训练速度。
事实上
FastGCN
训练算法(包括重要性采样的训练算法)并不完全遵循SGD
的现有理论,因为尽管梯度的估计量是一致的,但是这个估计量是有偏的。论文证明了即使梯度估计量是有偏的,学习算法仍然是收敛的。FastGCN
主要聚焦于提升邻域采样方法的效率,这种做法也可以应用到GraphSAGE
等方法。方法实现很简单,但是作者这里给了理论上的说明。- 在
12.4 实验
数据集:
Cora
引文数据集:数据集包含以文档(具有稀疏BOW
特征向量)作为节点,文档之间的引文链接作为边。共包含2708
个节点、5429
条边、7
个类别,每个节点1433
维特征。Pubmed
学术论文数据集:数据集包含以文档(具有稀疏BOW
特征向量)作为节点,文档之间的引文链接作为边。共包含19717
个节点、44338
条边、3
个类别,每个节点500
维特征。Reddit
数据集:包含2014
年9
月Reddit
上发布帖子的一个大型图数据集,节点标签为帖子所属的社区。
我们调整了
Cora, Pubmed
的训练集、验证集、测试集划分,从而与监督学习的场景相一致。具体而言,训练集中所有标签都用于训练,而不是半监督学习使用训练集中非常少量的标签。这种方式与GraphSage
工作中使用的Reddit
一致。这里没有给出平均
degree
信息,读者猜测:FastGCN
对于degree
较小的长尾节点不利。Baseline
方法:GCN
:《Semi-supervised classification with graph convolutional networks》
提出的GCN
方法。原始的GCN
无法在非常大的图上(例如Reddit
),因此我们只需要在FastGCN
中移除采样即可将其修改为batch
版本。如,我们在每个batch
使用所有节点,而不是在每个batch
中在每一层随机采样一些节点。对于较小的图(如
Cora
和Pubmed
),我们还将batch
版本的GCN
和原始GCN
进行比较。GraphSAGE
:为比较训练时间,我们使用GraphSAGE-GCN
,它使用GCN
作为聚合器,这也是所有聚合器中最快的版本。为进行准确性比较,我们还将它与
GraphSAGE-mean
进行比较。
实验配置:
所有模型的学习率在
{0.01, 0.001, 0.0001}
中选择。所有模型都采用两层网络(包括
FastGCN, GCN, GraphSAGE
)。- 对于
GraphSAGE
,这两层的邻域采样大小分别为S1=25, S2=10
,隐层维度为128
。 - 对于
FastGCN
,Reddit
数据集的隐层维度为128
,其它两个数据集的隐层维度为16
。
- 对于
对于
batch
训练的模型(FastGCN, GCN-batch, GraphSAGE
) ,Reddit, Cora
数据集的batch size = 256
,Pubmed
数据集的batch size = 1024
。GraphSAGE, GCN
的代码是从原作者的网站上下载,使用原始论文的实现。FastGCN
的inference
是通过完整的GCN
网络来完成。FastGCN
使用Adam
优化器。FastGCN
在Cora, Pubmed, Reddit
三个数据集上采样的节点数量数量分别为400, 100, 400
。硬件配置:
4
核2.5GHz Intel Core i7
,16G Ram
。
12.4.1 超参数研究
首先我们观察不同采样规模对
FastGCN
的影响。下表左侧(Sampling
列)给出了随着采样数量增加,对应的训练时间(单位s/epoch
)、分类准确性(以F1
衡量)的变化。该数据集为Pubmed
数据集,batch size = 1024
。为便于说明,我们将网络两层的采样数量都设为同一个值。可以看到:随着采样数量的增加,每个
epoch
训练时间也会增加,但是准确性也会提高。我们观察到一个有趣的事实:在给定输入特征
$ \mathbf H^{(0)} $ 的情况下,底层的乘积 $ \hat{ \mathbf A} \mathbf H^{(0)} $ 不变。这意味着相对于 $ \mathbf W^{(0)} $ 的梯度链式扩展的最后一步在整个训练过程中都是恒定的。因此可以预计算这个矩阵乘积,而不是对该层采样从而获得效率提升。我们给出预计算的结果(右侧
Precompute
列),可以看到:使用预计算后,训练时间大幅降低,但是预测准确性却相当。因此后续实验我们都使用预计算。然后我们考察
FastGCN
中均匀采样和重要性采样的区别。三个图依次为Cora, Pubmed, Reddit
数据集的结果。可以看到:基于重要性采样的FastGCN
始终比基于均匀采样的FastGCN
效果更好。我们这里使用的是折衷的重要性采样
$ dQ(u) = \frac{b(u)^2 dP(u)}{\int b(u)^2 dP(u)} $ ,而不是最佳的重要性采样 $ dQ(u) = \frac{b(u)| \mathbf{\vec x}(u)| dP(u)}{\int b(u)| \mathbf{\vec x}(u)| dP(u)} $ 。结果表明我们折衷的重要性采样比均匀采样更接近最佳的重要性采样。因此,后续实验将使用重要性采样。
12.4.2 Baseline 比较
最后我们对比了
FastGCN
和Baseline
方法的训练速度和分类效果。左图以对数坐标给出了每个batch
的训练时间,单位为s
。注意:在训练速度比较中,
GraphSAGE
指的是GraphSAGE-GCN
,它和其它聚合器(如GraphSAGE-mean
)是差不多的。GCN
指的是GCN-batched
版本,而不是GCN-original
版本。GCN-original
在大的图(如Reddit
) 上内存溢出。可以看到:
GraphSAGE
在大型和稠密的图(Reddit
)上训练速度比GCN
快得多,但是在小数据集上(Cora, Pubmed
) 要比GCN
更慢。FastGCN
训练速度最快,比第二名(除Cora
之外)至少提高了一个量级,比最慢的提高了大约两个量级。- 除了训练速度优势之外,
FastGCN
的准确性和其它两种方法相比相差无几。
上面比较了单个
batch
的训练速度。实际上总的训练时间除了受到batch
训练速度的影响之外,还受到收敛性的影响(决定了需要训练多少个batch
)。这里我们给出总的训练时间,单位为秒。注意:收敛性受到学习率、batch size
、sample size
等因素的影响。可以看到:尽管收敛速度使得
FastGCN
拖慢了最终训练速度(整体训练速度的提升比例低于单个batch
的提升比例),但是FastGCN
整体训练速度仍然保持巨大优势。注意:即使
GCN-original
的训练速度比GCN-batched
更快,但是由于内存限制导致GCN-original
无法扩展。因此这里我们仅比较了GCN-batched
版本。我们还给出了随着训练的进行,预测准确性的变化。下图从左到右依次为
Cora,Pubmed,Reddit
数据集。在讨论期间,
GraphSAGE
的作者提供了时间优化的版本,并提醒说GraphSAGE
更适合于大图。原因是:对于小图,采样大小(它等于各层样本数量的乘积)和图的大小相差无几,因此改善的程度很小。此外,采样的开销可能会对训练时间有不利影响。为公平比较,
GraphSAGE
的作者保留了采样策略,但是通过消除对采样节点的冗余计算,改进了原始代码的实现。可以看到:
GraphSAGE
现在在小图Cora
上的训练速度快得多。注意,这种实现方式不会影响大图(Reddit
) ,并且我们的FastGCN
仍然比它快一个量级。在前面评估过程中,我们增加了
Cora,Pubmed
数据集中训练标签数量,从而与Reddit
监督学习的训练集比例保持一致。作为参考,这里我们给出使用原始数据集拆分,从而使用更少的训练标签的结果。此外我们还给出
FastGCN
的transductive
版本,它同时使用训练节点、测试节点学习,这个过程中仅使用少量训练节点的标签信息(而不使用任何测试节点的标签信息)。可以看到:
GCN
的结果和《Semi-supervised classification with graph convolutional networks》
报告的结果一致。由于训练标记数据稀疏,GCN
训练速度非常快。FastGCN
仅在Pubmed
数据集上超越GCN
的训练速度。- 由于训练标记数据稀疏,
FastGCN
的准确性也比GCN
更差。 transductive
版本的FastGCN
和GCN
的准确性相差无几,比inductive
的FastGCN
更好。但是其训练时间也更长(训练节点更多)。GraphSAGE
的结果有些奇怪,其F1
值非常低。我们怀疑模型严重过拟合,因为它的训练准确性为1.0
,非常完美。- 注意到这里的
GCN-original
要比前面报告给出的GCN-original
更慢。这时因为我们这里使用和《Semi-supervised classification with graph convolutional networks》
工作中相同的超参数,而前面给出的GCN-original
使用调参之后的学习率(因为数据集拆分发生变化,所以需要调参)。
下表中的
Time
单位为s/batch
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论