RePr论文复现遇到的问题
Link:
所谓下论文如山倒,读论文如抽丝,复现就是各种问题如山倒。
写完代码试了试,结果一坨X,目前是真没有论文中那么好看的曲线,而且prune的过程中都是比较喜欢先干第一层(底层特征)…头疼。
前同事又给了一个复现的链接:
Link这里面说的两个问题我自然也都遇到了。当然,这个实现版本貌似也还是有问题。
先把问题记录下来再说吧,
- 首先就是null space是不一定保证有的。比如第一层如果用3x3的conv,拍平了就是32x(3x3x3)的尺寸。这个找不到null space,那么怎么重新初始化?我是第一层直接换成5x5的filter先把这个问题绕过去了。链接中的实现是干脆重新随机化,实现作者从论文作者那里得到的是回答是,放松条件,不用严格正交,差不多就可以。
- 另外一个问题:filter的维度是不一样的,即使第一层换成了5x5,第一层每个filter也不过是5x5x3=75,后面几层就是32x3x3=288。这两层算出来的正交值根本就不在同一个维度级别上,脑壳疼的问题来了:越高维的空间,向量越容易正交,所以,这两层的inter-filter orthogonality可以说不在一个量纲上,直接拿来比较是不是有点欺负人?按照我自己的试验结果,一直都是优先prune第一层,毕竟第一层维度低、正交难度大。
- 上面链接中的实现,在https://github.com/siahuat0727/RePr/blob/4fa1b8d30da1d9f88ccc29fe3ab1711811ef093d/main.py#L148代码中,按照论文中的公式,如果我没有理解错误的话,是需要求一个绝对值的。两个矩阵乘完后,实际上就是每个filter对其他filter夹角的cosine值,所以绝对值是符合定义的。不过我在加了绝对值后,这个实现也出现了大量裁剪第一层的情况,也是脑阔疼。
先记录到这里,得先解决ranking不科学的问题,屁颠屁颠跑去剪一堆底层特征,肯定是有问题的。或者,我先用论文中greedy Oracle的方法看看。