将对近年来的SSL-GNN做出一个 整体分析,基于作者的开源代码
GMI的损失不像DGI下降的那么快,结果也一般。 同时缺点很明显:GPU增加,时间变慢,epoch增加,精度没增加,这里双重DGI损失,没有采用 双判别器,采用 负采样+soft_plus
训练时间很长,epoch还是很大,结果也不尽人意 这里我额外做了两个实验,分别 对文章 所提出的额外的两个损失进行了消融, 首先 不考虑重构 GPU减小 其次,再次不考虑 h 和 其邻居(本文最大创新),这样就变成了和DGI损失类似,GPU当256时候在11G之下,和DGI作者当时在paper中报导的类似。 但是收敛特别慢,结果也很差。
Pubmed 的GPU -usage还是很大。 那就看效果吧。。。 还是一样~,没有达到论文acc
原论文里面 声称自己 citeseer 和 pubmed 的 维度都是 512, 且作者只是在 reddit 和 ppi 时候 采用了 graphsage进行 采样。且 GPU 是Tesla P40— 24G。 这篇方法 无疑是 有问题的, 后续的很多文章 都是在 computers等amazon的数据集上都是OOM,也有见过pubmed 报OOM。
自己方法本来就有问题,还要踩一脚DGI,况且DGI 只是改变encoder 并不是什么复杂的事,GMI根本无法扩展。像这么胆大的 作者简直了, 还有勇气开源,,lol,,, 不知道 是不是自己之前的code有什么tricks,但开源的确实有很大问题, 貌似 西交这个 作者 把这个扩展成了期刊。 如果有人可以复现~ 还请告知 , 谢谢~
这里 根据 sample_times 进行采样, 代码里面和原文 保持一致,采样5个负样本,不对,这里是 通过随机randint 产生的samole_list是 包含五组,通过下标(randnum)。每一组都是 2708个index。 这里和dgi的方式本质是一致的,同时通过判断,确认 打乱的数组 节点下标一定和之前不一样。(比dgi通过 np.random.permutation 打乱后 有可能 当前节点index还是一样) 这里计算损失确实 和原文一致,采用了JS散度计算,目标函数和DIM中的JS损失 的一样 感兴趣的同学 可以去看 DIM 的原文,很经典的 互信息无监督 cv表征学习的文章, 其中有太多 散度等知识,之前看过,每次都是晕晕的 DIM 分析
代码中的 这个 mi_loss_jsd 就是计算出 js的MI, 由于 要最大化 因此 目标函数 = -1* 论文中的11(MI) ,因此 这里code是 两项相加 这里负样本得分传进来是 5组 两次 mean 求得最终损失 DIM 损失 JSD-MI 计算 输入是 正样本对 的得分 + 负样本对 的得分 res_mi_pos+res_mi_neg 计算节点h和s res_local_pos+res_local_neg 计算 节点h和原始x 判别器修改: h_c h_pl 是正样本对 12708256 127081433. sc_1是正样本对得分 这里 从 h_pl(节点中)中通过下标选出 一组 负样本 h_mi 127081433, 再次计算 负样本和 正样本的得分。返回的 sc_1 正样本。 sc_2是一个包含5个 得分的 随机采样负样本和正样本的得分,相当于是把 dgi 的 负样本得分 计算了五次,这样肯定会增大时间