传统机器学习:给定一个输入图,提取节点、链接和图级别的特征,学习一个模型(如SVM、神经网络等),将特征映射到标签。
图表示学习:机器学习领域的一个重要分支,专注于学习如何将图形结构中的节点和边表示为向量,以便能够在向量空间中进行计算和分析。图表示学习缓解了每次都需要进行特征工程的需求
目标:将复杂的图形数据转化为低维的连续向量表示,从而使图上的计算更加高效、可解释性更强,并且可以应用于各种任务,如节点分类、链接预测、社区发现等。
任务:将节点映射到嵌入空间中
- 节点之间嵌入的相似性表示它们在网络中的相似性。例如:
- 两个节点彼此靠近(由一条边连接)
- 编码网络信息
- 可能用于许多下游预测任务
1. 节点嵌入:编码器和解码器(Node Embeddings: Encoder and Decoder)
假设我们有一个图 G:
- V 是节点集合。
- A 是邻接矩阵(假设是二进制的)。
- 为简单起见:没有使用节点特征或额外信息。目标:是对节点进行编码,以便在嵌入空间中的相似性(例如点积)近似于图中的相似性。
学习节点嵌入:
1. 编码器将节点映射到嵌入中
2. 定义节点相似性函数(即,在原始网络中的相似性度量)
3. 解码器 𝐃𝐄𝐂 将从嵌入映射到相似性分数
4. 优化编码器的参数,使得:原图上的节点相似性等于嵌入的节点相似性
编码器:将每个节点映射到低维向量中
![]()
相似性函数:指定向量空间中的关系如何映射到原始网络中的关系
最简单的编码方法:编码器只是一个嵌入查找。
,矩阵,每列是一个节点嵌入 [我们学习/优化的内容]
,指示向量,除了在表示节点 v 的列中有一个一之外全是零
每个节点被分配一个唯一的嵌入向量(即,我们直接优化每个节点的嵌入)
许多方法:DeepWalk、node2vec
框架总结:编码器 + 解码器框架
- 浅编码器:嵌入查找
- 要优化的参数:包含所有节点 𝑢 ∈ 𝑉 的节点嵌入的 𝐙
- 我们将在 GNNs 中涵盖深编码器
- 解码器:基于节点相似性
- 目标:最大化类似的节点对 (𝑢, 𝑣) 的
怎样去定义节点相似?方法的关键选择是如何定义节点相似性。
- 如果两个节点…
- 被链接在一起?
- 共享邻居?
- 有相似的“结构角色”?
我们将学习一种使用随机游走定义节点相似性的方法,以及如何为这种相似性度量优化嵌入。
这是一种无监督/自监督的方式来学习节点嵌入。
- 我们没有使用节点标签
- 我们没有使用节点特征
- 目标是直接估计节点的一组坐标(即嵌入),以便保留网络结构的某些方面(由 DEC 捕获)。
这些嵌入与任务无关。
- 它们没有为特定任务训练,但可以用于任何任务。
2. 随机游走方法用于节点嵌入(random walk approaches for node embeddings)
- 向量 :
- 节点 𝑢 的嵌入(我们的目标)。
- 概率 :我们的模型预测基于
- 从节点 𝑢 开始的随机游走中访问节点 𝑣 的(预测)概率。
用于生成预测概率的非线性函数
- Softmax 函数:
- 将包含 𝐾 个实值(模型预测)的向量转化为总和为 1 的 𝐾 个概率。
- Sigmoid 函数:
- S 形状的函数,将实值转化为 (0, 1) 范围内的值。
随机游走:给定一个图和一个起始点,我们随机选择一个邻居,然后移动到这个邻居;然后我们随机选择这个点的一个邻居,然后移动到它,依此类推。通过这种方式访问的(随机)点的序列构成了图上的随机游走。
= 在图上的随机游走中,节点 𝑢 和节点 𝑣 共同出现的概率。
1、使用某种随机游走策略 𝑟 来估计从节点 𝒖 开始的随机游走中访问节点 𝒗 的概率。
2、通过优化嵌入来编码这些随机游走的统计数据:
在嵌入空间中的相似性(在这里是点积=cos(𝜃))编码了随机游走的“相似性”。
为什么要随机游走?
1. 表达能力:灵活的随机性节点相似性定义,融合了局部和高阶邻域信息的特点。思路:如果从节点 𝑢 开始的随机游走以高概率访问到节点 𝑣,那么 𝑢 和 𝑣 是相似的(高阶多跳信息)。
2. 效率:在训练时不需要考虑所有的节点对,只需要考虑在随机游走中共同出现的节点对。
无监督特征学习:
直觉:在 𝑑 维空间中找到节点的嵌入,以保留相似性。
思路:学习节点嵌入,使得网络中的相邻节点在嵌入空间中彼此靠近。
给定一个节点 𝑢,如何定义相邻节点?
▪ … 通过某种随机游走策略 R 得到的节点 𝑢 的邻域。
优化特征学习:
给定图 𝐺 = (𝑉, 𝐸),
我们的目标是学习一个映射:
对数似然目标:
▪ 是节点 𝑢 根据策略 𝑅 得到的邻域。
给定节点 𝑢,我们希望学习能够预测其随机游走邻域 中节点的特征表示。
优化随机游走
1. 对于图中的每个节点 𝑢,使用某个随机游走策略 𝑅 运行短的固定长度的随机游走。
2. 对于每个节点 𝑢,收集 ,即从 𝑢 开始的随机游走访问的节点的多重集*。
3. 根据给定节点 𝑢,优化嵌入,使其能够预测其邻居。
• 直觉:优化嵌入 𝒛𝑢,以最小化随机游走共现的可能性。
• 使用 softmax 对 进行参数化。为什么要使用 softmax?我们希望节点 v 与节点 u最相似(在所有节点 n 中,复杂度的根源)。
但是这样做会过于昂贵!的复杂度。(因为这样包含了所有节点)
来自 softmax 的归一化项是罪魁祸首...我们能否对它进行近似处理?
负采样:
(第一项衡量正样本 v 与中心节点 u 之间的相似性,第二项对所有负样本 n 衡量了它们之间的关系)
不再对所有节点进行归一化,而是针对𝑘个随机的“负样本”𝑛𝑖进行归一化。
负采样允许快速计算似然性。
为什么这个近似是有效的呢?
从技术上讲,这是一个不同的目标。但负采样是噪声对比估计(NCE)的一种形式,该方法近似地最大化了softmax的对数概率。新的公式对应于使用逻辑回归(sigmoid函数)来区分目标节点𝑣和从背景分布𝑃𝑣中采样的节点𝑛𝑖。
更多详细信息请参考 https://arxiv.org/pdf/1402.3722.pdf。
SGD梯度下降优化损失
总结:
1. 对图上的每个节点运行短的固定长度的随机游走。
2. 对于每个节点𝑢,收集从𝑢开始的随机游走访问的节点的多重集合𝑁𝑅(𝑢)。
3. 使用随机梯度下降优化嵌入:
到目前为止,我们已经描述了如何在给定随机游走策略R的情况下优化嵌入。
我们应该使用什么策略来运行这些随机游走呢?
▪ 最简单的想法:只需从每个节点开始运行固定长度的无偏随机游走(即Perozzi等人的DeepWalk,2013年)。
▪ 问题是这种相似性的概念过于受限制。
我们如何进行推广呢?
node2vec简介:
目标:在特征空间中将具有相似网络邻居的节点嵌入到一起。
我们将这个目标表述为一个最大似然优化问题,与下游预测任务无关。
关键观察:灵活的网络邻域的概念导致了丰富的节点嵌入。
开发偏置的二阶随机游走𝑅来生成节点𝑢的网络邻域。
思路:使用灵活的、有偏的随机游走(什么叫做有偏和无偏随机游走,我的理解是有权重去平衡深度和广度),可以在局部和全局网络视图之间进行权衡(Grover 和 Leskovec,2016)
定义给定节点 𝑢 的邻域 的两种经典策略:BFS \ DFS
有偏的固定长度随机游走 𝑅,给定一个节点 𝑢,生成邻域
两个参数:
▪ 返回参数 𝑝:
▪ 返回到前一个节点
▪ 内外参数 𝑞:
▪ 向外移动(DFS)与向内移动(BFS)
▪ 直观地说,𝑞 是 BFS 和 DFS 的“比率”
接下来,我们将说明如何执行有偏随机游走的单个步骤。
随机游走就是这些步骤的序列。
算法: 1) 计算随机游走概率
2) 模拟从每个节点 𝑢 开始的长度为 𝑙 的 𝑟 条随机游走
3) 使用随机梯度下降优化 node2vec 目标函数
线性时间复杂度
这三个步骤都可以分别并行化进行。
不同类型的有偏随机游走:
▪ 基于节点属性(Dong等,2017年)。
▪ 基于学习权重(Abu-El-Haija等,2017年)
替代的优化方案:
▪ 直接基于一跳和二跳随机游走概率进行优化(如Tang等人的LINE,2015年)。
网络预处理技术:
▪ 在原始网络的修改版本上运行随机游走(例如Ribeiro等人的struct2vec,2017年,Chen等人的HARP,2016年)。
总结:
核心思想:嵌入节点,使得嵌入空间中的距离反映原始网络中节点的相似性。
不同的节点相似性概念:
▪ 简单:如果两个节点相连则相似(接下来)
▪ 邻域重叠(在第2讲中介绍)
▪ 随机游走方法(今天介绍)
那么我应该使用哪种方法呢..?
没有一种方法在所有情况下都是最好的……
▪ 例如,node2vec在节点分类方面表现更好,而其他方法在链路预测方面表现更好(Goyal和Ferrara,2017的调查)。
随机游走方法通常更高效。
总体来说:必须选择与您的应用程序匹配的节点相似性定义。
3. 图嵌入(Embedding Entire Graphs)
目标:希望嵌入子图或整个图 𝐺。图嵌入:𝐳𝑮。
任务:
▪ 分类有毒分子与非有毒分子
▪ 鉴别异常图
方法1: 简单(但有效)的:
在(子)图 𝐺 上运行标准图嵌入技术。
然后只需对(子)图 𝐺 中的节点嵌入求和(或平均)。
由 Duvenaud 等人于 2016 年用于基于图结构的分子分类。
方法2:
引入“虚拟节点”来表示(子)图,然后运行标准图嵌入技术。
Li 等人于 2016 年提出的一种用于子图嵌入的通用技术。
总结:
我们讨论了三种图嵌入的思路:
方法1:嵌入节点并对它们求和/平均
方法2:创建跨越(子)图的超级节点,然后对该节点进行嵌入。
我们可以对图中的节点进行分层聚类,并根据这些聚类对节点嵌入求和/平均。
4. 特征和节点嵌入矩阵化(maxtrix factorization and node embeddings)
最简单的节点相似性:如果节点 𝑢 和 𝑣 之间有连接,它们就是相似的。
这意味着:=
,其中(𝑢, 𝑣)是图的邻接矩阵 𝐴 的元素。
因此,特征矩分解
嵌入维度 𝑑(即 𝒁 的行数)远小于节点数量 𝑛。
通常不可能进行精确的分解。(本来应该
=0,但是现在由于不好优化等于不了零,所以我们尽量让他最小。)
但是,我们可以近似地学习 𝒁。
目标:最小化
▪ 我们优化 𝒁,使其最小化的 L2 范数(Frobenius 范数)。
▪ 请注意,今天我们使用了 softmax 而不是 L2。但目标是用近似 A。
结论:以边连接定义节点相似性的内积解码器等效于矩阵分解 𝐴。
DeepWalk 和 node2vec 有基于随机游走的更复杂的节点相似性定义。
DeepWalk 等效于以下复杂矩阵表达式的矩阵分解:
Node2vec 也可以被表述为矩阵分解(尽管是更复杂的矩阵)。
更多详细信息请参阅论文:
如何使用节点的嵌入 𝒛𝒊:
▪ 聚类/社区检测:基于 𝒛𝒊 对点进行聚类
▪ 节点分类:基于 𝒛𝒊 预测节点 𝑖 的标签
▪ 链路预测:基于 (𝒛𝒊 , 𝒛𝒋) 预测边 (𝑖,𝑗)
▪ 在这些嵌入之间可以进行拼接、平均、乘积或差值操作:
▪ 拼接:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔([𝒛𝑖 , 𝒛𝑗 ])
▪ Hadamard 乘积:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔(𝒛𝑖 ∗ 𝒛𝑗)(按元素乘积)
▪ 求和/平均:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔(𝒛𝑖 + 𝒛𝑗)
▪ 距离:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔(||𝒛𝑖 − 𝒛𝑗 ||2)
▪ 图分类:通过聚合节点嵌入或虚拟节点获得图嵌入 。
基于图嵌入 预测标签。
5. 总结:
我们讨论了图表示学习,这是一种在下游任务中学习节点和图嵌入的方法,无需进行特征工程。
编码-解码框架:
▪ 编码器:嵌入查找
▪ 解码器:基于嵌入预测分数以匹配节点相似性
节点相似性度量:(有偏)随机游走
▪ 示例:DeepWalk、Node2Vec
扩展到图嵌入:节点嵌入聚合
6. 局限性
通过矩阵分解和随机游走获得的节点嵌入存在以下限制:
▪ 无法获取训练集中不存在的节点的嵌入
无法计算未在DeepWalk / node2vec中的节点的嵌入。需要重新计算所有节点的嵌入。
▪ 不能捕捉结构相似性:
▪ 节点1和节点11在结构上相似 - 都是一个三角形的一部分,度为2,...
▪ 然而,它们具有非常不同的嵌入。
▪ 从节点1到节点11的随机游走几乎不可能。
▪ DeepWalk和node2vec无法捕捉结构相似性。
▪ 无法利用节点、边和图特征
特征向量(例如蛋白质-蛋白质相互作用图中的蛋白质属性)
DeepWalk / node2vec嵌入不包含这些节点特征
解决这些限制的方法:深度表示学习和图神经网络
(将在接下来深入讨论)