【论文速读】高频分量有助于解释 CNN 的泛化

作者丨深度眸

来源丨机器学习算法工程师


本文从一篇 CVPR2020 Oral 论文 High Frequency Component Helps Explain the Generalization of Convolutional Neural Networks 切入,从数据高低频分布上探讨 CNN 泛化能力,通过 CNN 能够捕获人类无法感知的高频成分这一现象而对所提假设进行分析。作者认为,本文是 CV 领域从业者的一篇必读论文。 


摘要

每当我们训练完一个 CNN 模型进行推理时,一旦出现人类无法解释的现象就立刻指责 CNN 垃圾,说这都学不会?其实你可能冤枉它了,而本文试图为它进行辩护。

本文是 CVPR2020 Oral 论文,核心是从数据高低频分布上探讨 CNN 泛化能力,其注意到 CNN 具备捕获人类无法感知的高频成分能力,而这个现象可以用于 解释多种人类无法理解的假设,例如泛化能力、对抗样本鲁棒性等

本文其实没有提出一个具体的解决办法,主要是通过 CNN 能够捕获人类无法感知的高频成分这一现象而对所提假设进行分析。我个人觉得本文应该作为 CV 领域从业者的必读论文。

  • 论文名称:High-frequency Component Helps Explain the Generalization of Convolutional Neural Networks
  • 论文地址:https://arxiv.org/abs/1905.13545

一、论文思想

1.1 图片高低频分离

为了方便后面分析,先对图片的高低频分离过程进行说明 (如果看不懂也无所谓,不影响阅读,知道啥是高低频成分就可以了)。

<x,y> 表示样本对,x 是图片,y 是对应的标注,F(·) 表示 FT,F^-1 表示 IFT,z = F(x) 表示对样本 x 进行 FT,z 是 x 的频率分量,x = F^-1(z) 表示对 z 做 IFT。

而 t(·; r) 表示一个门限/阈值函数,该函数通过一个半径阈值,将频率分量 z 分成低频分量 z_l 和高频分量 z_h,该阈值函数具体如下:

其中 d((i,j), (c_i, c_j)) 表示当前位置 (i, j) 和中心位置 (c_i, c_j) 之间的距离,文中采用欧氏距离。注意在 FT 频谱图中靠近中心区域是低频分量,远离中心区域是高频分量。低频成分一般对应图片主要对比度信息,高频成分则对应边缘和像素锐变区域。

简单来说就是对一张 32x32 的图片进行 FT,输出也是 32x32 频谱图,其中越靠近中心越是低频成分,然后在 FT 频谱图中心设置一个半径为 r 的圆,圆内频谱分量保留,圈外其余分量置 0,再通过 IFT 得到重建图片,该图片即为仅保留低频成分的像素图。r 越大,圆内保留的成分越多,信息丢失越少,重建图片的信息越多。当 r 较小时大部分高频分量会被抛弃,重建图片会非常模糊。


1.2 初步实验分析

为引入本文论点,作者做了一个简单实验。首先用 CIFAR10 在训练集训练一个 resnet18 分类模型,接着在测试集上测试,此时可得到模型正确率。接着进一步通过 FT,把原图转换到频域,再用一个半径阈值 r=12,分离出高、低频分量,再对高、低频分量分别进行 IFT,即可得到高频重建图片和低频重建图片。然后,测试这两张图片,结果出现了一些非常奇怪的现象:模型对人眼看上去和原图差不多的低频图错误预测,反而正确预测了全黑的高频图。一个典型图片如下所示:

例如上图,左图是原始测试图,可见其大概率认为是 bird,但对低频成分重建图 (中间) 却几乎可以肯定是 airplane,而高频成分重建图 (右图) 却更大程度预测为 bird,这种现象在10k 张测试集中大概有 600 张。这种现象完全不符合人类的认知。


1.3 提出假设

针对上述不合常理的现象,作者提出了合理 假设人类只能感知低频分量,而 CNN 对低频和高频分量都可以感知,图示如下:

对于任何一个数据集,都应该包括 语义信息 (纹理信息或低频信息) 和 高频信息,只不过包括比例不定而已。并且,对于同一分布的数据集,其 语义分布和高频分布都应有自己的分布特性。可以简单认为对于同一个类别标注的数据集,假设该数据集收集自多个场景,每个场景内的语义分布应该是近乎一致的 (不然也不会标注为同一类),但是高频分布就不一定了,可能和特定域有关,该高频成分可能包括和类别相关的特定信息,也可以包括分布外的噪声,并且该噪声对模型训练是有害的,会影响泛化能力。

对于人类而言,标注时候由于无法感知高频成分故仅仅依靠语义进行标注,忽略了高频成分。但是 CNN 训练时候会同时面对语义低频成分和高频成分,这个 gap 就会导致 CNN 学习出来的模型和人类理解的模型不一样,从而出现常规的泛化认知错误。这一切实际上不能怪 CNN,而是数据分布特性决定的。

