NGCF及其改进模型LightGCN:Neural Graph Collaborative Filtering & LightGCN

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

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

NGCF

Motivation

先前的方法仅仅使用描述性特征(比如ID、属性)来构造embedding function,而没有考虑过user-item interactions(或者仅仅是在定义目标函数时使用)

Model

High-order connectivity表示到达 u 1 u_1 u1的,路径长度大于1的节点

例如: u 1 ← i 2 ← u 2 u_1 \leftarrow i_2 \leftarrow u_2 u1i2u2表示 u 1 u_1 u1 u 2 u_2 u2之间的行为相似度,因为这两者都与 i 2 i_2 i2发生过交互

u 1 ← i 2 ← u 2 ← i 4 u_1 \leftarrow i_2 \leftarrow u_2 \leftarrow i_4 u1i2u2i4,表示 u 1 u_1 u1很可能对 i 4 i_4 i4感兴趣,因为相似的用户 u 2 u_2 u2之间与 i 4 i_4 i4发生过交互。

模型分为3层:

1. Embedding Layer

将user u(item i)的单个embedding向量 e u ∈ R d e_u \in \mathbb{R}^d euRd e i ∈ R d e_i \in \mathbb{R}^d eiRd)组建成 一个embedding look-up table,用作之后进行传播的初始矩阵:

E = [ e u 1 , . . . , e u N , e i 1 , . . . , e i M ] E = [e_{u_1}, ..., e_{u_N}, e_{i_1},..., e_{i_M}] E=[eu1,...,euN,ei1,...,eiM]

2. Embedding Propagation Layers

  • Message Construction:

    m u ← i = f ( e i , e u , p u i ) \large m_{u \leftarrow i} = f(e_i,e_u,p_{ui}) mui=f(ei,eu,pui)

    m u ← i = 1 ∣ N u ∣ ∣ N i ∣ ( W 1 e i + W 2 ( e i ⊙ e u ) ) \large m_{u \leftarrow i} = \frac{1}{\sqrt{|N_u||N_i|}} (W_1e_i + W_2(e_i \odot e_u)) mui=NuNi 1(W1ei+W2(eieu))

    p u i p_{ui} pui是在边 ( u , i ) (u,i) (u,i)上做传播时的衰减因子,反映了historical item对用户偏好的贡献

    使用传统GCN的方法实现 f ( ⋅ ) f(\cdot) f()函数, N u N_u Nu代表user u的一跳邻居

  • Message Aggregation:

    e u ( 1 ) = L e a k y R e L U ( m u ← u + ∑ i ∈ N u m u ← i ) \large e_u^{(1)} = LeakyReLU(m_{u \leftarrow u} + \sum\limits_{i \in N_u}m_{u \leftarrow i}) eu(1)=LeakyReLU(muu+iNumui)

    不仅考虑了u的邻居,还考虑到了u的self-connection m u ← u m_{u \leftarrow u} muu

  • High-order Propagation:

    $\Large \begin{equation} e_u^{(k+1)} = \sigma\bigg( W_1e_u^{(k)} + \sum\limits_{i \in N_u} \frac{1}{\sqrt{|N_u||N_i|}} \big (W_1e_i^{(k)} + W_2(e_i^{(k)} \odot e_u^{k}) \big) \bigg) \end{equation} $

    e i ( k + 1 ) = σ ( W 1 e i ( k ) + ∑ u ∈ N i 1 ∣ N u ∣ ∣ N i ∣ ( W 1 e u ( k ) + W 2 ( e u ( k ) ⊙ e i k ) ) ) \Large e_i^{(k+1)} = \sigma\bigg( W_1e_i^{(k)} + \sum\limits_{u \in N_i} \frac{1}{\sqrt{|N_u||N_i|}} \big( W_1e_u^{(k)} + W_2(e_u^{(k)} \odot e_i^{k}) \big) \bigg) ei(k+1)=σ(W1ei(k)+uNiNuNi 1(W1eu(k)+W2(eu(k)eik)))

⊙ \odot 表示按元素乘积,这使得传递的消息取决于e_i和e_j之间的亲和力,即来自相似的item会传递更多的消息。

3. Prediction Layer

