直觉:将节点映射到d维嵌入,以便将图中的相似节点紧密地嵌入在一起
如何学习映射函数f?
目标:对节点进行映射,以使嵌入空间(例如点积)中的相似度近似于网络中的相似度(例如接近度
需要定义相似度函数
两个主要的组件:
编码器:将节点映射到低维向量
相似度函数定义输入网络中的关系如何映射到嵌入空间:
从“浅”到“深”
到目前为止,我们主要关注“浅”编码器,即嵌入查找:
浅编码器
浅层编码器:一层数据转换一个隐藏层将节点u映射为通过函数f()嵌入zu,例如
浅层嵌入方法的局限性:O(| V |)参数是必需的:节点之间不共享参数每个节点都有自己独特的嵌入本质上是“转导的”:无法为训练期间未看到的节点生成嵌入不能合并节点特征:许多图形具有我们可以并且应该利用的特征
深度图形编码器
今天:我们现在将讨论基于图神经网络的深层方法:
注意:所有这些深度编码器都可以与上一堂课中定义的节点相似度函数结合使用
现代的机器学习工具箱
现代深度学习工具箱用于设计简单的序列和网格
但是网络要复杂得多!任意大小和复杂的拓扑结构(即没有像网格这样的空间局部性)没有固定的节点顺序或参考点经常动态并具有多模式功能
卷积网络
目标是将卷积推广到简单晶格之外利用节点特征/属性(例如文本,图像)
从图像到图
具有3x3滤镜的单个CNN层:在邻居处转换信息并将其组合:从邻居wihi 那里转换“消息” hi加起来:
真实世界的网络
例子: 生物网络,医学网络,社交网络,信息网络,知识图,通信网络,Web图……
简单的方式
连接邻接矩阵和特征将它们喂入深层神经网络
这个想法的问题:O(n)参数不适用于不同大小的图形节点顺序不变
本章主要内容:
图的深度学习基础图卷积网络图注意力网络(GAT)实用技巧和演示图深度学习基础本地网络邻居:描述汇总策略定义计算图堆叠多层:描述模型,参数,训练如何拟合模型?无监督和有监督训练的简单示例假设我们有一个图G:V是顶点集A是邻接矩阵(假定为二进制)X∈?:m×| v |是节点特征的矩阵节点特征:社交网络:用户个人资料,用户图片生物网络:基因表达谱,基因功能信息无特征:指示向量(节点的一键编码)常数1的向量:[1,1,…,1]
图卷积网络
想法:节点的邻域定义一个计算图
了解如何在整个图上传播信息以计算节点特征
思路:聚合邻居
关键思想:基于本地网络邻居生成节点嵌入
直觉:节点使用神经网络聚合来自邻居的信息
直觉:网络邻居定义了一个计算图
每个节点都基于其邻域定义一个计算图!
深度模型:有许多层
模型可以具有任意深度:节点在每一层都有嵌入节点u的第0层嵌入是其输入特征xuLayer-K嵌入从K跳之外的节点获取信息
邻居聚合:关键区别在于不同方法如何跨层聚合信息
基本方法:平均来自邻居的信息并应用神经网络
数学:深度编码器
基本方法:平均邻居消息,并应用神经网络
训练模型
我们如何训练模型以生成嵌入? 需要在嵌入中定义损失函数
我们可以将这些嵌入提供给任何损失函数,并进行随机梯度下降以训练权重参数
无监督训练
以无监督的方式训练:仅使用图形结构“相似”节点具有相似的嵌入无监督损失函数可以是上一节中的任何内容,例如基于随机游走(node2vec,DeepWalk,struc2vec)图分解图中的节点接近度
有监督训练
直接为监督任务训练模型(例如,节点分类)
模型设计:
(1)定义邻域聚合函数
(2)在嵌入中定义损失函数
(3)在一组节点上训练,即一批计算图
(4)根据需要为节点生成嵌入,即使对于从未训练过的节点也是如此!
归纳能力
所有节点共享相同的聚合参数:模型参数的数量在| V |中是次线性的我们可以推广到看不见的节点
归纳能力 : 新图
归纳节点嵌入 -> 泛化为完全没见过的图
例如,训练来自模型生物A的蛋白质相互作用图,并在有关生物B的新收集数据上生成嵌入
许多应用程序设置经常遇到以前看不见的节点:例如,Reddit,YouTube,Google Scholar需要“即时”生成新的嵌入总结:通过汇总邻域信息来生成节点嵌入我们看到了这个想法的基本变体关键区别在于不同方法如何跨层汇总信息下一步:描述GraphSAGE图神经网络架构图卷机网络和GraphSAGE
到目前为止,我们已经通过采用邻居(加权)平均值来汇总邻居消息。我们可以做得更好吗?
对嵌入每一层的每个节点应用L2归一化
简单的邻域聚合:
GraphSAGE
邻域聚合的变量
Mean 平均值:取邻居的加权平均值
Pool 池:变换邻居向量并应用对称向量函数
LSTM:将LSTM应用于改组的邻居
关键思想:根据本地邻域生成节点嵌入
节点使用神经网络聚合来自邻居的“消息” 图卷积网络: 基本变体:平均邻域信息和堆栈神经网络 图形: 广义邻域聚合
通过(稀疏)矩阵运算可以有效地执行许多聚合
另一个示例:GCN(Kipf等,2022)
其它图神经网络
教程和概述: 关系归纳偏差和图网络(Battaglia et al。,2022) 图形表示学习:方法和应用(Hamilton et al。,2022) 基于注意力的邻域聚合:图注意力网络(Hoshen,2022; Velickovic等,2022; Liu等,2022) 嵌入整个图形: 带有边缘嵌入的图神经网络(Battaglia等人,2022; Gilmer等人,2022) 嵌入整个图(Duvenaud等人,2022; Dai等人,2022; Li等人,2022)和图池 (Ying等人,2022,Zhang等人,2022) 图形生成和关系推断(You等,2022; Kipf等,2022) §图神经网络的功能强大(Xu et al。,2022) 嵌入节点: 变化的邻里:跳跃的知识网络(Xu等人,2022),GeniePath(Liu等人,2022) 位置感知GNN(You et al.2022) 图神经网络的频谱方法: CNN和ChebNet的频谱图(Bruna等,2022; Defferrard等,2022) 几何深度学习(Bronstein等,2022; Monti等,2022) 其他GNN技术: 预训练图神经网络(Hu et al。,2022) GNNExplainer:生成图神经网络的解释(Ying等,2022)图注意力网络
概述:简单的邻居聚合
图卷积运算符:
跨邻居聚合消息,N(v) avu=1 / | N(v)|是节点u到节点v的消息的权重因子(重要性) v avu是根据图的结构属性明确定义的 ?所有邻居u∈N(v)对节点v同样重要
图注意力网络
我们能比简单的邻域聚合做得更好吗?我们可以隐式定义加权因子avu吗?
目标:对图中每个节点的不同邻居指定任意重要性 思路:计算嵌入 图中每个节点的I遵循关注策略: 节点参加他们的邻居的消息 隐式指定邻域中的节点不同的权重
图注意力的例子:
基于GAT的节点嵌入的t-SNE图: 节点颜色:7个发布类 边强度:节点i和j之间,八个关注头之间的归一化关注系数应用举例
人类策划的别针收藏
Pin:有人从互联网上保存到他们创建的Board上的视觉书签。
Pin:图片,文字,链接
Board:一组想法(有共同点的别针)
图:20亿Pin,10亿Board,200亿边图是动态的:需要应用于新节点而无需模型重新训练 丰富的节点功能:内容,图像
PinSage
PinSage图卷积网络: 目标:在包含数十亿个对象的网络级Pinterest图中为节点(例如Pins /图像)生成嵌入 关键思路:从附近节点借用信息 例如床栏杆的销钉可能看起来像花园围栏,但门和床在图中很少相邻Pin嵌入对于各种任务至关重要,例如Pin推荐,分类,聚类,排名 诸如“相关图钉”,“搜索”,“购物”,“广告”之类的服务
节点嵌入
目标:将节点映射到d维嵌入,以便将相关的节点紧密地嵌入在一起
任务:向用户推荐相关的图钉Pin
挑战:
庞大的规模:30亿个节点,200亿个边缘 异构数据:丰富的图像和文本功能
PinSage的训练
目标:确定3B引脚中的目标图钉
问题:需要以100 vs. 3B的分辨率进行学习 思路:使用越来越难的阴性样本 每个时期包含越来越多的硬阴性样本
关键创新
如何将训练和节点嵌入的推论扩展到具有数十亿个节点和数百亿个边的图形?
比任何先前的图形神经网络应用程序大10,000倍的数据集 关键创新: 子样本邻域可有效地进行GPU批处理 生产者-消费者CPU-GPU训练管道 否定样本的类型学习 MapReduce可进行有效推理
三项关键创新:
动态图卷积 对节点周围的邻域进行采样并动态构建计算图 围绕特定节点执行局部图卷积 训练过程中不需要整个图
通过随机游走构造卷积 在全部邻域上进行卷积是不可行的: 如何选择要进行卷积的节点的邻居集? 重要集合:通过模拟随机游走并选择访问量最高的邻居来定义基于重要性的邻居 高效的MapReduce推断 节点嵌入的自底向上聚合使其适用于MapReduce 将所有节点上的每个聚合步骤分解为MapReduce中的三个操作,即映射,联接和归约 基线: 视觉:CNN视觉嵌入的最近邻居建议 注释:就Word2vec嵌入而言,最近的邻居 组合:串联嵌入: 使用与PinSage完全相同的数据和损失函数
与最佳基准相比,PinSage的命中率提高了150%,MRR提高了60%
Pixie是一种纯粹基于图的方法,它使用有偏见的随机游走通过模拟从查询Pin开始的随机游走来生成排名分数。检索得分最高的项目作为建议[Eksombatchai等,2022]
一般性建议数据预处理很重要: 使用重新规范化技巧 方差缩放的初始化 网络数据白化 ADAM优化器: ADAM自然会降低学习速度 ReLU激活功能通常效果很好 输出层没有激活功能: 如果使用共享功能构建图层,则容易出错 在每一层都包含偏差项 大小为64或128的GCN层已经足够调试?!: 训练期间的损失/准确性无法收敛 对于模型开发很重要: 对训练数据的过度拟合: 准确度应基本上为100%或误差接近0 如果神经网络无法适应单个数据点,则说明存在问题 检查您的损失函数! 检查您的可视化效果!
人类疾病网络
snap.stanford/deepnetbio-ismb/ipynb/Human+Disease+Network.html