目录
[1. 以数据为中心的泛化方法](#1. 以数据为中心的泛化方法)
[1.1 使用更多数据](#1.1 使用更多数据)
[1.2 做好数据预处理](#1.2 做好数据预处理)
[1.3 数据增强](#1.3 数据增强)
[1.4 调整数据分布](#1.4 调整数据分布)
[2. 以模型为中心的泛化方法](#2. 以模型为中心的泛化方法)
[2.1 使用更大批次](#2.1 使用更大批次)
[2.2 调整目标函数](#2.2 调整目标函数)
[2.3 调整网络结构](#2.3 调整网络结构)
[2.4 屏蔽网络节点](#2.4 屏蔽网络节点)
[2.5 权值正则化](#2.5 权值正则化)
[2.6 偏差-方差权衡](#2.6 偏差-方差权衡)
提高模型泛化的方法大致可以分为两个方向:以数据为中心的泛化方法 和以模型为中心的泛化方法,下面将分别分析。
在机器学习领域,一个很重要的挑战是算法不光要在训练集上表现良好,还要能够在先前未观测的新数据上表现良好。这种在先前未观测到的数据上的表现能力就称为泛化(Generalization)。简言之,泛化定义了机器学习/深度学习模型在接受训练数据集训练后对新数据进行分析和正确预测的能力。
以数据为中心的泛化方法主要涉及**数据清洗、数据增强、特征工程**等。
以模型为中心的方法包括针对模型结构 、训练过程中的技巧 等,比如**正则化技术、提前停止训练以及模型剪枝**等等。
1. 以数据为中心的泛化方法
1.1 使用更多数据
在有条件的前提下,尽可能多地获取训练数据是最理想的方法,更多的数据可以让模型得到充分的学习,也更容易提高泛化能力。
1.2 做好数据预处理
有一个好的数据集远比有一个好的模型更为重要。这里的"好"主要表现在两方面:
①、做好特征选择;
②、做好数据离散化、异常值处理、缺失填充等。
特征工程
在传统的机器学习方法中,通过创建相关且信息丰富的特征可以帮助模型从数据中捕获基本模式。在深度学习中,这个过程可以通过深度神经网络(比如CNN、RNN)自动完成,学习到数据内部的模式和结构。
要做较好的特征工程:数据清洗,特征衍生,特征筛选。提高训练集的质量才能提升模型的上限,才能用各种提高泛化手段去逼近这个上限。
1.3 数据增强
数据增强又叫数据增广,在有限数据的前提下通过平移、旋转、加噪声等一些列变换来增加训练数据,同类数据的表现形式也变得更多样,有助于模型提高泛化能力,需要注意的是数据变化应尽可能不破坏元数数据的主体特征(如在图像分类任务中对图像进行裁剪时不能将分类主体目标裁出边界)。
数据增强(data augmentation)包含一系列用于人为增加数据集中的样本数量的方法。采用这样的方式是因为当可用于训练的数据样本数量较多时,深度学习模型可以更好地泛化。数据增强可以在可用训练数据样本较少的情况下训练出表现更好的模型。
比如,对于图像数据,一些常用的数据增强技术有旋转、翻转、裁剪,以及添加噪声等,通过这些操作人为增加训练数据多样性,而不要要收集更多的样本。
1.4 调整数据分布
大多数场景下的数据分布是不均匀的,模型过多地学习某类数据容易导致其输出结果偏向于该类型的数据,此时通过调整输入的数据分布可以一定程度提高泛化能力。
2. 以模型为中心的泛化方法
2.1 使用更大批次
在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定。
超参数调优
模型权重是通过训练学习得到的,除了模型参数,在提高模型泛化能力的时候也可以尝试不同的超参数,例如学习率、批量大小和网络架构,以找到可产生最佳泛化性能的配置。
除此以外,在深度学习领域,还可以采用迁移学习(Transfer Learning)、模型剪枝(Pruning)、对抗训练(Adversarial Training)等来改善模型的泛化能力。
针对以上的方法,如果想深入了解和研究,提供一些学习资料供大家参考。
- 《Deep Learning》(中文书名:《深度学习》),第七章:Regularization for Deep Learning。
- 《Pattern Recognition and Machine Learning》,Section 5.5. Regularization in Neural Networks。
2.2 调整目标函数
在某些情况下,目标函数的选择会影响模型的泛化能力,如目标函数
在某类样本已经识别较为准确而其他样本误差较大的侵害概况下,不同类别在计算损失结果的时候距离权重是相同的,若将目标函数改成
则可以使误差小的样本计算损失的梯度比误差大的样本更小,进而有效地平衡样本作用,提高模型泛化能力。
2.3 调整网络结构
在浅层卷积神经网络中,参数量较少往往使模型的泛化能力不足而导致欠拟合,此时通过叠加卷积层可以有效地增加网络参数,提高模型表达能力;在深层卷积网络中,若没有充足的训练数据则容易导致模型过拟合,此时通过简化网络结构减少卷积层数可以起到提高模型泛化能力的作用。
2.4 屏蔽网络节点
该方法可以认为是网络结构上的正则化 ,通过随机性地屏蔽某些神经元的输出让剩余激活的神经元作用,可以使模型的容错性更强。
2.5 权值正则化
权值正则化就是通常意义上的正则化,一般是在损失函数中添加一项权重矩阵的正则项作为惩罚项,用来惩罚损失值较小时网络权重过大的情况,此时往往是网络权值过拟合了数据样本,如
这是最重要的泛化技术之一。正则化通过直接改变模型的架构 来解决过拟合问题,从而改进训练过程。常用的正则化方法比如有L2 norm 和 dropout 等。它们通过修改参数或权重的更新方式来确保模型不会过拟合。
- L2正则化。通过在损失函数中添加L2惩罚项,鼓励更小的权重并防止模型过拟合。
- Dropout。在训练过程中随机禁用一部分神经元,防止对特定神经元的依赖,提高模型的鲁棒性和泛化能力。
- Batch Normalization。它通过在每个小批量的训练数据中 对输入进行标准化,来应对模型训练过程梯度消失和爆炸问题,并且可以在一定程度上减轻过拟合。
2.6 偏差-方差权衡
提到模型的泛化能力,不得不提到模型的两个重要概念------方差和偏差。它们对模型泛化有重要的影响。
方差定义了模型预测的可变性,即一组数据与其真实值的分散程度;而偏差则定义了预测与真实值之间的距离(误差)。
每一个机器学习模型都可能处于以下情况:低偏差-低方差,低偏差-高方差,高偏差-低方差,以及高偏差-高方差。
其中,低偏差-高方差模型称为过拟合模型 ,而高偏差-低方差模型称为欠拟合模型。
在训练模型的过程中,应该努力在模型复杂性(方差)和正则化(偏差)之间取得适当的平衡,以找到在训练和验证数据上都表现良好的模型。
参考: