推荐系统----GCN和NGCF, LightGCN实验结果对比

实验一: 只是单纯地添加了, e_e公式的部分, 没有dropout, 没有加层. (只跑到epoch30, 在普通笔记本上)

结果:两个模型是可比的

  • GCN: loss表现更好
  • NGCF: 在度量指标HR, ndcg上表现更好
  • (因为是在自己的电脑上跑的, 所以听到NGCF运行的时候声音更大, 风扇和硬盘读写啊,  感觉自己的心在滴血......我还是很爱惜自己的笔记本的)

GCN:

NGCF:

 

 

实验二: GCN 对比  GCN+e_e 

结果:  ...总体来说结果还是可比的

损失函数: 34623:30574

HR: 0.7238:0.7267

NDCG: 0.4694:0.4736

 

  • GCN:

  • 实验设置

  • 第0个epoch: 

  • 第20个epoch: 

  • 第40个epoch: 

  • 第60个epoch: 

  • 第63个epoch提前终止:

34623.57

0.7238

0.4694

 

 

  • NGCF: + e_e:

  • 开始:

  • 第0个epoch:

  • 第10个epoch:

  • 第20个epoch:

 

  • 第30个epoch:

  • 第40个epoch:

  • 第50个epoch:

  • 终止epoch:

 

 

 

实验三: 加层数:  三层VS一层  (在GCN的基础上加了e_e)

  • 实验结果:

  • 最明显的一点: 层数增加了, 模型收敛的速度也变慢了:原本是50~60个epoch就可以收敛, 但是现在增加到 91 个epoch才停止

  •  
  • 就度量结果而言是"不升反降!!!!!!!"

  • 损失函数: 19959:30574  (TODO: 是不是epoch不一样, 就不可比)

    HR: 0.7174:0.7267

    NDCG: 0.4662:0.4736

 

  • 开始:
  •  
  • 第0个epoch:
  • 第10个epoch:
  • 第20个epoch:
  • 第30个epoch:
  • 第40个epoch:
  • 第50个epoch:
  • 第60个epoch:
  • 第70个epoch:
  • 第80个epoch:
  • 第90个epoch:
  • 结束epoch:

  •   

 

 

实验四:  加node_dropout:   有VS无

TODO:  理解node_dropout是什么东西??????感觉让原来的矩阵更稀疏了

实验结果: 不升反降

损失函数: 20508.25:19959.09

HR: 0.7047: 0.7174

NDCG: 0.4689 : 0.4662

  • 开始:

  • 第0个epoch:

  • 第10个epoch:

  • 第20个epoch:

  • 第30个epoch:

  • 第40个epoch:

  • 第50个epoch:

  • 第60个epoch:

  • 第70个epoch:

  • 第80个epoch:

  • 第90个epoch:

  • 最后epoch:

20508.25

0.7047

0.4689

 

实验五: 加message_dropout     有VS无

实验结果:  还是可比的 (个人任务可能是因为任务不同, 再看损失函数和CF任务的关系)

损失函数:    22586.43  : 20508.25

HR:  0.7090 : 0.7047

ndcg:  0.4634 : 0.4689

 

 

  • 开始:

  • 第0个epoch:

  • 第10个epoch:

  • 第20个epoch:

  • 第30个epoch:

  • 第40个epoch:

  • 第50个epoch:

​​​​​​​

  • 第60个epoch:

​​​​​​​

  • 第70个epoch:

​​​​​​​

  • 第80个epoch:

​​​​​​​

  • 第90个epoch:

​​​​​​​

  • 第100个epoch:

​​​​​​​

  • 第110个epoch:

​​​​​​​

  • 最后epoch:

22586.43

0.7090

0.4634

 

实验六: embedding_size的影响

embedding_size==16:

实验结果:

最后一个训练loss:  15595.49

HR: 0.7241

ndcg: 0.4724

 

  • 开始epoch:

​​​​​​​

  • 第0个epoch:

​​​​​​​

  • 第10个epoch:

​​​​​​​

  • 第20个epoch:

​​​​​​​

  • 第30个epoch:

​​​​​​​

15595.49

0.7241

0.4724

embedding_size==32:

  • 开始epoch:

  • 第0个epoch:

  • 第10个epoch:

  • 结束epoch:

10429.84

0.7343

0.4844

embedding_size==64:

实验结果:

6805.64

0.7378

0.4873

 

  • 开始epoch:

  • 第0个epoch:

  • 第10个epoch:

  • 结束epoch:

6805.64

0.7378

0.4873

 

embedding_size==96:

实验结果:  总体来说和64个epoch是可比的

loss: 5442.47

HR: 0.7362

ndcg: 0.4880

 

  • 开始epoch:

  • 第0个epoch:

  • 第10个epoch:

  • 最后epoch:

​​​​​​​

5442.47

0.7362

0.4880

 

 

embedding_size==132:

实验结果:

明显感觉到训练一个epoch的时间变长了

  • 开始epoch:

  • 第0个epoch:

  • 最后epoch:

 

 

实验七: GCN去掉参数, 去掉损失函数, 改LightGCN

实验结果: 比embedding-size之前的魔改要好, 但是比原本的GCN要差

​​​​​​​最后一个train loss: 22453.94

HR: 0.7177

NDCG: 0.4722

 

  • 画图:

​​​​​​​

  • 开始epoch:

  • 第0个epoch:

  • 第10个epoch:

  • 第20个epoch:

  • 第30个epoch:

  • 第40个epoch:

  • 第50个epoch:

  • 第60个epoch:

  • 第70个epoch:

  • 第80个epoch:

  • 第90个epoch:

  • 第100个epoch:

  • 最后epoch:

​​​​​​​22453.94

0.7177

0.4722

 

实验八: 上一个LightGCN的基础上:  embedding_size:64

实验结果:取得了目前为止所有模型最好的效果

 

  • 开始epoch:

  • 第0个epoch:

  • 第10个epoch:

  • 最后epoch:

​​​​​​​​​​​​​​

7214.93

0.7359

0.5002

 

增补实验:将最初的GCN模型:  1.设置为3层,  2.将embedding_size由4改为64

实验结果: 和最好的LightGCN  HR可比,  ndcg差了 

  • 最后epoch:

7643.53

0.7355

0.4905 

 

增补实验:将最初的GCN模型:  1.还原为1层(初始设置),  2.将embedding_size由4改为64

实验结果: 和上面的结果对比, 层数层加结果会明显变好

 

9436.05

0.7297

0.4758

 

(以下为最初始的GCN没有任何改动:  层数为一, embedding_size为4)

实验结果:   目前看embedding_size的大小设置 对结果的影响还是比较大, 一个可能的原因是两次的embedding_size的大小相差太大了

34623.57

0.7238

0.4694

おすすめ

転載: blog.csdn.net/weiwei935707936/article/details/109688711