CS224W第三节:Node Embeddings

传统机器学习:给定一个输入图,提取节点、链接和图级别的特征,学习一个模型(如SVM、神经网络等),将特征映射到标签。

图表示学习:机器学习领域的一个重要分支,专注于学习如何将图形结构中的节点和边表示为向量,以便能够在向量空间中进行计算和分析。图表示学习缓解了每次都需要进行特征工程的需求

目标:将复杂的图形数据转化为低维的连续向量表示,从而使图上的计算更加高效、可解释性更强,并且可以应用于各种任务,如节点分类、链接预测、社区发现等。

任务:将节点映射到嵌入空间中
        - 节点之间嵌入的相似性表示它们在网络中的相似性。例如:
                  - 两个节点彼此靠近(由一条边连接)
        - 编码网络信息
        - 可能用于许多下游预测任务

1. 节点嵌入:编码器和解码器(Node Embeddings: Encoder and Decoder)

假设我们有一个图 G:
        - V 是节点集合。
        - A 是邻接矩阵(假设是二进制的)。
        - 为简单起见:没有使用节点特征或额外信息。

目标:是对节点进行编码,以便在嵌入空间中的相似性(例如点积)近似于图中的相似性。

                                        similarity(u,v) \approx Z_v^{T}Z_u

学习节点嵌入:

        1. 编码器将节点映射到嵌入中
        2. 定义节点相似性函数(即,在原始网络中的相似性度量)
        3. 解码器 𝐃𝐄𝐂 将从嵌入映射到相似性分数
        4. 优化编码器的参数,使得:similarity(u,v)\approx z_v^TZ_u原图上的节点相似性等于嵌入的节点相似性

编码器:将每个节点映射到低维向量中

                                                        ENC(\nu ) =Z _{\nu }            
相似性函数:指定向量空间中的关系如何映射到原始网络中的关系

                                                  similarity(u,v) \approx Z_v^{T}Z_u

最简单的编码方法:编码器只是一个嵌入查找。

                                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ENC(\nu ) =Z _{\nu } = Z \cdot \nu

        ​​​​​​​        ​​​​​​​        Z \in \mathbb{R}^{d\times \left | v \right |},矩阵,每列是一个节点嵌入 [我们学习/优化的内容]

        ​​​​​​​        ​​​​​​​        v\in \mathbb{I}^{\left | v \right |},指示向量,除了在表示节点 v 的列中有一个一之外全是零
 

每个节点被分配一个唯一的嵌入向量(即,我们直接优化每个节点的嵌入)
许多方法:DeepWalk、node2vec

框架总结:编码器 + 解码器框架
        - 浅编码器:嵌入查找
        - 要优化的参数:包含所有节点 𝑢 ∈ 𝑉 的节点嵌入 Z_u𝐙
        - 我们将在 GNNs 中涵盖深编码器
        - 解码器:基于节点相似性
        - 目标:最大化类似的节点对 (𝑢, 𝑣) 的Z_v^{T}Z_u

怎样去定义节点相似?方法的关键选择是如何定义节点相似性。
- 如果两个节点…
          - 被链接在一起?
          - 共享邻居?
          - 有相似的“结构角色”?
我们将学习一种使用随机游走定义节点相似性的方法,以及如何为这种相似性度量优化嵌入。

这是一种无监督/自监督的方式来学习节点嵌入。
        - 我们没有使用节点标签
        - 我们没有使用节点特征
        - 目标是直接估计节点的一组坐标(即嵌入),以便保留网络结构的某些方面(由 DEC 捕获)。
这些嵌入与任务无关。
        - 它们没有为特定任务训练,但可以用于任何任务。

2. 随机游走方法用于节点嵌入(random walk approaches for node embeddings)

- 向量 Z_u
          - 节点 𝑢 的嵌入(我们的目标)。
- 概率 P(v|z_u) :我们的模型预测基于 z_u
          - 从节点 𝑢 开始的随机游走中访问节点 𝑣 的(预测)概率。

用于生成预测概率的非线性函数
- Softmax 函数:
          - 将包含 𝐾 个实值(模型预测)的向量转化为总和为 1 的 𝐾 个概率。
- Sigmoid 函数:
          - S 形状的函数,将实值转化为 (0, 1) 范围内的值。

随机游走:给定一个图和一个起始点,我们随机选择一个邻居,然后移动到这个邻居;然后我们随机选择这个点的一个邻居,然后移动到它,依此类推。通过这种方式访问的(随机)点的序列构成了图上的随机游走。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        Z_v^{T}Z_u = 在图上的随机游走中,节点 𝑢 和节点 𝑣 共同出现的概率。

