xiuqhou / Relation-DETR

[ECCV2024 Oral] Official implementation of the paper "Relation DETR: Exploring Explicit Position Relation Prior for Object Detection"
Apache License 2.0
90 stars 6 forks source link

NoneZeroRelu #10

Closed billbliss3 closed 1 month ago

billbliss3 commented 1 month ago

Question

您好, 在论文中您提到将relation的结果保证为正值,防止在exp之后的梯度消失问题。 但是我发现工程代码中,您在后续的代码整理中,将这个去除了。

请问这个trick是关键性的还是辅助性的?

补充信息

No response

xiuqhou commented 1 month ago

论文中公式5的操作其实并没有去掉,只是把实现方式从NonZeroReLU换成了ReLU,以防FP16训练报错。

原本NonZeroReLU中阈值eps=1e-6,但FP16情况下1e-6会数值溢出,所以在 https://github.com/xiuqhou/Relation-DETR/commit/937ce08b03a5a99fc2b149257c4a7aa61259e83a 提交中把它换成了ReLU,这时eps=0。修改前后对模型性能其实没影响。

billbliss3 commented 1 month ago

论文中公式5的操作其实并没有去掉,只是把实现方式从NonZeroReLU换成了ReLU,以防FP16训练报错。

原本NonZeroReLU中阈值eps=1e-6,但FP16情况下1e-6会数值溢出,所以在 937ce08 提交中把它换成了ReLU,这时eps=0。修改前后对模型性能其实没影响。

非常感谢您的解答。 其实我一直有个小疑问哈。为什么eps可以帮助exp在0附近的梯度消失问题。 或者换个说法,exp(x)的导数是exp(x),导数在0附近约等于exp(0)=1。咱们为什么说会有梯度消失的问题。

再次感谢作者的耐心解答。

xiuqhou commented 1 month ago

感谢提问,exp(x)梯度消失问题并不是发生于0附近,而是发生在负值区域。当x越接近 $-\infty$ ,梯度exp就越接近0。所以我们设置了一个阈值,让x值不至于太小,阈值设置为0(最初设置的1e-6)也没有什么特殊的考虑。

billbliss3 commented 1 month ago

多谢作者的解答