热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LessisMore:ReweightingImportantSpectralGraphFeaturesforRecommendation

目录概符号说明动机本文方法微调的方法其它细节代码PengS.,SugiyamaK.andMineT.Lessismore:reweightingimportantspectralg

目录




  • 符号说明

  • 动机

  • 本文方法

    • 微调的方法



  • 其它细节

  • 代码


Peng S., Sugiyama K. and Mine T. Less is more: reweighting important spectral graph features for recommendation. In International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR), 2022.




符号说明



  • \(\mathcal{U}\), user;



  • \(\mathcal{I}\), item;



  • \(|\mathcal{U}| = M, |\mathcal{I}| = N\);



  • \(R \in \{0, 1\}^{M \times N}\), 交互矩阵;



  • \(E \in \mathbb{R}^{(M + N) \times d}\), embeddings;



  • 邻接矩阵:


    \[A =

    \left [

    \begin{array}{ll}

    0 & R \\

    R^T & 0

    \end{array}

    \right ] \in \{0, 1\}^{(M + N) \times (M + N)};

    \]



  • \(D, D_{ii} = \sum_j A_{ij}, D_{ij} = 0 \text{ if } j \not = i\);



  • \(\tilde{A} = A + I, \tilde{D} = D + I\);



  • \(\hat{A} = \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}}\);



  • \(N_u = \{i: r_{ui} = 1\} \cup \{u\}\);




动机



  1. 现在的图网络用于推荐, 大抵每一次将邻居的点进行一个聚合得到第 \((k+1)\) 层的特征:


    \[h_u^{(k + 1)} = \sigma(\sum_{i \in \mathcal{N}_u} \frac{1}{\sqrt{d_u + 1}\sqrt{d_i + 1}} h_i^{(k)} W^{(k)});

    \]



  2. 用矩阵的形式表示即为


    \[H^{(k+1)} = \sigma(\hat{A}H^{(k)} W^{(k+1)});

    \]



  3. 最后通过


    \[o_u = \text{pooling} (h_u^{(0)}, \ldots, h_u(K))

    \]

    来得到最后的特征;



  4. 并借此进行预测


    \[\hat{r}_{ui} = o_u^T o_i.

    \]



作者定义


\[\|s - \hat{A}s\|

\]

为信号 \(s\) 经过'聚合' 后的变化, 显然如果变化大, 说明整个图整体很不光滑. 倘若 \(s = v_t\) 为一特征向量, 此时有


\[\|v_t - \hat{A}v_t\| = 1 - \lambda_t,

\]

分解


\[\hat{A} = \sum_t \lambda_t v_t v_t^T,

\]

可知, \(\lambda_t\) 大的特征 \(v_t\) 反而越光滑.

注: \(\hat{A}\) 的特征值在 \((-1, 1]\) 内.

作者令


\[\hat{A} ' =\sum_t \mathcal{M}(\lambda_t) v_t v_t^T,

\]