1、使用某种随机游走策略 𝑟 来估计从节点 𝒖 开始的随机游走中访问节点 𝒗 的概率。
2、通过优化嵌入来编码这些随机游走的统计数据:
在嵌入空间中的相似性(在这里是点积=cos(𝜃))编码了随机游走的“相似性”。

 为什么要随机游走?
        1. 表达能力:灵活的随机性节点相似性定义,融合了局部和高阶邻域信息的特点。思路:如果从节点 𝑢 开始的随机游走以高概率访问到节点 𝑣,那么 𝑢 和 𝑣 是相似的(高阶多跳信息)。
        2. 效率:在训练时不需要考虑所有的节点对,只需要考虑在随机游走中共同出现的节点对。

无监督特征学习:
直觉:在 𝑑 维空间中找到节点的嵌入,以保留相似性。
思路:学习节点嵌入,使得网络中的相邻节点在嵌入空间中彼此靠近。
给定一个节点 𝑢,如何定义相邻节点?
        ▪ N_R(u) … 通过某种随机游走策略 R 得到的节点 𝑢 的邻域。

优化特征学习:
给定图 𝐺 = (𝑉, 𝐸),
我们的目标是学习一个映射:
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        f(u) = Z_u
对数似然目标:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​\underset{f}{max}\underset{u\in V}{\sum }log(N_R(u)| z_u)
                ▪ N_R(u)是节点 𝑢 根据策略 𝑅 得到的邻域。
给定节点 𝑢,我们希望学习能够预测其随机游走邻域 N_R(u)中节点的特征表示。

优化随机游走
1. 对于图中的每个节点 𝑢,使用某个随机游走策略 𝑅 运行短的固定长度的随机游走。
2. 对于每个节点 𝑢,收集 N_R(u),即从 𝑢 开始的随机游走访问的节点的多重集*。
3. 根据给定节点 𝑢,优化嵌入,使其能够预测其邻居N_R(u)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L = \underset{u\in V}{\sum }\underset{v\in N_R(u) }{\sum }-log(P(v| z_u))

• 直觉:优化嵌入 𝒛𝑢,以最小化随机游走共现的可能性。
• 使用 softmax 对P(v| z_u) 进行参数化。为什么要使用 softmax?我们希望节点 v 与节点 u最相似(在所有节点 n 中,复杂度的根源)。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(v|z_u) = \frac{e^{(z_u^T \cdot z_v)}}{\sum_{n \in V} e^{(z_u^T \cdot z_n)}}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L = \underset{u\in V}{\sum }\underset{v\in N_R(u) }{\sum }-log(\frac{e^{(z_u^T \cdot z_v)}}{\sum_{n \in V} e^{(z_u^T \cdot z_n)}})

但是这样做会过于昂贵!o(|v^2|)的复杂度。(因为这样包含了所有节点)

来自 softmax 的归一化项是罪魁祸首...我们能否对它进行近似处理?
sigmoid(x) = \frac{1}{1 + e^{-x}}\Rightarrow P(y=1) \approx \frac{e^{s_{\text{pos}}}}{e^{s_{\text{pos}}} + e^{s_{\text{neg}}}}\Rightarrow sigmoid(e^{s_{\text{pos}}}) = \frac{e^{s_{\text{pos}}}}{e^{s_{\text{pos}}} + e^{s_{\text{neg}}}}

负采样:

        ​​​​​​​        L(u, v, n) = \log\left(\sigma(z_u^T \cdot z_v)\right) - \sum_{n \in N} \log\left(\sigma(-z_u^T \cdot z_n)\right)

(第一项衡量正样本 v 与中心节点 u 之间的相似性,第二项对所有负样本 n 衡量了它们之间的关系)
不再对所有节点进行归一化,而是针对𝑘个随机的“负样本”𝑛𝑖进行归一化。
负采样允许快速计算似然性。
为什么这个近似是有效的呢?
        从技术上讲,这是一个不同的目标。但负采样是噪声对比估计(NCE)的一种形式,该方法近似地最大化了softmax的对数概率。新的公式对应于使用逻辑回归(sigmoid函数)来区分目标节点𝑣和从背景分布𝑃𝑣中采样的节点𝑛𝑖。
更多详细信息请参考 https://arxiv.org/pdf/1402.3722.pdf。

SGD梯度下降优化损失

总结:
1. 对图上的每个节点运行短的固定长度的随机游走。
2. 对于每个节点𝑢,收集从𝑢开始的随机游走访问的节点的多重集合𝑁𝑅(𝑢)。
3. 使用随机梯度下降优化嵌入:

到目前为止,我们已经描述了如何在给定随机游走策略R的情况下优化嵌入。
我们应该使用什么策略来运行这些随机游走呢?
        ▪ 最简单的想法:只需从每个节点开始运行固定长度的无偏随机游走(即Perozzi等人的DeepWalk,2013年)。
        ▪ 问题是这种相似性的概念过于受限制。
