ruotianluo / ImageCaptioning.pytorch

I decide to sync up this repo and self-critical.pytorch. (The old master is in old master branch for archive)
MIT License
1.44k stars 412 forks source link

关于config的许多疑问 #182

Open concrettojava opened 1 year ago

concrettojava commented 1 year ago

1.为什么代码中存储模型和验证指标都是按Iteration来统计,这样不是受到BatchSize影响很大吗,为什么不选择epoch?是因为我用的Flickr8k数据集比较小而MsCOCO比较大吗?

2.config对于一个caption模型分为base,long,sc,nsc,long指的是大epoch,sc我理解的是self-critical,但是nsc是什么,我看到里面有添加structure_loss,这是pytorch里面的吗,还有structure_loss_type: new_self_critical,我不是很理解structure_loss是干什么的,到底是另一种损失的统计方法还是强化学习的内容,这是一种很有意义的trick吗,我从没有接触过。

3.如果一共50轮,30轮开始强化学习,那么到底是50轮深度学习+20轮强化,还是30+20?

3.在base_sc的config中,学习率衰减去掉了,这是为什么?学习率会影响强化学习吗?

4.fc的参考是show and tell吗?为什么只用到resnet101的平均特征,12048,原文中应该是77*2048吧。

concrettojava commented 1 year ago

2.nsc好像是new self-critical,学习率小了一个数量级,去掉了学习率衰减,用了结构损失。 4.写错了,1x2048和7x7*2048

5.如果我有一个训练好的30轮的模型,我设置最大50轮,默认在30轮基础上继续训练,学习率衰减会在20轮期间从最大降至最小吗,还是从30轮的开始,继续衰减,那么学习率就会很小。我是否应该重新设置学习率和衰减率

6.为什么Transformer中不设定scheduled_sampling?

7.为什么默认的Batch_size都很小,大多数模型我只用到5个g的显存,大Batch会影响读取效率吗,还是说小Batch效果更好?

ruotianluo commented 1 year ago
  1. epoch number固定就好了。一个好处是,如果你模型还没train完一个epoch就挂了(我们学校的集群一个job只能4个小时),就白train了,所以按照iteration就可以更频繁的save。
  2. yes new self critical. 学习率其实好像没什么区别吧我记得。主要是在于reinforce baseline 怎么定义。(可以无视structure loss的部分,跟structure loss关系没有那么大)
  3. 30 + 20.
  4. emmm,这是原来的self critical paper的设定。肯定会影响,但是这其实主要是就是hyper parameter tuning。
  5. fc是self critical paper里面的fc。
  6. 都可以,我记得我的long的config就是这样的。
  7. emmm,transformer里面加scheduled sampling比较麻烦,在mle阶段transformer是可以parallel training的,加了scheduledsampling就不能parallel training。
  8. 因为我们学校机器bottleneck在input pipeline,所以换大batch有时候会更慢。大小batch我记得我好像也试过,但是后来就不试了,懒得调。