We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于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,希望尽快回复,谢谢。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
关于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,希望尽快回复,谢谢。
The text was updated successfully, but these errors were encountered: