YimianDai / open-aff

code and trained models for "Attentional Feature Fusion"
729 stars 95 forks source link

请问AFF的代码中2 * F.broadcast_mul(x, wei) + 2 * F.broadcast_mul(residual, 1-wei) #13

Closed swjtulinxi closed 3 years ago

swjtulinxi commented 3 years ago

为什么要用2的方式,是为了防止数值太小梯度消失吗,,但为什么iAFF里面又不用2了呢

YimianDai commented 3 years ago

这个问题,我在另外一个 issue 已经回答过了,https://github.com/YimianDai/open-aff/issues/3

我没有想过「防止数值太小梯度消失」这回事。既然有了 batch normalization,我相信乘不乘 2 是不会有影响的。简单的说,就是为了保证跟 X + Y 一样,两者前面的系数总和为 (1 + 1 = 2),所以乘了一个 2。

至于 iAFF 没用,因为我不觉得乘不乘 2 会有什么影响,所以写得时候没注意这个。刚开始写代码的时候写得随意了,类的名称也没有好好取,跑完实验后才发现 params 里面跟代码里的名称绑死了,如果为了美化代码要改名称,那必须重跑实验。因为 GPU 资源有限,所以我就没重跑,现在的代码就是最初的样子,所以写得随意了些。。。