PA-DA
PA-DA copied to clipboard
关于计算DA阶段的梯度
作者您好,最近您的代码有部分我理解的不是很清楚; 即关于代码中求解Grad_norm的部分,您代码中是否没有使用求导数的方式得到对应的Samples权重? with torch.no_grad(): probs = F.softmax(logits, dim=1) one_hot_targets = F.one_hot(targets, num_classes=args.num_classes) grad_norm = (torch.norm(probs - one_hot_targets, dim=-1).detach().cpu().numpy()) loss = loss_per_sample.mean() # mean loss to backward ? 还有一个问题就是,如果是回归问题,这里应该如何进行修正呢? 我在IS有看见您的Issue,请问您清楚如何使用pytorh转换您询问的该代码吗?
最近拜读您的代码以及IS代码有这样的一些困惑,期待您的解答! 谢谢!
您好,感谢对我们工作的关注,以下是关于上述问题的回复:
- 关于Samples权重,我理解是每个数据的重要性。这里由于当时各种深度学习框架并不支持求解每个样本的梯度,只能得到每个batch的梯度,如果使用循环求导计算开销太大,所以我们采用了一种近似的方法来估计每个样本梯度的上界,具体可以参考论文3.3小节的介绍,以及文献[25] Not all samples are created equal: Deep learning with importance sampling.
- 因为这里的估计方法是使用模型输出关于最后一层的导数来作为近似值,所以目前来看,如果是回归问题依然可以用这种方式来近似每个样本的重要性,但是不知道效果如何,需要实验测试
- 关于那部分Keras代码的转换问题,最后我也没找到解决方案。但我发现在RHO-Loss中提供了很多相关工作的PyTorch实现代码,建议参考这个Repo看看
如果还有其它需要帮助的地方,也欢迎随时沟通交流。