Question about the code of "Augmented Residual Connections"
Closed this issue · 3 comments
Yaozeng commented
hitvoice commented
抱歉这么晚才回复,程序代码中写的确实是前两个block的输出之和:
a = self.connection(a, res_a, i)
b = self.connection(b, res_b, i)
其中a
、b
是n-1层的输出,res_a
、res_b
是n-2层的输出。
Yaozeng commented
抱歉这么晚才回复,程序代码中写的确实是前两个block的输出之和:
a = self.connection(a, res_a, i) b = self.connection(b, res_b, i)其中
a
、b
是n-1层的输出,res_a
、res_b
是n-2层的输出。
抱歉打扰您,我从代码上看res_a
、res_b
应该是n-1层的输入,n-1层的输入中包含n-2层的输出
i=0
时,res_a
、res_b
就是是embedding;i=1
时,res_a
、res_b
是 ;i=2
时,res_a
、res_b
是,这时还是符合论文中的描述的,但当i=3
时,根据connection的处理,res_a
、res_b
是 和论文中公式不符,也就是说当堆叠三层以上时,代码表现和论文中描述不符。
hitvoice commented
我明白您的意思了。您的理解大体上是正确的,感谢您的细心观察和反馈👍🏻
- 好在论文的核心结果(除了robustness checks)都是在block数小于等于3(也就是i<=2)的情况下得到的,不影响论文的核心结果和结论;
- 在robustness checks中,对应的结果可能会受到影响,我稍后按论文描述重做一下4-5层的robustness checks,结果会发上来给大家参考,也可以看出哪一种是更好的;
- 这里代码的实现不完全是o1+o2+o3,实际上是(o1+o2)/2 + o3/sqrt(2),可以认为是(o3+i3)/sqrt(2),即前一层输入输出之和,这倒是和经典的residual connection的表现形式一致,也和augmented residual这个称呼一致了……