最近在跑NGCF模型(Xiang Wang, Xiangnan He, Meng Wang, Fuli Feng, and Tat-Seng Chua. 2019. Neural graph collaborative filtering. In SIGIR. 165–174.),发现作者给的代码中,有如下注释
* `adj_type`
* It specifies the type of laplacian matrix where each entry defines the decay factor between two connected nodes.
* Here we provide four options:
* `ngcf` (by default), where each decay factor between two connected nodes is set as 1(out degree of the node), while each node is also assigned with 1 for self-connections. Usage: `--adj_type ngcf`.
* `plain`, where each decay factor between two connected nodes is set as 1. No self-connections are considered. Usage: `--adj_type plain`.
* `norm`, where each decay factor bewteen two connected nodes is set as 1/(out degree of the node + self-conncetion). Usage: `--adj_type norm`.
* `gcmc`, where each decay factor between two connected nodes is set as 1/(out degree of the node). No self-connections are considered. Usage: `--adj_type gcmc`.
那么,此处提到的 laplacian matrix 是什么,对模型有什么用呢?作者提供的选项之间有什么区别呢?整理如下。
1. 数学计算原理
参照这篇博文,作者从简到繁,整理得超赞!
2. 用途
参考博文,拉普拉斯矩阵是一种图的矩阵表示。
笔者理解为:使用拉普拉斯矩阵表示图,以实现对图的计算。
3. 回到NGCF
阅读完上述资料,我们知道:
给定一个有n个顶点的图G,它的拉普拉斯矩阵定义为:
L=D-A
其中D为图的度矩阵,A为图的邻接矩阵。
那NGCF中,“它指定拉普拉斯矩阵的类型,其中每个条目定义两个相连节点之间的衰减因子”应当如何理解呢?
- ngcf,其中两个连接的节点之间的每个衰减因子均设置为1(节点的出度),而每个节点的自连接也分配为1。
- plain,其中两个连接的节点之间的每个衰减因子设置为1。不考虑自连接。
- norm,其中两个连接的节点之间的每个衰减因子都设置为1 /(节点的出度+自连接)。
- gcmc,其中两个连接的节点之间的每个衰减因子设置为1 /(节点的出度),不考虑自连接。
此处需要理解 衰减因子。需要引入一个相似的概念——拉普拉斯变换。
4. 拉普拉斯变换
参考博文
傅里叶变换是将函数分解到频率不同、幅值恒为1的单位圆上;拉普拉斯变换是将函数分解到频率幅值都在变化的圆上。
二者的主要区别在于:傅里叶变换要求绝对可积,拉普拉斯变换把不满足绝对的可积的函数乘以一个快速衰减的函数,这样在趋于无穷时原函数也衰减到零了,从而满足绝对可积。
引入衰减因子 ,实现函数的衰减,从而达到可积。
5.结论
回到原问题,笔者认为,NGCF所说的衰减因子,其实并没有拉普拉斯变换那么复杂,它更多的是值如何定义图的表示。如NGCF两个连接的节点之间的每个衰减因子均设置为1,而每个节点的自连接也分配为1,只是在说明两个点之间的关系如何量化。