之前已经写了一个博客了,这里再记一下其他内容。
直接看论文中提及的代码: https://github.com/gusye1234/LightGCN-PyTorch
(1)每一次训练的输入:
- 使用的是 BPRloss,每一个样本要有一个正例、一个负例。
注意这里的正例负例形式: (user, positive_item, negative_item)
可以看到: 正例是 user-positive_item,负例是 user-negative_item ,也就是两条 u-i 边!
可以推测这个是图上的一个无监督的 loss;
图上只有 U-I 边,所以loss 也是基于 U-I 边的;
正例就是用户有交互的样本(也是随机采样的),负例是 随机采样的,且保证不在正例中;
- 一次训练,要有 $TOTAL_INTERACTION 个样本
- 也就是共有 TOTAL_INTERACTION 个循环,
- 每个循环,随机选1个 user,从交互行为中随机1个正样本出来
- 从不存在的边里,随机1个负样本出来
(2)sparse-graph
-
构建的 Graph,行、列的 size 都成为了 n_user + n_item
- 同时把 U x I, IxU 部分都赋值
- 对 UxI, IxU 部分都做 norm,norm 的因子是 sum(eges) ** (-0.5)