HAN!!!!

1. 基本概念

1.1 异构图

异构图是指不止有一种类型的节点或者边,因此允许不同类型的边或者节点拥有不同维度的特征或者属性。例如作者在论文中列举的IMDB数据(图1),节点的类型包含演员,电影和导演,假如两部电影均由同一个演员参演完成,则可以建立一条电影-演员-电影(MAM)的meta-path或者由同一个导演执导完成,则meta-path的类型为电影-导演-电影(MDM)。

img

source ~/.bashrc # 如果你使用 bash source ~/.zshrc # 如果你使用 zsh

图1:异构图中的多种节点类型以及多种metapath类型

论文中给出异构图的定义为 G=(V,E) 由节点的集合 V 和节点之间的边 E 组成。异构图也与节点类型的映射函数 ϕ:V→A 以及连接类型的映射函数 ψ:E→R 相关联。 A 和 R 是预先定义好的节点的类型和连接的类型,其中 |A|+|R|≥2 。

1.2 Meta-Path

Meta-Path Φ 的格式为 A1→R1A2→R2⋯→RlAl+1 (缩写为 A1A2⋯Al+1 ),它描述了节点 A1 和 Al+1 之间的一个组合关系 R=R1∘R2∘⋯∘Rl , ∘ 代表了节点之间的组合操作。例如在图1.c中,两个电影之间可以有MAM和MDM两种关联方式。

1.3 基于meta-path的邻居

给定异构图中的一个节点 i 和一个meta-path Φ ,基于meta-path的邻居 NiΦ 定义为通过类别为 Φ 与节点 i 相连的节点,这里节点的邻居包含它自己。例如图1.d中, m1 有三个基于MAM的metapath的邻居。

上面介绍了异构图中非常重要的三个概念,下面我们详细介绍论文中提出的HAN算法。

2. 算法详解

HAN是一个两层的attention架构,分别是节点级别的attention→语义级别的attention,图2便是这个算法的详细结构。首先固定metapath的类别 Φi ,通过节点级别的attention将中心节点的基于 Φi 的邻居节点进行聚合,得到每个metapath的特征向量 ZΦi ,然后再通过语义级别的attention将特征向量 ZΦ 进行聚合,得到最终的特征向量 Z 。最后通过一个MLP得到这个节点的预测值 y~i 。

img

图2:HAN中的总体框架。(a)是节点级别的attention,聚合后得到每个类型节点的嵌入向量;(b)是语义级别的attention,聚合后得到中心节点的嵌入向量;(c)通过MLP得到预测结果。

2.1 节点级别Attention

在具体的任务中,一个节点在同一个metapath的邻居上有不同的重要性,而同一个中心节点的邻居可能有多种类别,每个类别的节点 ϕi 都有不同维度的特征向量,因此我们的第一步便是通过转换矩阵 Mi 将它们映射到相同的维度。设转换之前的特征向量为 hi ,转换之后的特征向量为 hi′ ,它们之间的计算方式为:

(1)hi′=Mϕi⋅hi.

有了维度相同的特征向量,下一步便是计算每个节点的权值,HAN使用的是self-attention来学习这个权值。对于一个给定的节点对 (i,j) ,它们之间通过metapath Φ 连接,它们之间的节点注意力值 eijΦ 表示节点 j 对节点 i 的重要性,计算方式为:

(2)eijΦ=attnode(hi′,hj′;Φ)=σ(aΦT⋅[hi′||hj′]).

其中 attnode 表示节点级别的attention,对于同一个metapath Φ ,不同基于这个metapath的邻居节点的权值是共享的。 σ 是sigmoid激活函数, ‖ 是拼接操作, aΦ 是节点级别的attention向量。然后通过softmax操作得到每个特征向量的权值系数

(3)αijΦ=softmax(eijΦ)=exp⁡(σ(aΦT⋅[hi′||hj′]))∑k∈NiΦexp⁡(σ(aΦT⋅[hi′||hk′]))

最后,节点 i 最终的embedding的计算方式为:

(4)ziΦ=σ(∑j∈NiΦαijΦ⋅hj′)

