Deep Learning Experiments and Claims

这几年来, 学习到的最多的是对待 research 的态度. 因此说说写 paper 和做实验的体会.

实验与 claims

实验是为了证明或强化文章里给出的 claim / hypothesis 的.

Ross ICCV 2019 tutorial 最后谈了谈怎么写 paper. 第126页说, 文章中所有的 claim, 理想情况下都应该要么是文献中已有的 claim, 要么是有实验能够证明的 claim.

举个例子, BatchNorm paper 的实验可以 claim 很多东西, 包括 BatchNorm 让结果很好, 对初始化不敏感, 大 learning rate 也不炸. 但是文章说 BatchNorm "reduce internal covariate shift", 就遭到了一些人的质疑. 如著名的 Ali Rahimi Neurips 2017 test-of-time award presentation (B站) 里的五连问 (第17分钟). BatchNorm paper 中把 "internal covariate shift" 粗略定义为 feature distribution 的变化, 但唯一一个与此相关的实验是 Fig.1(b)(c). 虽然实验是合理的, 但结果确实不算不太显著. 甚至 GroupNorm paper 的 Fig.6 展示的结果可能都更强.

Ross 在 tutorial 中的建议是: 如果一个 claim 没有得到实验的有力支持, 在表述上可以弱化一些, 例如写 "intuitively/hypothetically, 如何如何...".

claim 结果 vs. claim 原理

类似于这个 BatchNorm 的例子, 很多 paper 中一个常见的问题是, 实验只证明了结果好, 文字里却讲了个故事并 overclaim 了结果好的原理.

这里的 claim 并不仅仅指明显的"We claim ...". 还可以有其他表现形式:

  • 文中任何 statements 都可以认为是 claim. 作者有时容易把自己猜想的原理 (speculated stories) 当做事实来陈述.
  • 作者容易把自己的 intuition 当做方法最后 work 的原理. 虽然 intuition 是有用的, 但是写作时, 心里要清楚哪些发现是有证据的, 哪些是凭感觉的.
  • 起名字的时候, 用词容易使用一些 suggestive language, 将原理暗示给读者. "attention" 就是一个例子: 它给人一种模型会主动"关注"重要的 feature 的感觉, 但是到底是否如此, 是需要实验证明的. 毕竟它说到底还是在做矩阵乘法.

Troubling Trends in Machine Learning Scholarship 的 talk 里也指出了这些问题.

由于整个领域还是以实验驱动的, 对原理的研究不深, 所以原理常常都是 speculation / intuition, 在写作时容易 overclaim. 因此要注意弱化表述.

从 claim 结果到 claim 原理

从结果深入到原理, 对应的实验大约有这样的几类:

  1. System-level 实验, 就是直接跟已有的结果比. 这类实验可以没有控制变量: 两个非常不同的方法 (e.g. SVM vs. CNN) 照样可以在尽量相似的设定下比较结果. 它证明的 claim 是"这整个系统能够达到好的性能".

  2. Ablations, 也即控制变量, 用来证明 "系统由于这个方法(而不是其他因素)性能得到提高". 这就需要严格控制其他因素.

  3. 深入分析, 试图证明 "为什么某种方法能够提高性能". 但是在 deep learning 中, 由于理论工具的缺乏, 这类实验往往不容易设计.

如果一篇论文提出了全新的系统, 结果还特别好 (例如 AlexNet, Bert, AlphaGo 这种 breakthrough 级别), 那么即使仅有 system-level 的实验也没关系: 以后总会有别人去更深入的研究的. Yann LeCun 针对 Ali Rahimi 的 presentation 曾经说过, 历史上 engineering 往往比 science 快一步, 很多科技的发展过程都是先做 work 了再去研究为什么的.

另一个极端是, 如果一篇论文对结果毫无提高, 但是通过详细的分析帮助读者理解了更多原理, 或提供了理解原理的视角和工具, 那同样也是很好的工作.

当然, 大部分工作既没有 breakthrough 级别的结果, 也很难给出令人信服的分析(毕竟炼丹), 因此往往需要多种类型的实验结合: 有什么样的实验, 决定了论文能做出什么 claim, 进一步才能 justify 论文的价值.

