为鲁棒的神经网络模型添加噪音
深度神经网络在诸如图像识别、目标检测、语义分割以及语音和自然语言处理上都表现的很好;
但是也存在一个问题——他们不能很好的处理真实世界数据集上的噪音;
当网络模型处理含有噪音的数据时,他们的泛化性能就会下降;
为此,我们在本文中将介绍一种提升泛化性能的方法。
文章内容主要包括:
1)为什么噪音对神经网络来说是个问题?
2)如何把噪音加入到输入中可以帮助神经网络?
3)不同类型的神经网络及机器学习模型中应该如何加入噪音?
4)可加入的噪音的类型
一、为什么噪音对神经网络来说是个问题?
原因:真实数据图像不像训练数据一样干净;
当训练的时候,我们会对输入数据进行预处理、缩放等;但是大部分时间我们不会考虑数据中的噪音;这使得神经网络的泛化性能降低;
二、如何把噪音加入到输入中可以帮助神经网络?
最佳的解决方案:在训练的时候将噪音加入到输入图像中
引自深度学习图书——Quoting Ian Goodfellow from the Deep Learning book,
One way to improve the robustness of neural networks is simply to train them with random noise applied to their inputs.
Regularization, page 237
因此,最基本的,我们可以在训练的时候随机加入噪音;
加入噪音带来的好处:
1)减少过拟合,提升泛化性能
2)有助于小的训练集的处理
可以帮助网络在训练的时候看到更加多样的数据;
不过如果数据集过小的话,给一半的数据集加入噪音可能会导致模型在训练时的不充分;当面临样本不平衡的问题时,这可能是个问题;
3)加入噪音可以被视为数据增强技术的一种方式
这有助于克服某一个特定类别数据较少的问题;
Injecting noise in the input to a neural network (Sietsma and Dow, 1991) can also be seen as a form of data augmentation.
Deep Learning, page 237
三、不同类型的神经网络及机器学习模型中应该如何加入噪音?
图像数据:
图像中的大多数数据增强都是通过旋转图像、移动像素或添加某种类型的白化来实现的。
现在,我们同样尝试加入噪音作为一种数据增强技术;
在论文Deep Convolutional Neural Networks and Noisy Images中,他们试图加入不同类型的噪音给输入数据,之后训练不同类型的深度神经网络模型;
结果发现,加入噪音对于变化的图像质量来说是有好处的;
The results indicate that training networks using data affected by some types of noise could be beneficial for applications that need to deal with images with varying quality, given that it seems to improve the resilience of the network to other types of noise and noise levels.
Deep Convolutional Neural Networks and Noisy Images, Tiago S. Nazare, Gabriel B. Paranhos da Costa, Welinton A. Contato, and Moacir Ponti (2018)
但是他们同样发现,降噪处理以后,模型的精度会下降;
这可能是由于降噪后的图像较为模糊,损失了一部分和数据有关的信息;
四、可加入的噪音的类型
高斯噪音
椒盐噪声
泊松噪音