zhouhaoyi / Informer2020

The GitHub repository for the paper "Informer" accepted by AAAI 2021.
Apache License 2.0
5.24k stars 1.1k forks source link

关于代码V.cumsum(dim=-2)累加的问题,我认为缺少累加后的平均操作,因此导致特征图分布差异很大,可能是训练不稳定和结果不好的原因。 #633

Open PowerFour4 opened 2 months ago

PowerFour4 commented 2 months ago

关于attn.py下ProbAttention._get_initial_context方法下V.cumsum累加的问题,我认为这里缺少一步累加后的平均操作,因此导致结果特征图分布差异很大。 具体原因如下: decoder中,对于每一个Q都考虑其自身和以前的时间步的信息来满足因果关系和防止信息泄露,因此需要mask,而论文中提到的ProbSparceAtten认为有些Q是Lazy的也就是接近均匀分布,基于这个假设mask后的lazy的Q应当是以前所有时间步的V的平均而不应该是累加。 我也debug看了特征图的确会出现lazy的Q对应的特征行注意力计算后达到几十的数量级,而active的Q的结果只在零点几的数量级。这样导致特征图分布极不平衡,我认为会损害训练稳定性和性能。

因此, 对于该行代码 contex = V.cumsum(dim=-2) 应该修改为 contex = V.cumsum(dim=-2) row_sum = torch.arange(1, V.shape[-2]+1)[None, None, :, None].to(V.device) # (1, 1, L_V, 1) contex = contex/row_sum 来保证初始化的contex分布一致,不会随着行数的增加数值尺度变大。 作者您好,如果您看到此issue,希望尽快回复,谢谢。