模型在之前为观测到的输入上表现良好的能力被称为泛化,泛化误差也可以被称为测试误差。模型在训练集上不能得到足够低的训练误差被称为欠拟合,训练误差和测试误差之间的差距过大被称为过拟合。
模型的容量指的是其拟合各种函数的能力。容量低的模型可能很难拟合训练集,容量高的模型可能会过拟合。
模型容量可以由VC维度量。VC维度量二元分类器的容量。VC维定义为该分类器能够分类的训练样本的最大数目。假设存在m 个不同x 点的训练集,分类器可以任意地标记该m 个不同的x 点,VC维被定义为m的最大可能值。VC维在判断神经网络的容量的时候没啥大用。
没有免费午餐定理(no free lunch theorem)表明,在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。也就是说没有一个算法总是比其他的都好。对于特定的任务,学习算法有一些偏好使得算法的性能更好。讨论修改学习算法的方法只有,通过增加或减少学习算法可选的假设空间的函数来增加或减少模型的表示容量。
正则化指的是修改学习算法使其泛化误差降低。正则化一个学习函数的模型,一般会给代价函数添加成为正则化项的惩罚。最小化代价函数可以看作是拟合训练数据和偏好小权重范数之间的权衡。
将正则化之后的目标函数记为:
为0时没有正则化,越大对应正则化惩罚越大。
1. L2正则化
通常被称为权重衰减,正则项,代价函数以及梯度就变成了
反向传播的时候权重的更新就变成了:
这个加在权重前的系数会使权重收缩,下面图里红色的圈中心是未正则化的代价函数取得最小误差时的权重向量,红色圈代表没有正则化目标的等值线,蓝色圈代表L2正则化的等值线。它们的交点是正则化的代价函数取得最小时的权重。权重衰减的效果是沿着目标函数J的Hessian矩阵的特征向量所定义的轴缩放,特征值较大的方向正则化的影响较小,而对特征值较小的方向正则化影响较大。在下图中沿着椭圆的长轴方向移动了,而在短轴方向没有很大变化。
只有在显著减小目标函数方向上的参数会保留,在无助于目标函数减小的方向(Hessian矩阵较小的特征值)上改变参数不会显著增加梯度,因而会在训练中被正则化衰减掉。
2. L1正则化
正则项为,正则化的目标函数为
与L2正则化不同的是,L1正则对梯度的影响只是加了个常数项。L1正则化会产生更稀疏的解,指的是最优值中的一些参数为零,可以通过足够大的实现稀疏。
由L1正则化得出的稀疏性质被广泛地应用于特征选择,从可用的特征子集选择出有意义的特征,比如LASSO模型。
3. 数据集增强
让机器学习模型泛化得更好的最好办法是使用更多的数据进行训练。在实践中,我们拥有的数据量是很有限的。解决这个问题的一种方法是创建假数据并添加到训练集中。
常用的方法包括:对于图像的仿射变换,明暗度调节,加入噪声等。需要注意的是不能改变类别,比如“6”和“9”的区别,以及手性的问题等。
4. 数据归一化
数据在输入模型前要进行归一化处理,也可以在模型中进行归一化处理,也就是批归一化(Batch Normalization BN)。
批归一化是一种通过对输入层重新定心和缩放进行归一化,使神经网络更快、更稳定的方法。由Sergey Ioffe和Christian Szegedy于2015年提出。它可以缓解内协变量漂移的问题,即参数初始化和每层输入分布的变化会影响网络的学习率。
在网络的训练阶段,随着前一层参数的变化,输入到当前层的分布也随之变化,因此当前层需要不断地调整以适应新的分布。这个问题对于深层网络来说尤其严重,因为较浅的隐藏层中的微小变化会随着它们在网络中的传播而放大,从而导致较深的隐藏层发生显著变化。批量归一化可以减少这些不必要的偏移,从而加快训练速度,生成更可靠的模型。
和是每个mini-batch里的均值和方差,归一化处理之后为:
为了数值稳定性,在分母中加入了一个任意小的常数。
BN层的输出为
是需要学习的参数。
在测试的阶段均值和方差使用的是训练集的均值和方差。
5. Dropout
Dropout方法指的是在随机将一层的某个神经元删除的方法,通过随机行为训练网络并平均多个随机决定进行预测,实现了一种参数共享的Bagging形式。
Dropout减少了神经元之间复杂的共适应关系,使网络去学习更加鲁棒的特征。
网友评论