KGCN、KGNN-LS ( KGCN-LS )、KGAT的简要介绍以及简单对比

6 篇文章 1 订阅

emm…图片复制过来显示不了(因为我太懒了0.0),要看图的话可以去我的博客瞅瞅,嘿嘿嘿
对了,有些英文短句假如翻译成中文,阅读的时候就太搞脑子了,所以我干脆就不翻译了

我的博客地址:https://hikg.net/archives/124/

GCN

传统的GCN在做聚合操作时,将图的邻接矩阵、度矩阵作为权重;再跟当前层的所有节点做一个加权和,得到下一层的节点表示。

GAT

GCN的权重系数不可学习,与节点的度相关。也就是说,一旦图确定了,GCN的权重也就随之确定了。

GAT的权重与两个节点有关。将节点i、j的表示分别乘上一个共享参数W,然后将它们串联起来, α ( ⋅ ) \alpha(\cdot) α()用来将拼接后的高维特征映射到一个实数上。

KGCN

传统GCN在消息传递时,权重是通过 D A D DAD DAD计算得到的。

KGCN在这里使用了一个函数 g ( u , r ) g(u,r) g(u,r),来计算权重 π r u \pi_r^u πru:通过将u、r做内积,即表征了关系r对用户u的重要性。然后使用softmax对 π r u \pi_r^u πru进行归一化。

图的例子:

image-20210415160104199

e S ( e ) u [ h ] ← ∑ e ′ ∈ S ( e ) π r e , e ′ u e ′ u [ h ] e_{S(e)}^u[h] \leftarrow \sum\limits_{e^{'}\in S(e)} \pi_{r_{e,e^{'}}^u} e^{'u}[h] eS(e)u[h]eS(e)πre,eueu[h]

e u [ h + 1 ] ← a g g ( e S ( e ) u [ h ] , e u [ h ] ) e^u[h+1] \leftarrow agg(e_{S(e)}^u[h], e^u[h]) eu[h+1]agg(eS(e)u[h],eu[h])

将第h层的输出 e u [ h ] e^u[h] eu[h]、以及它的邻域进行聚合,得到 e u [ h + 1 ] e^u[h+1] eu[h+1];…最后一层H层的输出 e u [ H ] e^u[H] eu[H],记作 v u v^u vu,将它与user的embedding一起,计算内积,得到 y ^ \hat{y} y^

损失函数如下,随机采样负样本,然后采用cross-entropy loss,最后加上一个L2正则项。

KGNN-LS

KGNN-LS完全是在KGCN的基础上进行的,仅仅是在KGCN的基础上加入了一个正则项。

对于一个交互 ( u , v ) (u,v) (u,v)中的item v,将它作为一个中心节点。

然后使用user-specific relation scoring function s u ( ⋅ ) s_u(\cdot) su()来计算每两个实体间的关系r对于u的重要性(即KGCN中的 π r u \pi_r^u πru)然后就可以构造一个矩阵 A u ∈ R ∣ E ∣ × ∣ E ∣ A_u \in \mathbb{R}^{|E| \times |E|} AuRE×E(即针对特定user u生成的一个图的邻接矩阵。其中的某一元素 A u i j = 0 A_u^{ij}=0 Auij=0代表 e i e_i ei e j e_j ej之间没有关系)

l l l层的前向传播公示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luDHLi08-1619534135846)(https://516000.xyz/images/2021/04/15/image-20210415155902760.png)]

这里的公式跟GCN差不多,但区别在于,邻接矩阵A是计算得到的,是可训练的。 H 0 H_0 H0初始化为实体的原始特征矩阵 E ∈ R ∣ E ∣ × d 0 E \in \mathbb{R}^{|E| \times d_0} ERE×d0 W l ∈ R d l × d l + 1 W_l \in \mathbb{R}^{d_l \times d_{l+1}} WlRdl×dl+1是第 l l l层的可训练权重矩阵。

聚合到最后一层L层,最终的表示矩阵 H L ∈ R ∣ E ∣ × d L H_L \in \mathbb{R}^{|E| \times d_L} HLRE×dL聚合了实体初始表示、L跳的邻域信息。最终u和v发生交互的概率可以通过 y ^ u v = f ( u , v u ) \hat{y}_{uv} = f(u,v_u) y^uv=f(u,vu)计算出, v u v_u vu H L H_L HL的第v行(即第v个item的最终表示向量)


KGCN的边权重 A u A_u Au、参数矩阵 W l W_l Wl是需要监督学习的,数据的唯一来源是user-item的交互,可能会造成过拟合。

所以KGNN-LS在KGCN的基础上,加入了标签平滑度正则项,来对损失函数进行约束。假如当前用户看过这个电影,label就为1,没看过就为0,其他非item的实体就是unlabeled node。

LPA算法基于这样的假设:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWVeaSTm-1619534135848)(https://516000.xyz/images/2021/04/16/2021-04-16-15.42.03.png)]

KG中邻近的实体很有可能拥有相似的label(相邻两个点i、j,假如有边,那么这个损失函数应该越低越好)所以要做的就是预测一个节点:将它邻居的label加权求和、求平均,得到该节点的label。

使用LPA来做正则项:

对于图中的一个已知节点v,将它的标签拿掉,对它做LPA,得到v 的标签的预测值y_uv拔,然后使用cross-entropy loss计算预测值、真实值之间的损失。(这个损失是关于边权重的一个函数,因为做LPA时传播取决于weight,所以预测值是关于边权重的函数)

KGAT

Embedding Layer

使用TransR的思想,通过优化得分函数g来学习每个节点、每个关系的embedding。

损失函数如下,这里使用了负采样的方法。

Attentive Embedding Propagation Layers

传统GAT是将两个节点的函数作为权重。

KGAT在权重的计算过程中,考虑了头实体、尾实体、以及他们俩之间的关系;作者认为这样做,使得距离较近的实体,可以传递较多的信息。然后使用softmax对权重进行归一化。

这里的 e N h e_{N_h} eNh代表:聚合了图中,以h为头实体的三元组邻域的信息

然后使用一个聚合函数f,将头实体 e h e_h eh自身、以及以它为头实体的邻域的信息 进行聚合。f的左半部分使用了GCN的sum聚合器,右半部分是将 e h e_h eh e N h e_{N_h} eNh按元素乘积element-wise product。作者说这样做可以额外对 e h e_h eh e N h e_{N_h} eNh之间的特征交互进行编码,使得要传递的消息对于 e h e_h eh e N h e_{N_h} eNh之间的亲和力敏感(即:传递来自类似实体的更多消息)


上述的公式是针对单层传递的公式,作者还定义了高阶的传递:

l l l层的头实体的embedding = l − 1 l-1 l1层的该头实体的embedding + 邻域的embedding;这个邻域的embedding就是上面介绍的,以h为头实体的三元组的信息经过信息传递得到的 e N h e_{N_h} eNh

在训练了L层之后,将u的多层表示进行串联,得到u的最终向量 e u ∗ e_u^* eu;同理得到i的最终向量 e i ∗ e_i^* ei。最终使用内积来计算预测值 y ^ ( u , i ) \hat{y}(u,i) y^(u,i)

Difference between KGCN & KGAT

  1. KGCN中的图是user-specific的,在训练过程中,只有item图参加训练。而KGAT不仅训练item的embedding,还训练了user embedding。
  2. KGCN仅仅将KG(也就是item的graph)作为训练的输入;KGAT的输入是CKG,CKG通过将user-item bipartite graph中的item与KG中的实体进行对齐,整合了user-item bipartite graph、KG。
  3. 第三点在第一点的时候提到了
  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值