Overfitting and regularization(过度拟合和规范化)
我们的网络在280迭代期后就不再能够推广到测试数据上。所以这不是有用的学习。我们说网络在280迭代期后就过度拟合(overfitting)或过度训练(overtraining)了。
我们的网络实际上在学习训练数据集的特例,而不是能够一般的进行识别。我们的网络几乎是在单纯记忆训练集合,而没有对数字本质进行理解并泛化到测试数据集上。
一种检测过度拟合的明显方法:
跟踪测试数据集合上的准确率随训练变化情况。如果看到测试数据上的准确率不再提升,那我们就停止训练。
具体过程就是在每个迭代期的最后都计算在validation_data上的分类准确率。一旦分类准确率已经饱和,就停止训练。这个策略被称为提前停止(early stopping)。可以将验证集看成是一种特殊的训练数据集,能帮助我们学习到好的超参数(hyper-parameters)。这种寻找好的超参数的方法有时候被称为hold out方法,因为validation_data是从training_data训练集中留出或者“拿出”的一部分。
规范化
L2规范化(也称为权重衰减)
L2规范化的想法是增加一个额外的项到代价函数上,这个项叫做规范化项。下面是规范化的交叉熵:
其中λ>0可以称为规范化参数,n就是训练集合的大小。(需要注意的是规范化项里面并不包含偏置)
当然对其他的代价函数也可以进行规范化,例如二次代价函数:
两者都可以写成这样:
其中C0是原始的代价函数。
规范化可以当作一种寻找小的权重和最小化原始代价函数之间的折中。这两部分之间相对的重要性由λ的值来控制:λ越小,就越偏向于最小化原始代价函数,反之,倾向于小的权重。
将随机梯度下降算法应用在一个规范化的神经网络上
对规范化的损失函数求偏导数:
可以看到偏执的梯度下降学习规则不会发生变化:
而权重的学习规则变成了:
这和正常的梯度下降学习规则相同,增加了一个因子重新调整了权重w。这种调整有时候被称为权重衰减。
那么,随机梯度下降的权重的规范化学习规则就变成了:
偏置的规范化学习规则不变:
规范化让网络具有更好的泛化能力,显著减轻了过度拟合的影响。
备注:无规范化的网络会偶然被限制住,明显困在了代价函数的局部最优出。结果就是不同的运行会给出相差很大的结果。对比来看,规范化的网络能够提供更容易复制的结果。
为何规范化可以帮助减轻过度拟合
小的权重在某种程度上,意味着更低的复杂性,也就是对数据给出了一种更简单却更强大的解释,因此应该优先选择。