我们如何进行推广呢?
node2vec简介:
目标:在特征空间中将具有相似网络邻居的节点嵌入到一起。
我们将这个目标表述为一个最大似然优化问题,与下游预测任务无关。
关键观察:灵活的网络邻域N_R(u)的概念导致了丰富的节点嵌入。
开发偏置的二阶随机游走𝑅来生成节点𝑢的网络邻域N_R(u)
思路:使用灵活的、有偏的随机游走(什么叫做有偏和无偏随机游走,我的理解是有权重去平衡深度和广度),可以在局部和全局网络视图之间进行权衡(Grover 和 Leskovec,2016)
定义给定节点 𝑢 的邻域N_R(u) 的两种经典策略:BFS \ DFS

有偏的固定长度随机游走 𝑅,给定一个节点 𝑢,生成邻域 N_R(u)
两个参数:
        ▪ 返回参数 𝑝:
                ▪ 返回到前一个节点
        ▪ 内外参数 𝑞:
                ▪ 向外移动(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)

最简单的节点相似性:如果节点 𝑢 和 𝑣 之间有连接,它们就是相似的。
这意味着:Z_v^{T}Z_u = A_{u,v},其中(𝑢, 𝑣)是图的邻接矩阵 𝐴 的元素。
 因此,Z^TZ = A

特征矩分解
嵌入维度 𝑑(即 𝒁 的行数)远小于节点数量 𝑛。
通常不可能进行精确的分解 A=Z^TZ。(本来应该A-Z^TZ=0,但是现在由于不好优化等于不了零,所以我们尽量让他最小。
但是,我们可以近似地学习 𝒁。
目标:最小化

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \underset{Z}{min}||A-Z^TZ||_2

        ▪ 我们优化 𝒁,使其最小化A-Z^TZ的 L2 范数(Frobenius 范数)。
        ▪ 请注意,今天我们使用了 softmax 而不是 L2。但目标是用Z^TZ 近似 A。
结论:以边连接定义节点相似性的内积解码器等效于矩阵分解 𝐴。

DeepWalk 和 node2vec 有基于随机游走的更复杂的节点相似性定义
DeepWalk 等效于以下复杂矩阵表达式的矩阵分解:

Node2vec 也可以被表述为矩阵分解(尽管是更复杂的矩阵)。
更多详细信息请参阅论文:

如何使用节点的嵌入 𝒛𝒊:
        ▪ 聚类/社区检测:基于 𝒛𝒊 对点进行聚类
        ▪ 节点分类:基于 𝒛𝒊 预测节点 𝑖 的标签
        ▪ 链路预测:基于 (𝒛𝒊 , 𝒛𝒋) 预测边 (𝑖,𝑗)
                ▪ 在这些嵌入之间可以进行拼接、平均、乘积或差值操作:
                        ▪ 拼接:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔([𝒛𝑖 , 𝒛𝑗 ])
                        ▪ Hadamard 乘积:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔(𝒛𝑖 ∗ 𝒛𝑗)(按元素乘积)
                        ▪ 求和/平均:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔(𝒛𝑖 + 𝒛𝑗)
                        ▪ 距离:𝑓(𝒛𝑖 , 𝒛𝑗)= 𝑔(||𝒛𝑖 − 𝒛𝑗 ||2)
         ▪ 图分类:通过聚合节点嵌入或虚拟节点获得图嵌入 Z_G
基于图嵌入 Z_G预测标签。

5. 总结:


我们讨论了图表示学习,这是一种在下游任务中学习节点和图嵌入的方法,无需进行特征工程。
编码-解码框架:
        ▪ 编码器:嵌入查找
        ▪ 解码器:基于嵌入预测分数以匹配节点相似性
节点相似性度量:(有偏)随机游走
        ▪ 示例:DeepWalk、Node2Vec
扩展到图嵌入:节点嵌入聚合

6. 局限性

通过矩阵分解和随机游走获得的节点嵌入存在以下限制:
▪ 无法获取训练集中不存在的节点的嵌入
        无法计算未在DeepWalk / node2vec中的节点的嵌入。需要重新计算所有节点的嵌入。
▪ 不能捕捉结构相似性:
▪ 节点1和节点11在结构上相似 - 都是一个三角形的一部分,度为2,...
▪ 然而,它们具有非常不同的嵌入。
        ▪ 从节点1到节点11的随机游走几乎不可能。
▪ DeepWalk和node2vec无法捕捉结构相似性。
▪ 无法利用节点、边和图特征
        特征向量(例如蛋白质-蛋白质相互作用图中的蛋白质属性)
        DeepWalk / node2vec嵌入不包含这些节点特征
解决这些限制的方法:深度表示学习和图神经网络
(将在接下来深入讨论)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值