geyingli / unif

基于 Tensorflow,仿 Scikit-Learn 设计的深度学习自然语言处理框架。支持 40 余种模型类,涵盖语言模型、文本分类、NER、MRC、知识蒸馏等各个领域
Apache License 2.0
114 stars 27 forks source link

smart对抗训练 #11

Open LSX-Sneakerprogrammer opened 2 years ago

LSX-Sneakerprogrammer commented 2 years ago

作者您好!最近读了关于您写的对抗训练部分代码,非常的感兴趣,同时对smart算法的部分有一点疑惑,

runs at the start of each epoch

self.init_tilda_op = tilda.assign(param)

runs at the end of each epoch

self.update_tilda_op = tilda.assign( (1 - tilda_beta) param + tilda_beta tilda)

在这段代码中,tilda_embedding将会在每个epoch初始时更新为当前word embedding的值,在每个epoch结束时使用动量再次更新。那么每个epoch开始时的更新是否会覆盖掉上一个epoch结束时的更新呢?如果是的话,感觉最后的动量更新没有起到什么作用呀。

希望您抽时间能够帮助解答这个小小的疑惑,非常感谢!

geyingli commented 2 years ago

您好!近期太忙,工作积压太多,望将来能尽早回复你

geyingli commented 2 years ago

好的,我回顾了一下这个陈年项目,可以解答这个问题。

可以从uf/task/base.py文件中检索关键词“self.init_tilda_op”看到,这个op实际上在整个训练流程里,只在训练开始时作为初始化运行一次,并不是每个epoch开头都运行一次。这里的“runs at the start of each epoch”是我注释错了,下个版本我会纠正过来,改为“runs at the start of traning”。

谢谢你的观察~

LSX-Sneakerprogrammer commented 2 years ago

好的,我回顾了一下这个陈年项目,可以解答这个问题。

可以从uf/task/base.py文件中检索关键词“self.init_tilda_op”看到,这个op实际上在整个训练流程里,只在训练开始时作为初始化运行一次,并不是每个epoch开头都运行一次。这里的“runs at the start of each epoch”是我注释错了,下个版本我会纠正过来,改为“runs at the start of traning”。

谢谢你的观察~

谢谢你的解答~