概述
文章目录
- 1. 小数据集存在的问题
- 2. 训练期间添加噪声
- 3. 如何添加噪声
- 4. 添加噪声的提示
- 5. tensorflow.keras API
训练神经网络时,如果数据集比较小,很容易导致过拟合。也就是说,小样本量所对应的高维的输入空间比较稀疏,神经网络很难从中学习映射关系。一种方法是通过添加噪声使得输入空间变得平滑,从而有利于神经网络学习。
1. 小数据集存在的问题
在训练大型神经网络时,小型数据集会带来问题。
第一个问题是网络可以有效地记忆训练数据集。该模型可以学习特定的输入示例及其关联的输出,而不是学习从输入到输出的一般映射。这将导致模型在训练数据集上表现良好,而在新数据上表现不佳,即泛化能力很差。
第二个问题是小的数据集提供较少的机会来描述输入空间的结构及其与输出的关系。更多的训练数据为模型可以学习的问题提供了更丰富的描述。较少的数据意味着震荡和离散的输入空间而不是平滑的输入空间,这可能会导致模型学习特征映射比较困难。
有时候,有些数据的收集比较困难。此外,即使采集了更多的数据,可能仍然无法解决这些问题。一种解决方法是训练期间添加噪声。
2. 训练期间添加噪声
小数据集在训练时,会导致比较大的误差。通过在训练期间添加噪声,可以提高模型从输入空间学习映射规则的能力,提高模型的泛化能力和容错率。
在神经网络模型训练期间添加噪声具有正则化效果,进而提高了模型的鲁棒性。与权重正则化方法一样,已经证明添加噪声对损失函数的影响和惩罚项的作用类似。
实际上,添加噪声会扩大训练数据集的大小。每次将训练样本输入模型时,都会将随机噪声添加到输入变量,从而使输入模型的数据每次都不同。将噪声添加到输入样本是数据增强的一种简单形式。
添加噪声意味着网络无法记住训练样本,因为它们一直在变化,从而导致网络权重更小且网络更健壮,泛化误差更低。
噪声意味着从已知样本附近的域中抽取新样本,从而平滑了输入空间的结构。这种平滑可能意味着映射功能更易于网络学习,从而导致更好,更快的学习。
3. 如何添加噪声
高斯噪声或白噪声(Gaussian noise, or white noise) 的平均值为零,标准差(std)为1,可以根据需要使用伪随机数生成器生成。在信号处理中,使用高斯噪声这一术语来指代电路中不相关的随机噪声;传统上,将高斯噪声添加到神经网络的输入中称为抖动(jitter) 或随机抖动。
添加的噪声量(例如,扩展或标准偏差)是可配置的超参数。噪声太小没有影响,而噪声太大使映射功能难以学习。通常是通过在将输入数据喂给网络之前在输入数据上添加一个随机向量来完成的,因此,在训练中同样的数据在不同训练批次中,也会添加不同的随机向量。
随机噪声的标准差可以根据每个输入变量的大小进行调整。如果输入变量的标度已首先进行标准化,则配置起来会更容易。
噪声仅在训练期间添加。在模型评估期间或使用模型对新数据进行预测时,不会添加任何噪声。
噪声的添加也是自动特征学习的重要部分,例如在自动编码器的情况下,所谓的降噪自动编码(Denoising Autoencoders)器明确要求模型在存在输入噪声的情况下学习鲁棒特征。
尽管在数据中添加噪声是最常见且最广泛的方法,但是在训练过程中可以将随机噪声添加到网络的其它部分。比如:
- 给激活添加噪声,即每层的输出。
- 给权重添加噪声,即迭代输入。
- 给梯度(即更新权重的方向)添加噪声。
- 给输出(即标签或目标变量)添加噪声。
在激活中中增加噪声,从而可以在网络的任何数据使用噪声。这对于非常深的网络可能是有益的。将噪声添加到层输出中,很可能是通过使用噪声激活函数来实现的。
在权重中添加噪声,可以使该方法以一致的方式在整个网络中使用,而不是在输入和层激活中添加噪声。这在递归神经网络中特别有用。
向梯度添加噪声,可以使模型更多地集中在提高优化过程本身的鲁棒性上,而不是输入空间的结构上。噪声的数量可能在训练开始时就开始很高,并且随着时间的流逝而降低,这很像学习速率的下降。对于非常深的网络和各种不同的网络类型,该方法已被证明是一种有效的方法。
将噪声添加到激活,权重或梯度都提供了一种更通用的添加噪声的方法,该噪声对于提供给模型的输入变量的类型是不变的。
如果认为或预期问题域带有错误标记的示例,则在类别标签上添加噪声可以提高模型对此类错误的鲁棒性。但这很容易偏离学习过程。
在回归或时间序列预测中,将噪声添加到连续目标变量中,非常类似于将噪声添加到输入变量中,并且可能是更好的方法。
4. 添加噪声的提示
添加噪声的方法,主要用于多层感知器,但可以与卷积和递归神经网络一起使用。
重要的是,噪声的添加对模型具有一致的影响。这就要求对输入数据进行重新缩放,以使所有变量都具有相同的缩放比例,以便在以固定方差将噪声添加到输入时,具有相同的效果。这也适用于在权重和渐变上添加噪声,因为它们也受输入比例的影响。这可以通过输入变量的标准化或标准化来实现。如果在数据缩放后添加了随机噪声,则可能需要对每个批处理再次重新缩放变量。
5. tensorflow.keras API
将噪声添加到具有少量训练数据集的神经网络模型中可以产生正则化效果并减少过拟合。
Keras通过单独的 GaussianNoise
层添加高斯噪声。该层可用于向现有模型添加噪声。
tf.keras.layers.GaussianNoise(
stddev, **kwargs
)
参数说明:
stddev
:float类型,噪声分布的标准差。
调用参数说明:
inputs
:输入张量(任何等级)。training
:bool类型,True指示该层在训练模式下添加噪声;False表示不执行任何操作。input_shape
:在将此层用作模型的第一层时,需要指定该关键字参数(整数元组,不包括样本轴)。
示例:
from tensorflow.keras.layers import GaussianNoise
layer = GaussianNoise(0.1)
实例:
1. 在激活之前添加高斯噪声:
...
model.add(Dense(32))
model.add(GaussianNoise(0.1))
model.add(Activation('relu'))
model.add(Dense(32))
...
2. 在激活之后添加高斯噪声:
...
model.add(Dense(32, activation='reu'))
model.add(GaussianNoise(0.1))
model.add(Dense(32))
...
可以将标准差作为超参数,通过网格搜索找出最佳的值。
参考
https://machinelearningmastery.com/train-neural-networks-with-noise-to-reduce-overfitting/
https://machinelearningmastery.com/how-to-improve-deep-learning-model-robustness-by-adding-noise/
https://www.tensorflow.org/api_docs/python/tf/keras/layers/GaussianNoise
最后
以上就是俭朴雨为你收集整理的【调参08】:如何通过添加高斯噪声降低过拟合风险1. 小数据集存在的问题2. 训练期间添加噪声3. 如何添加噪声4. 添加噪声的提示5. tensorflow.keras API的全部内容,希望文章能够帮你解决【调参08】:如何通过添加高斯噪声降低过拟合风险1. 小数据集存在的问题2. 训练期间添加噪声3. 如何添加噪声4. 添加噪声的提示5. tensorflow.keras API所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复