将每层得到的user u的表示拼接起来,得到 u u u的最终表示:

e u ∗ = e u ( 0 ) ∣ ∣ . . . ∣ ∣ e u ( L ) \Large e_u^* = e_u^{(0)} ||...|| e_u^{(L)} eu=eu(0)...eu(L)

同理可得到 i i i的最终表示:

e i ∗ = e i ( 0 ) ∣ ∣ . . . ∣ ∣ e i ( L ) \Large e_i^* = e_i^{(0)} ||...|| e_i^{(L)} ei=ei(0)...ei(L)

最后使用内积来计算user u对item i的偏好:

y ^ N G C F ( u , i ) = e u ∗ T e i ∗ \Large \hat{y}_{NGCF}(u,i) = e_u^{*T} e_i^* y^NGCF(u,i)=euTei

Optimization

L o s s = ∑ ( u , i , j ) ∈ O − l n σ ( y ^ u i − y ^ u j ) + λ ∣ ∣ θ ∣ ∣ 2 2 \Large Loss = \sum\limits_{(u,i,j) \in O} -ln \sigma(\hat{y}_{ui} - \hat{y}_{uj}) + \lambda || \theta ||_2^2 Loss=(u,i,j)Olnσ(y^uiy^uj)+λθ22

O = { ( u , i , j ) ∣ ( u , i ) ∈ R + , ( u , j ) ∈ R − } \large O = \{ (u,i,j) | (u,i) \in \mathbb{R}^+, (u,j) \in \mathbb{R}^- \} O={(u,i,j)(u,i)R+,(u,j)R}表示成对的训练数据

R + \mathbb{R}^+ R+表示observed interactions, R − \mathbb{R}^- R表示unobserved interactions

LightGCN

GCN起初是为节点分类任务提出的,这上面的每个节点都拥有丰富的属性作为输入。然而在user-item interaction graph中,每个节点仅仅由一个one-hot ID描述,并没有具体的语义信息。由于ID embedding的信息量较少,所以使用多层的非线性特征变换是没有意义的,反而会增加模型训练的难度。

作者通过实验证明了:feature transformation W 1 W_1 W1 W 2 W_2 W2、nonlinear activation σ ( ⋅ ) σ(·) σ() 对NGCF模型没有任何贡献。

因此作者将上述两个组件去除,仅仅保留了GCN的核心组件 neighborhood aggregation,提出了LightGCN模型。

Light Graph Convolution

e u ( k + 1 ) = ∑ i ∈ N u 1 ∣ N u ∣ ∣ N i ∣ e i ( k ) \Large e_u^{(k+1)} = \sum\limits_{i \in N_u} \frac{1}{\sqrt{|N_u||N_i|}} e_i^{(k)} eu(k+1)=iNuNuNi 1ei(k)

e i ( k + 1 ) = ∑ u ∈ N i 1 ∣ N i ∣ ∣ N u ∣ e u ( k ) \Large e_i^{(k+1)} = \sum\limits_{u \in N_i} \frac{1}{\sqrt{|N_i||N_u|}} e_u^{(k)} ei(k+1)=uNiNiNu 1eu(k)

LightGCN仅仅聚合邻居节点,不去做self-connection聚合。因为后面的Layer Combination中,已经将 e u ( 0 ) e_u^{(0)} eu(0)整合进最终的表示了,所以在每一层的embedding propagation中,没有必要再考虑了。

Layer Combination

分别将每一层得到的表示进行weighted sum,得到最终的表示 e u e_u eu e i e_i ei

e u = ∑ k = 0 K α k e u ( k ) \Large e_u = \sum\limits_{k=0}^K \alpha_k e_u^{(k)} eu=k=0Kαkeu(k)

e i = ∑ k = 0 K α k e i ( k ) \Large e_i = \sum\limits_{k=0}^K \alpha_k e_i^{(k)} ei=k=0Kαkei(k)

Model Prediction

与NGCF一样使用内积计算:

y ^ u i = e u T e i \Large \hat{y}_{ui} = e_u^T e_i y^ui=euTei

Loss Funtion

截屏2021-04-28 15.44.03

Difference Between NGCF and LightGCN

你可能感兴趣的:(KG,RecSys,推荐系统)