csqa icon indicating copy to clipboard operation
csqa copied to clipboard

想请教一下model.layers.AttentionMerge的原理

Open zhangjf-nlp opened this issue 3 years ago • 0 comments

您好,我看到您在csqa-leaderboard上的卓越的成效,叹服之余前来学习,在看到AttentionMerge的时候遇到了一点疑惑

其中在forward时,经过“attention_probs = keys @ self.query_ / math.sqrt(self.attention_size * query_var)”运算后,得到的attention_probs其shape为(B, L, 1),按我自己的理解是得到了该layer的query在输入序列上的attention分布

接下来的一步“attention_probs = F.softmax(attention_probs * mask, dim=1)”则正是我不解的地方:

  1. 如果参照不输入mask参数,即mask = torch.zeros_like(values),那么(attention_probs * mask)所得的则也为zeros,attention_probs的计算与输出无关了
  2. 如果输入了mask参数,即mask = (1 - mask.unsqueeze(-1).type(torch.float)) * -1000.,按我的理解此处输入的mask为0-1向量,按我理解其中-1000相当于-inf,则经此其中0变为了-inf、1变为了0,那么在经过(attention_probs * mask)后,所得向量只包含-inf、inf、0,也就是说attention_probs的计算只会通过分量的正负性影响最终结果,那么上一步中的“/ math.sqrt(attention_size * query_var)”是否就是多于之举呢

非常感谢能得到您的关注和教导

zhangjf-nlp avatar Oct 27 '20 15:10 zhangjf-nlp