随即指出了最关键的问题:“但你构建的这两个结构却是等价的,这里存在一个巨大的问题,如果两者本身就是等价的,为什么以复杂的形态训练效果会好,而简单的情况训练效果则会差呢?”
“这不数学。”席尔瓦给孟繁岐的想法下了一个结论。
这里面从数学逻辑上来说,存在一个套娃一样的悖论。
那就是有强烈意义的操作,两个分支数学上就合并不了,至于没用的操作最开始就在数学上等价,没必要拆开。
“网络结构的分支合并是没有办法越过非线性算子的,如果越过,则不能合并对吧。”戴密斯如此抽丝剥茧道。
网络结构的重参数化,最终目的是要得出与合并之前一样的运算结果,因此非线性的激活函数是没法包含在残差里的,否则就没法合并。
比如最常用的激活函数,ReLU,其实说白了就是保留所有大于0的数字,小于0的数字归零。
“这个非线性函数操作必须在分支合并之外,而不可以在分支合并之内。”
这个很好理解,假设一个原本的数字x是1,而他F(x)运算之后得出的结果是-2。
那么ReLU(F(x))+ x,和ReLU(F(x)+ x)的结果是完全不同的。
前者为0+1,后者为ReLU(-2+1)=0。
本小章还未完,请点击下一页继续阅读后面精彩内容!
所有的可合并分支,必须不含有非线性激活算子,才能够满足结合律和分配率。
但问题又来了,如果构造出来的几个分支都可以等价转换为一个,那为什么不从一开始就只训这一个分支呢?这不是快很多吗?
最后的效果为什么会不一样呢?
这从直觉上和数学上都是不大合理的事情。
这不就相当于小学数学分开算吗?
2X拆成X+X去训练,这怎么会有区别呢?
“我们不能这么去想,残差链接的想法也没有脱离线性变换,也只是加了一个相同形状的张量x而已呀。”孟繁岐自己也不知道具体的原理,这个世界上没人能解释得清楚。
“但是残差链接在你的实际应用当中,是跨越了非线性激活函数的,你的公式看上去很简单,但代码里却很复杂。”戴密斯无情地指出了这个说法的问题所在。
“那理论上说,是不是3x3的卷积核一定好过1x1的卷积?只要九宫格外面的八个数字都是0,那么3x3的卷积核其实就变成了一个1x1的卷积,因为外面8个数字不参与运算。”
孟繁岐想了想,又换了一个例子来尝试证明。
“呃...好像确实是这个道理。”
就好像有某种物品,一定好过没有,因为再不济你也可以把它扔掉嘛,这样你现在就也没有这个东西,大家都一样了。
“那为什么我这里结果显示,同一个位置上面,1x1 + 3x3的性能却明显好于3x3 + 3x3,也就是说一个强结构加一个弱结构好于两个强结构相加,这难道不奇怪吗?”
“而且,批归一化虽然推理时是线性的,但训练时其实还是非线性的,也就是说即便没有专门的非线性函数,这种可重构的结构设计,多个分支内在训练的时候仍旧是具备非线性能力的。”
理论很美好,但实验结果很骨感。
即便席尔瓦和戴密斯的数学再扎实,也终究没法解释孟繁岐获得了提升的实验结果。
两个人能做的也只有喃喃自语同一句话。
这特么根本不数学啊!