其中 \(\mathcal{M}(\lambda) \in \{0, \lambda\}\). 作者将 \((-1, 1]\) 分成数份, 仅用其一所构成的矩阵 \(\hat{A}'\) 在普通的 GCN 和 LightGCN 上进行训练, 得到如下结果:

从中可以得到如下结论:



  1. 大部分 \(\lambda_t\) 其中在 \([0.5, 1.5]\);

  2. 少部分的对应粗糙 (rough) \([0, 0.15]\) 的特征和对应光滑 \([1.5, 2]\) 的特征对于预测准确率是最为重要的!

以 LightGCN 为例, 其可以表述为


\[O = \sum_{k=0}^K \alpha_k H^{(k)} = \sum_{k=0}^K \frac{\hat{A}^k}{K+1} E = \Big( \sum_t (\sum_{k=0}^K \frac{\lambda_t^k}{K + 1}) v_tv_t^T \Big)E,

\]

可见, LightGCN 仅是将 \(\lambda_t\)\(\sum_{k=0}^K \frac{\lambda_t^k}{K + 1}\) 替代, 倘若我们对不同的 \(t\) 画出其比例, 如下图可知, 随着 K 加深, LightGCN 实际上就是一种更倾向于 smooth 特征的做法罢了, 而根据先前的分析, (b) 可能更为合适.


本文方法



  1. 定义user/item 的 hypergraphs:


    \[A_U = D_u^{-\frac{1}{2}} R D_i^{-1} R^T D_u^{-\frac{1}{2}} \in \mathbb{R}^{M \times M}, \\

    A_I = D_i^{-\frac{1}{2}} R D_u^{-1} R^T D_i^{-\frac{1}{2}} \in \mathbb{R}^{N \times N}.

    \]

    虽然看似复杂, 实际上就是一种'二阶'邻接矩阵罢了;



  2. 为这两个邻接矩阵, 分别进行矩阵分解:


    \[A_U = (P \odot \pi) P^T, \\

    A_I = (Q \odot \sigma) Q^T, \\

    \]

    其中 \(P\), \(\pi\) 分别为 \(A_U\) 的特征向量和特征值, \(Q, \sigma\) 之于 \(A_I\) 也是类似的;



  3. 假设我们希望保留的是一些最 smooth 特征和最 rough 特征, 不妨记


    \[[P^{(s)}, \pi^{(s)}], [P^{(r)}, \pi^{(r)}]

    \]

    为所对应的特征和特征值 (\(Q\) 也类似分解);



  4. 于是我们可以通过


    \[H_U^{(s)} = \Big( [P^{(s)} \odot \gamma(\mathcal{U}, \pi^{(s)})] {P^{(s)}}^T \Big) E_U, \\

    H_I^{(s)} = \Big( [Q^{(s)} \odot \gamma(\mathcal{I}, \sigma^{(s)})] {Q^{(s)}}^T \Big) E_U, \\

    H_U^{(r)} = \Big( [P^{(r)} \odot \gamma(\mathcal{U}, \pi^{(r)})] {P^{(r)}}^T \Big) E_U, \\

    H_I^{(r)} = \Big( [Q^{(r)} \odot \gamma(\mathcal{I}, \sigma^{(r)})] {Q^{(r)}}^T \Big) E_U, \\

    \]

    其中 \(\gamma(\cdot)\) 会对 \(\lambda\) 加以调整;



  5. 如此一来, 我们就关于user 和 item 分别得到了高频和低频的特征信息, 借此可以得到


    \[O_U = \text{pooling} (H_U^{(s)}, H_U^{(r)}), \\

    O_I = \text{pooling} (H_I^{(s)}, H_I^{(r)}), \\

    \]

    借此预测即可.




微调的方法

在讲作者设计 \(\gamma\) 的思路前, 先通过泰勒展开得


\[[P \odot \gamma(\pi)] P^T \approx P diag(\sum_{k=0}^K \alpha_k \pi^k) P^T = \sum_k^K \alpha_k \bar{A}_U^k,

\]

倘若 \(\gamma\)\(k\) 阶导数一直不为 0, 则通过此方法可以相当于利用了非常高阶的信息 \(\bar{A}_U^k\) !

注: 严格来说, 一般的向量函数 \(\gamma\) 是不具备上面的泰勒展开的, 不过作者所设计的 \(\gamma\) 又满足此性质, 故也无法说它是错的.

所以作者希望设计这么一个 \(\gamma\), 作者首先给出的结论就是


\[\gamma = e^{\beta \pi},

\]

注意, 这里的 \(e^{\beta\pi} = [e^{\beta\pi_1}, \ldots, e^{\beta \pi_m}]\). 由此一来, 相当于 (按照 LightGCN 的方式推导)


\[H^{(k+1)} = \bar{A}_U H^{(k)} \\

O_U = \lim_{K \rightarrow \infty} \sum_{k=0}^K \frac{\beta_k}{k!} H^{(k)}.

\]

当然, 本文不需要重复无限次 layers 聚合, 只需:


\[H_U^{(s)} = \Big( [P^{(s)} \odot \gamma(\mathcal{U}, \pi^{(s)})] {P^{(s)}}^T \Big) E_U, \\

H_U^{(r)} = \Big( [P^{(r)} \odot \gamma(\mathcal{U}, \pi^{(r)})] {P^{(r)}}^T \Big) E_U, \\

O_U = \text{pooling} (H_U^{(s)}, H_U^{(r)}), \\

\]

即可.

此外, 考虑到不同的用户 \(u\) 下降的速度应当不同, 作者认为越不活跃的用户越需要 smooth (即高阶的邻居信息, 故 \(\alpha_k\) 应当大), 故作者最后得设计结果为


\[\gamma(u, \pi) = e^{(\beta - \log (d_u)) \pi}.

\]

注: 对于 \(i\) 自然也是类似的设计.


其它细节



  1. 为了提高泛化性, 作者在训练的时候会随机 (按照概率 \(p \in [0, 1]\)) 移除部分点, 相当于 dropout 了;

  2. 关于 BPR 损失作者提出了一个自适应的版本;

  3. 关于 over-smoothing 的分析可以看一看.


代码

[official]



推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
author-avatar
foreverfda
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有