Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

作者您好。关于epoch的问题想要咨询一下您。 #1

Closed
BlueGhostZ opened this issue Sep 10, 2021 · 4 comments
Closed

作者您好。关于epoch的问题想要咨询一下您。 #1

BlueGhostZ opened this issue Sep 10, 2021 · 4 comments

Comments

@BlueGhostZ
Copy link

BlueGhostZ commented Sep 10, 2021

作者您好。我运行了你开源的代码,有一些疑惑想要咨询一下您。
1、我在Yelp数据集上运行了GMF+T-CE模型,具体的参数设置是:batch_size=1024, dataset='yelp', drop_rate=0.2, dropout=0.0, epochs=10, eval_freq=2000, exponent=1, factor_num=32, gpu='3', lr=0.001, model='GMF', num_gradual=30000, num_layers=3, num_ng=1, out=True, top_k=[50, 100],这些都是默认的设置,我仅仅改变了训练次数epoch,即epoch =[10, 20, 30],训练10个epoch时,Recall=[0.0875, 0.1452], NDCG=[0.0357,0.0487]; 训练20个epoch时,Recall=[0.0941,0.1550], NDCG=[0.0382,0.0520];训练30个epoch时,Recall=[0.1021,0.1649], NDCG=[0.0420,0.0562]。可以看到性能还是一直在大幅上升状态,即训练10个epoch并没有让模型达到收敛状态。我观察了论文中实验结果表3,其中的实验结果与epoch=10时的基本一致,这样的对比是否有失公允呢?

2、虽然代码中设置了固定的随机数种子,但每次实验结果似乎都不同,并且和论文中的结果对不上,是因为多次取平均的结果吗?

非常感谢您在百忙之中阅读我的问题,期待您的回复。 @WenjieWWJ

@WenjieWWJ
Copy link
Owner

hi, 您好,感谢关注。

  1. 我们是用noisy validation set来停model training,我们发现在validation上的eval loss还是有噪声的,baseline很早就会在validation上loss不降了,为了公平保证一致的训练数目取了10个epoch停止。另外发现T-CE对于validation上的去噪会有作用,可能是noise validation集和test集分布不一致引起的,后续会继续分析一下。我们做过不看validation集多训练epoch比较performance的实验,T-CE、R-CE对比CE loss同样有优势。
  2. 可能在不同gpu上performance略有差别?我记得之前的实验variance比较小,基本一致;同一台server每次run是一样的。

@BlueGhostZ
Copy link
Author

非常感谢您的回复。后续我设置更多的训练次数(max_epoch=1000),T-CE的结果是Recall:0.1249-0.1945,NDCG:0.0522-0.0679,而基本的CE的结果是Recall:0.1080-0.1750,NDCG:0.0431-0.0580。我还有一点小的疑问想咨询一下作者。通过完整的运行日志,我发现模型在验证集上的损失明显高于在训练集上的损失。具体来说,训练集上的损失非常接近于0,而在验证集上的损失却可以高达三四百,由于我对这方面了解不多,想请教一下作者为什么会有这么大的差别。
此外,随着模型训练的迭代次数增加,模型在验证集上的损失开始逐步上升。即便是T-CE,在训练初期验证损失会稳定在30左右,而在500多epoch开始验证损失便开始变得不稳定起来(在20~90之间波动)随后越来越高,如下图所示,但模型在测试集上的性能还在提升,请问为什么会有这种现象?
非常感谢您在百忙之中阅读我的问题,期待您的回复。 @WenjieWWJ

Figure_1

@ksboy
Copy link

ksboy commented Nov 29, 2021

@BlueGhostZ @WenjieWWJ
我这边遇到一个相关的问题:R-CE Loss训练时,训练机集loss 在逐渐下降,但是验证集上的效果会越来越差,无法拟合,您觉得这应该是什么原因?
另外,我看到 R-CE Loss的图像 是非凸函数,这是否会导致模型无法拟合呢?
image

@WenjieWWJ
Copy link
Owner

非常抱歉之前没有注意到这个issue的后续进展。

  • “随着模型训练的迭代次数增加,模型在验证集上的损失开始逐步上升” 我猜测原因很可能是模型已经过拟合了,验证集上不管是noisy interaction和clean interaction都有很多被预测错了。
  • “R-CE Loss的图像 是非凸函数”。这个在设计这个loss的时候,有一个很intuitive的idea是希望loss太大的时候,这个R-CE能做到翻转label的效果(对于false-positive interaction做到预测为负才能降低loss),但这会有他是非凸函数不好优化的问题。所以我在R-CE计算的时候block weights上的梯度,仅仅根据预测值来选weight,所以参数的梯度还是根据CE那边算的,预测值仅影响了样本的权重。
    希望这些想法有所帮助,感谢提问。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants