alibaba-edu/simple-effective-text-matching

Question about the code of "Augmented Residual Connections"

Closed this issue · 3 comments

image
如果block数量大于3,比如代码实现第四个block时encoder的输入是前三个block输出之和,而不是公式中的前两个之和。

抱歉这么晚才回复,程序代码中写的确实是前两个block的输出之和:

a = self.connection(a, res_a, i)
b = self.connection(b, res_b, i)

其中ab是n-1层的输出,res_ares_b是n-2层的输出。

抱歉这么晚才回复,程序代码中写的确实是前两个block的输出之和:

a = self.connection(a, res_a, i)
b = self.connection(b, res_b, i)

其中ab是n-1层的输出,res_ares_b是n-2层的输出。

抱歉打扰您,我从代码上看res_ares_b应该是n-1层的输入,n-1层的输入中包含n-2层的输出
i=0时,res_ares_b就是是embedding;i=1时,res_ares_bi=2时,res_ares_b,这时还是符合论文中的描述的,但当i=3时,根据connection的处理,res_ares_b和论文中公式不符,也就是说当堆叠三层以上时,代码表现和论文中描述不符。

我明白您的意思了。您的理解大体上是正确的,感谢您的细心观察和反馈👍🏻

  1. 好在论文的核心结果(除了robustness checks)都是在block数小于等于3(也就是i<=2)的情况下得到的,不影响论文的核心结果和结论;
  2. 在robustness checks中,对应的结果可能会受到影响,我稍后按论文描述重做一下4-5层的robustness checks,结果会发上来给大家参考,也可以看出哪一种是更好的;
  3. 这里代码的实现不完全是o1+o2+o3,实际上是(o1+o2)/2 + o3/sqrt(2),可以认为是(o3+i3)/sqrt(2),即前一层输入输出之和,这倒是和经典的residual connection的表现形式一致,也和augmented residual这个称呼一致了……