CNN对高低频信号的学习
Related work: [1905.13545] High Frequency Component Helps Explain the Generalization of Convolutional Neural Networks (arxiv.org)
观点
- 对于任何一个数据集,都应该包括语义信息(纹理信息或者说低频信息)和高频信息,只不过包括比例不定而已,并且对于同一个分布数据集,其语义分布和高频分布都应该有自己的分布特性。可以简单认为对于同一个类别标注的数据集,假设该数据集收集自多个场景,每个场景内的语义分布应该是近乎一致的(不然也不会标注为同一类),但是高频分布就不一定了,可能和特定域有关,该高频成分可能包括和类别相关的特定信息,也可以包括分布外的噪声,并且该噪声对模型训练是有害的,会影响泛化能力。
- 对于人类而言,标注时候由于无法感知高频成分故仅仅依靠语义进行标注,忽略了高频成分。但是CNN训练时候会同时面对语义低频成分和高频成分,这个差别就会导致CNN学习出来的模型和人类理解的模型不一样,从而出现常规的泛化认知错误。这一切实际上是数据分布特性决定的。
- 当CNN采用优化器来降低损失函数时,人类并没有明确告知模型去学习语义还是高频信号,这导致模型学习过程中可能会利用各种信息来降低损失。这样尽管模型可能会达到较高的准确率,但它理解数据的过程和人类不一样。
- CNN训练过程会先采用低频语义信息进行降低loss,当继续训练无法降低loss时候会额外考虑高频成分进一步降低loss,而由于标签被打乱掉导致无法利用低频语义信息,则出现刚开始精度为0的现象,但是因为后期利用了高频成分,故最终还是能够完全拟合数据。
总结
- CNN学习过程中会先尝试拟合低频信息,随着训练进行如果loss不再下降,则会进一步引入高频成分
- 高频成分不仅仅是噪声,还可能包含和数据分布特性相关信息,但是CNN无法针对性的选择利用,如果噪声引入的程度比较多则会出现过拟合,泛化能力下降
- 暂时没有一个好手段去除高频成分中的噪声,目前唯一能做的就是尝试用合适的半径阈值r去掉高频成分,防止噪声干扰,同时测试也需要进行相应去高频操作,或许可以提升泛化能力
- mix-up、BN、对抗样本和早停止等提点组件都可以促进CNN尽可能快且多的利用高频成分,从而提升性能
- 对抗鲁棒性较好的模型卷积核更加平滑,可以利用该特性稍微提高下CNN的鲁棒性
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Linyer Blog!