在很多场景中,节点的类别有可能会非常多,这无疑增加了self-attention学习的困难程度,为了解决这个问题,HAN中使用了multi-head attention机制,其中头的个数设置为了8。

(5)ziΦ=‖k=1Kσ(∑j∈NiΦαijΦ⋅hj′)

对于给定的metapath集合 {Φ1,Φ2,⋯,ΦP} ,经过这个节点级别的attention之后,得到 P 组语义相关的embedding,表示为 {Zϕ1,Zϕ2,⋯,ZϕP} 。

2.2 语义级别Attention

异构图除了有多种类别的节点,还有多种类别的边,语义级别的attention便是将不同类型的连接的embedding组合起来,如图2.b所示。假设每个类别的权值为 β ,它的计算方式抽象为:

(6)(β1,β2,⋯,βP)=attsem(Zϕ1,Zϕ2,⋯,ZϕP)

这里 attsem 表示语义级别的attention操作,它的目的是学习每一个边类型的重要性,它首先通过计算语义级别的attention向量 q 和转换之后的每个边类别的embedding得到的,计算方式为:

(7)wΦ=1|V|∑i∈VqT⋅tanh⁡(W⋅ziΦ+b)

其中 q 是语义级别的attention向量, W 是权值矩阵, b 是偏置向量,他们都是需要学习的向量,并且对于所有的metapath都是共享的。通过将softmax作用到根据式(7)得到的 wΦ ,我们便可以得到每个metapath类别的attention权值:

(8)βΦ=exp⁡(wΦi)∑i=1Pexp⁡(wΦi)

最终,根节点的嵌入表示为:

(9)Z=∑i=1PβΦi⋅ZΦi

一个更形象的对这两个算法的图示如图3所示:

img

图3:节点级别的attention和语义级别的attention

2.3 损失函数

HAN是一个半监督模型,我们根据数据集中的有标签数据,使用BP对模型进行训练。使用交叉熵损失函数得到这个算法的损失函数:

(10)L=−∑l∈YLYlln⁡(C⋅Zl)

其中 C 是分类器的参数, YL 是有标签的节点, Yl 和Zl 是有标签数据的标签值和预测值。

3. 总结

这篇文章的算法将attention机制应用到异构图领域中,因为异构图存在节点的多样性和边的多样性,因此作者将attention机制分成了节点级别的attention和语义级别的attention,整体思路非常清晰。

按照作者的思路进一步深入,当学习一个节点的特征时,不同的特征应该扮演着不同的作用,也许给特征层再加一层attention,或者根据图的结构的不同(出入度,邻居类别数等等)赋予不同的权值,也许会有更好的效果。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对ts中的可选链操作符(?.)、空值合并操作符(??)和逻辑非操作符(!!)的介绍和示例: 1. 可选链操作符(?.): 可选链操作符(?.)用于访问可能为null或undefined的属性或方法,如果属性或方法存在,则返回其值,否则返回undefined。它可以避免在访问可能为空的属性或方法时出现错误。 示例: ```typescript const data = { items: [1, 2, 3] }; console.log(data?.items?.[1]); // 输出: 2 console.log(data?.items?.[5]); // 输出: undefined,因为索引 5 不存在 ``` 2. 空值合并操作符(??): 空值合并操作符(??)用于在变量为null或undefined时提供默认值。如果变量为null或undefined,则返回默认值,否则返回变量的值。 示例: ```typescript const value1 = null; const value2 = undefined; const value3 = 0; console.log(value1 ?? 'default value'); // 输出: 'default value' console.log(value2 ?? 'default value'); // 输出: 'default value' console.log(value3 ?? 'default value'); // 输出: 0,因为value3不为null或undefined ``` 3. 逻辑非操作符(!!): 逻辑非操作符(!!)用于将一个值转换为布尔类型。它会将一个值转换为其对应的布尔值,如果值为假值(如false、0、空字符串、null、undefined等),则返回false,否则返回true。 示例: ```typescript const value1 = 0; const value2 = ''; const value3 = null; const value4 = undefined; const value5 = 'hello'; console.log(!!value1); // 输出: false console.log(!!value2); // 输出: false console.log(!!value3); // 输出: false console.log(!!value4); // 输出: false console.log(!!value5); // 输出: true ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值