关于代码的2个小问题
Closed this issue · 7 comments
ShellingFord221 commented
你好,看了下代码,有2个小问题:
- In bag_attention.py, line 59~60, how to calculate cosine_similarity between two tensors with different size ((bag, H, B) and (B, 1, H, B))? I try myself that it did work, but I don't know why could this happen (and also what's the detailed calculation process).
- 在计算CIL的时候,正例是instance ~ augmented instance, 负例是instance ~ other bag representation,看上去跟传统CL的排他性略有不同(即除了正例外都是负例),能理解是DS的数据中有噪音导致无法实现,但对于效果或者模型的训练会不会有什么影响?想知道作者在这方面有什么看法。谢谢!
antct commented
- 第一个问题你可以看下torch的源码,在实现的过程中主要其他维度都是对齐,只在你需要计算的维度上进行相似度计算。
- 对,和标准的CL是有一些不同。主要还是处于噪声的考虑,因为如果完全选取其他随机样本,噪声会很大。而bag rep可以看成是一个初步去噪后的表征,拿这个来做负例效果会更好,训练也会更稳定。
ShellingFord221 commented
还有bag_attention.pay中,line 91, bag_size == 0,想问下为什么会有bag的size是0的情况?这样的情况为什么还会得到bag_rep?
antct commented
这个bag_size等于0,实际的意思就是不会去做sample采样。
比如一个bag有100个instance,另一个有5个instance。
如果是bag_size等于0的情况,那么第一个bag_rep将由100个instance的rep聚合而成,第二个bag_rep由5个instance的rep聚合而成。
而bag_size等于k(假设为10),100个会降采样到10个instance,5个会过采样的10个。
这个详细的你可以参照opennre的代码,bag_size=k的时候,每个bag包含的instance数目是固定的,而且不会出现过大的bag,在计算和显存开销上都比较合适。
ShellingFord221 commented
所以这个是针对有的bag里instance太多,有的太少的是吗?过采样是简单repeat,降采样是随机选取的吗?(因为我只看到bag_attention.py, line 119这里rep给view了一下)谢谢~
antct commented
是的,因为一个bag包含的instance可能会很多,如果不做降采样,一个bag输入的话显存开销会很大,是随机选取的。
ShellingFord221 commented
想问下在bag_attention.py中,line 105~108实现的貌似是at-least-one assumption,不是论文中提到的attention的方法?
antct commented
是的,那部分没实现。最终调用也不会跑那段代码。