当 CNN 采用优化器来降低损失函数时,人类并没有明确告知模型去学习语义还是高频信号,这导致模型学习过程中可能会利用各种信息来降低损失。这样尽管模型可能会达到较高的准确率,但它理解数据的过程和人类不一样,从而导致大家认为 CNN 很垃圾。

而且论文中未避免被后续论文打脸,还特意指出:本文并没有说模型有捕捉高频信号的倾向性,这里的主要观点是:模型并没有任何理由忽略高频信息,从而导致模型学到了高频和语义的混合信息


1.4 实验论证假设

 上述假设是作者自己提出的,为了使得假设更加可信,作者进行了后续详细实验。

(1) nutural label VS shuffled label

nutural label 就是原始标注 label,即原始图片及其 label 对;而 shuffled label 是对 label 随机打乱导致有些 label 错误的情形。将这两种数据分别在 cifar10 训练集上用 resnet18 训练,训练过程 acc 曲线如上所示,其中 L(n) 表示对图片采用半径 r = n 的阈值滤除高频成分,然后对保留频谱成分进行重建。注意,n 越大,保留的 (高频) 信息更多

    从图中可以看出很多重要信息,例如:

  • 从 shuffled label 的黄线可知,即使把 label 随机打乱,也可以得到非常高的准确率,只不过需要更多的 epoch,而且震荡也比较厉害。这个现象其实在 Understanding deep learning requires rethinking generalization 论文中有做过相关工作
  • 当半径 n 由小变大时,不管是 shuffled label 还是 natural label,acc 都从低变高
  • 刚开始训练时 natural label 的 acc 起点比 shuffled label 高 40%

    下面对上述现象进行分析:

  • CNN 的记忆能力很强,即使 label 随机打乱,acc 也可接近 1。我们通常认为 CNN 强拟合能力把 label 直接记住了,但这就出现一个了问题:既然 natural label 能够轻易记住所有 label,那为何 CNN 训练过程中还会考虑测试集的泛化能力呢?因为在 Understanding deep learning requires rethinking generalization 中提到,虽然 CNN 可以强行记住 label,但是有些模型还是有较好泛化能力的,这就解释不通了
  • 上述现象如果从数据高、低频角度考虑就可以解释得通。因为刚开始训练时,natural label 的 acc 起点比 shuffled label 高 40%,所以可以推导:CNN 在训练早期会先利用语义信息或者说低频信息进行训练,当 loss 不能再下降时候会额外引入高频成分进一步降低 loss。因为 shuffled 数据集的 label 被随机打乱了,所以 CNN 无法利用语义低频信息进行训练,但是在后期开始引入高频成分从而 acc 最终变成 1;而 natural label 由于有低频语义信息,故刚开始很快 acc 就变成40%,后面也开始引入高频信息进一步提高 acc
  • 当半径 r = n 由小变大时,不管是 shuffled label 还是 natural label,acc 都是从低变高现象的原因同理。因为随着 r 变大,高频成分保留的越来越多,CNN 后期能利用的高频成分越来越多,所以 loss 可以不断下降

总结一下:CNN 训练过程会先采用低频语义信息进行降低 loss,当继续训练无法降低 loss 时会额外考虑高频成分进一步降低 loss,而由于 label 被 shuffle 掉导致无法利用低频语义信息,则出现刚开始 acc = 0 的现象,但是因为后期利用了高频成分,故最终还是能够完全拟合数据。

需特别强调的是:高频成分可分为两部分:和数据分布相关的有用高频成分 A 和 数据无关的噪声有害高频成分 B。在 natural label 数据训练过程中,CNN 可能会利用 AB 两种高频成分进行过拟合,且由于利用的 AB 比例无法确定,故导致 CNN 模型存在不同的泛化能力,若噪声成分 B 引入过多,那么对应的泛化能力就会下降。

通过上述现象,很容易解释 早停 (early stopping) 手段为何可以防止过拟合:因为越到训练后期其可利用的和数据相关的有用高频成分就越少,为降低 loss,就只能进一步挖掘样本级别的特有的噪声高斯信息。遗憾的是暂时没有一种手段把噪声高频成分过滤掉,仅仅保留有用高频成分。


(2) 低频成分 VS 高频成分

对图片进行高、低频分离然后分别重建,得到 X_l,X_h 图片。在这两种数据上训练,然后在原始数据集上测试,结果如上所示。可得如下结论:

  • 随着阈值半径 r 变大,由于保留的高频成分越多,所以训练集和测试集准确率都增加了。这其实说明 高频成分不全是噪声,很多应该还是和数据分布相关的有用信息
  • 采用低频成分训练的泛化能力远远高于高频成分训练的模型。这个现象造成的原因是 label 是人类标注的,人类本身就是按照低频语义信息进行标注,可以大胆猜测,如果人类能够仅仅利用高频成分进行标注,那么上述现象应该就是相反的

(3) 启发式组件通俗解释

这里说的启发式组件是指的 Dropout、Mix-up、BatchNorm 和 Adversarial Training 等,这些组件已被证明可提高模型泛化能力,作者试图采用本文观点进行分析成功的原因。

上图较多,主要看第二行,可归纳为:

  • 大 batch size 训练时,会同时考虑更多的非噪声的同分布高频成分,从而可以缩小训练和测试 acc 的误差间隔
  • dropout 由于加入后和不加入时差不多,所以看不出什么规律
  • 加入 mixup 后,训练 acc 和测试 acc 曲线 gap 变小,原因是 mixup 操作 其实相当于混淆了低频语义信息,从而鼓励 CNN 尽可能多的去捕获高频信息
  • 当引入对抗样本后,CNN 精度快速下降,原因是 对抗样本 可能改变了高频分布 (因为人眼无法感知),而训练过程中实际学到的高频分布 和 对抗样本的高频分布 不一致,从而导致 CNN 完全预测错误
  • BN 方面,作者单独进行分析

从以上分析可知,如果试图从数据的高低频分布以及 CNN 先学低频、再学高频的特性分析上述组件,是完全可以解释通的。


(4) BN 训练过程分析

 vaillla 是指未引入 BN 的模型。作者 假设 BN 优势之一是通过归一化来对齐不同预测信号的分布差异,未经 BN 训练的模型可能无法轻松获取这些高频成分,且高频成分通常幅度较小,而通过归一化后可增加其幅值。总之 BN 层 的引入可让模型轻易捕获高频成分,并且由于对齐效应,大部分捕获的会是有用高频成分,从而加快收敛速度,提高泛化能力


1.5 对抗攻击和防御

前面分析了特别多,但是除了加深对 CNN 的理解外,好像没有其他作用。为消除大家对本文贡献的错觉,作者声称可将上述思想应用到 对抗攻击和防御领域,加强模型鲁棒性

前面说过对抗样本可以和高频成分联系起来,其可以认为是扰动了人类无法感知的高频成分,从而使得网络无法识别。作者首先分析对抗样本对网络造成的影响,然后提出了针对性改进。

首先采用标准的 FGSM 或者 PGD 等方法生成对抗样本,然后将对抗样本联合原始数据进行训练,最后可视化第一次卷积核参数,如下所示:

可以发现经过对抗样本训练后的模型,卷积核参数更加平衡(相邻位置的权重非常相似)。通过以前的论文也可以证明平滑卷积核能够有效地移除高频信号,从本文假设来理解上述现象就是一个非常自然的想法了。

有了上述的论证,那么我们可以试图思考:如果直接把卷积核平滑化是否可提高鲁棒性?为此作者采用了如下公式:

其实就是在每个位置的核参数都按照一定比例加上邻近位置的核参数,使得核参数平滑。效果如下:

可以发现当应用平滑方法时,CNN 精度的性能下降非常多,但是对抗鲁棒性提高了一点。这个小实验可说明几点:

  • 当核参数平滑后,会过滤掉图片的高频成分,导致 acc 急剧下降
  • 核参数平滑后,可以提升一点点鲁棒性,说明高频信息是对抗攻击的一部分,但并非全部,可能还有其他因素
  • CNN 高频成分引入的多少,可能会导致精度和鲁棒性之间的平衡

二、总结

    本文从数据的高低频成分角度分析,得出如下结论:

  • CNN 学习过程中会先尝试拟合低频信息,随着训练进行,若 loss 不再下降,则会进一步引入高频成分
  • 高频成分不仅仅是噪声,还可能包含和数据分布特性相关信息,但是 CNN 无法针对性的选择利用,如果噪声引入的程度比较多则会出现过拟合,泛化能力下降
  • 暂时没有一个好手段去除高频成分中的噪声,目前唯一能做的就是尝试用合适的半径阈值 r 去掉高频成分,防止噪声干扰,同时测试也需要进行相应去高频操作,或许可以提升泛化能力
  • mix-up、BN、对抗样本 和 早停 等提点组件都可以促进 CNN 尽可能快且多的利用高频成分,从而提升性能
  • 对抗鲁棒性较好的模型卷积核更加平滑,可以利用该特性稍微提高下 CNN 的鲁棒性

最后重申一句:人类标注时候仅仅是考虑低频语义信息,而 CNN 学习会考虑额外的高频成分,从而学习出的模型表现有时候不符合人类想法,这不是 bug,也不是 CNN 垃圾,而是大家看到的和想的不一样。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值