神经网络学习之泛化能力的提高

Posted 小黄有点忙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络学习之泛化能力的提高相关的知识,希望对你有一定的参考价值。

一、什么是泛化能力

我们知道一个神经网络模型(或深度模型)是通过已知的训练集训练出来的,然后会通过一些未知的测试集去预测模型的效果,我们会将模型对于未知测试集的预测能力称为泛化能力,也就是说,一个训练后的模型对已知的训练集表现良好,而且对于未知的测试集也表现良好,那么该模型可以说具备了比较高的泛化能力。

一般而言,导致泛化能力不高的两种情况分别是“欠拟合”和“过拟合”。

“欠拟合”一般是模型在训练中无法学习到一般的规律,也就是模型对已知的训练集表现就不好,这种情况一般是特征不足导致。如果对已知训练集表现良好,但是对未知的测试集表现不好,这就是“过拟合”,一般是训练样本不足等原因。

下面我们介绍一下几种能够提高泛化能力的方法。


二、提高泛化能力的方法

1、数据增强

一般而言,模型的训练都需要大量的训练样本,目前也有很多比较好的训练集,比如ImageNetPlaces等,但如果自己的模型需要自己制作训练集,但是训练集非常有限,那怎么办呢?这时候可以采用数据增强的方法,所谓数据增强就是对有限的训练集进行变换,具体的操作包括平移、旋转、镜像、几何变换、对比变换、颜色变换、亮度改变、添加噪声、糊化或弹性变换等,通过多种变换以增强训练数据。


2、数据预处理

如果有了充足的训练集,但是训练集的图像差异比较大,会影响训练的效率,因此一般会对训练集进行预处理,常见的预处理主要是均值减法、均一化和白化。

1)均值减法

首先求出训练集图像的均值图像,然后将训练集的图像减去均值图像,得到均值减法图,这些图均值为0,可以对图像的整体亮度进行抑制。

(2)均一化

均一化是先求训练集图像的标准差,然后再讲均值减法结果除以标准差,即可得到方差为1,均值为0的训练集图像,相比于均值减法,其图像之间的亮度差异更小。

(3)白化

白化用于消除数据间的相关性,增强图像的边缘,计算过程较为复杂,可自行学习。

3、Dropout和DropoutConnect

在算法方面,DropoutHinton等提出的一种提高泛化能力的方法,主要思想是在网络训练过程中,按照一定的概率将一部分中间层的神经元暂时从网络中丢弃(将神经元的输出值置零,使其不工作。DropoutConnectDropout原理相似,区别在于它是把一部分连接权重设置为0,防止过拟合的效果比Dropout好。

4、激活函数

目前可以采用ReLU及其衍生激活函数


如有问题,欢迎交流。


以上是关于神经网络学习之泛化能力的提高的主要内容,如果未能解决你的问题,请参考以下文章

Python机器学习之梯度提升树

深度学习之概述(Overview)

机器学习之支持向量机

机器学习之性能度量

如何理解神经网络的泛化能力?CMU团队另辟蹊径:一切秘密都在数据中

机器学习之roc曲线