目前进度

完成了批次训练的实现,已经能稳定地运行程序
训练结果在进行早停的情况下能够超过LPSI

存在问题

  • 可能是训练时间不够,在当前数据集上训练较少批次时,效果并没有显著改进
  • GCNSI的代码实现比较乱,现在暂时还不能跑起来除了karate之外的其他数据集,但karate并没有太大的参考价值
  • 我实现了GCNSI的评估标准,在不适用RNN的情况下,仅在karate上的结果相差不大,但是使用RNN似乎会让效果变差,这可能是RNN的集成的方法问题,目前有2种方案:
  1. result = GCN * alpha + RNN * (1-alpha)。通过比例调控这个值,问题是,二者训练的结果可能存在数值上不对等的问题,所以需要BatchNormalization;由于目前我的训练,反向传导和误差计算都是仅仅以cluster为单位,cluster之间的联动仅仅在evaluation阶段进行,所以需要确保训练时RNN的有效性,以及cluster间的数值统一。
  2. result = GCN * RNN。使用乘数因子而非偏置的形式,我使用了这种方法,效果似乎不佳,准备进一步常识第二种方法

关键问题

1. 效果为什么不好?原因?

我觉得现在距离理想效果也有很大差距,但是根据测试,仅仅是5k节点的数据集,LPSI的效果就没有那么好,我的方法相较LPSI有一定提升但不显著。

所以事实上baseline的效果有限。其次,目前的评判标准是对单个快照进行判断,我设想可以通过多个快照判断后取并集的方法进一步缩小检测的范围。

另外我的算法一开始在实现上也有问题,属于基础性的实现问题,目前硬性的bug基本已经解决。但是亟待解决的问题是,随着训练的进行,效果提升的不显著(或许可能是我还没有耐心等到1全部epoch执行完毕,这需要相当长的时间)。但是事实上,随着前几个批次的进行,损失函数的减小值就已经很小,仅仅是正则项在浮动,所以后续可能要想方法优化训练的过程,这里比较关键。

2. 目前解决的进度?

我通过实现批次训练使得RNN能够在理论上正确生效,但是实际上效果却不是很理想,所以后续需要重点研究如何让RNN起到正向的作用。

但我认为目前的关键点仍在GCN上,现在的结果是,训练的误差处于正常的训练曲线状态,但是效果没有明显改善,可能需要重新设计损失函数,或是对evaluation的方法上下功夫;

因为仅仅给出标签,不给出实际的源点,现在的情况属于自监督学习。而且实际源点的数量非常少,所以这个问题的分类也属于极度不平衡的情况,还需要再进一步的研究。

3. 之后要努力的方向?

  • 首先是尽量使得在使用GCN的情况下,能够在训练的过程中看到更显著的表现提升,目前的训练看起来有点像损失函数在下降,效果在绕圈圈。
  • 之后是探索RNN的使用方式,通过RNN训练得到的值一定程度上能体现出一个cluster的情况,只是需要一些机制确保数值稳定性,从而使得RNN发挥作用