举个例子, 每个人都熟悉的 ResNet paper, 同样的模型, 文章可能有下面几种不同写法, 对应不同的实验和 claims:

  1. 我们设计了一类 VGG 的变种, 有五个模型叫做 "MSRANet{18,34,50,101,152}", claim 它们达到了 SOTA. 实验内容是跟以前的 SOTA 比一比.

    其实 AlexNet 文章就是这么写的, 但是 AlexNet 的 SOTA 结果本身就是一个巨大的 breakthrough. 如果 ResNet 也这么写, 影响力会小得多, 毕竟 SOTA 是短暂的. 说的不好听一点, 这个模型被下一个人拿过去改一改, 再换个名字成了新的 SOTA, 可能就没有人记得 "MSRANet" 了. ZF-Net 大概就是这么一个地位.

  2. 我们设计了包含 residual connection 的 "bottleneck block / basic block" 方法, 能够提高模型性能. 实验做一些 ablations, 确认了这个 claim.

    这个方法有一些能够自圆其说的 intuition, ablations 证明有效, 同时也能达到 SOTA. 这就类似于大多数的好 paper.

  3. 而 ResNet 原文的层次就更高一些了: 文章标题说的是 "residual learning", 内容强调的是 residual connection 对优化的好处. 其他的各种 block, ResNet-50, 只是测试这个 idea/claim 的手段.

    这个大 claim 对实验和分析的要求就更高了, 以至于 ResNet 没分析完, 到了 ResNet-v2 (pre-activation) 继续把这个故事讲了下去, 专门分析 residual connection 的重要性.

    最后, 实践证明 residual connection 确实是 deep learning 今天为止最重要的发明之一, 几乎统治了所有领域, CNN 和 Transformer 都离不开它. 这远比 ResNet-50 到底长什么样, 里面的 block 到底是什么要重要得多.

马后炮/Harking

人们一般希望探索结果背后的原理, 因为这是科学研究的本质, 也让科研工作更有价值. 这导致了上面提到的那种 overclaim 现象.

还有另一种现象, 俗称马后炮, 或 "Harking" (Hypothesizing After Results are Known). 也即先做实验, 在有结果之后"看图说话/强行解释", 找一个可以被这个实验证明的结论, 或可以解释实验结果的猜想/原理. 然而在写作时, 先 "We hypothesize/claim ...", 再"设计实验"证明自己的 hypothesis/claim.

"Harking" 这个词最早出现在心理学研究里. 在 deep learning 中也有对此的批评: HARK Side of Deep Learning. 它之所以是一种不太好的 research practice, 是因为它背离了科学研究的目标. 科学与迷信的一大区别, 是科学应当不仅能够解释已知, 还能够预测未知. 如果一个工作仅仅追求找到一个解释, 来与现有的少量实验结果兼容的话, 这个解释未必在其他实验中适用, 因此可能不是一个科学的结论.

然而, 如今 deep learning 是以实验为基础的科学. 其研究过程确实经常要先做实验, 看到结果, 才能提出猜想或决定下一步的实验. 因此马后炮行为一般都存在. 但是, 一个科学的马后炮研究者应当在制造出一个猜想或结论之后, 再去新的实验里尝试预测一下未知, 打一个马前炮.

一个我自己深有感触的例子, 是我参与的这篇 Feature Denoising for Improving Adversarial Robustness. 起初我们猜测 non-local 会帮助 adversarial training, 并很快得到了实验验证. 这时候, 一个中规中矩的 paper 写法就是 claim "non-local 对 adversarial training 有用", 实验就是有/无 non-local 的 ablations.

有意思的是, 我们的 claim 是 "denoising layers 对 adversarial training 有用". 这是一个更大的 claim, 而且其实是一个马后炮的结论, 因为它仅仅是 intuitively 能解释已有的实验结果: non-local 在传统 vision 里用作denoising, 而对抗样本的扰动可以看做为 noise.

为了支持这个更大的 claim, 我们要打几个马前炮, 用它去预测更多的实验:

  • 用 visualization 展示了 non-local 确实对 feature 有 denoise 的效果.
  • 使用了其他的 denoising layer (median pooling, mean pooling, bilateral filter), 来验证他们都比加普通的 conv layer 更有用.

这些实验是在有了 claim 之后, 专门为了验证这个 claim 而设计的实验. 它们的正面结果让我们对这个 claim 更有信心, 即便它最初是靠马后炮和直觉猜出来的. 从马后炮到马前炮, 是 researcher 的自我要求.

好的研究应当能经受时间和实践的检验, 因此一个好的研究者应自己先审视自己的 claim, 并真心的尝试用实验检验它们. 下次再详细写写怎么设计科学的实验.

Comments