赞
踩
简单的说训练误差是模型在训练集上的误差,泛化误差是指模型在测试集上的误差的期望,并常常通过测试数据集上的误差来近似。两种误差的计算可以通过【人工智能学习】【一】线性回归中提到的二次误差损失函数,【人工智能学习】【二】Softmax与分类模型中提到的交叉熵损失函数来计算。还有其他的损失函数,篇幅有限不再介绍。机器学习中常用的损失函数你知多少?
机器学习模型应关注降低泛化误差。
模型选择是如何对给定数据集上进行训练和测试,说白了就是如何划分训练集和测试集。模型参数(一般是 W W W和 b b b)通过训练集进行训练,超参数(学习率,batch-size等(认真脸 要严谨))根据训练集来自己调优(就是不断试,老外给这种暴力测试起了个高大上的名字 Grid Search…)。
当数据集足够大时,可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。剩下的是训练集用来训练参数和调参(两种参数哦)。
上面的方法将数据集分开一部分做测试集,这部分无法参与训练,对模型没啥贡献,所以有点浪费。于是就发明了这种方式,把数据集分成K段,每次用K-1段作为训练集,剩下的1段做测试集。循环这个操作直到每段都当过测试集了为止。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。
在预测模型中,比如线性回归,softmax回归,我们想要得到模型可以抽象成一条曲线,这个曲线按照我们定义的方式来对数据集进行拟合,这个过程就是模型训练。在这个过程中会出现两种情况,第一种情况是我们的模型对数据集进行了拟合,但是不是很精确。第二种情况我们的模型与数据集拟合的非常好,几乎没有错误。有人要说了,第一种不准确可以理解,难道第二种情况不是很好吗?来看下面这个例子
这三张图讲的都是线性拟合的问题(只是线性空间的基不同),第三张图的拟合的模型覆盖到了所有样本集,但从直观上讲,如果我们用它来对后面的数据进行预测,恐怕不如中间的模型效果要好。因为它太精确了,以至于无法对新数据进行预测。而第一种情况虽然具有一定的泛化能力,但相比(注意是一个比较)中间的图来说,图一的模型不是最优的(当然我们这里直观的假设了样本点的走势是平稳向右上方发展的)。第一种情况(图一)叫做欠拟合,第二种情况(图三)叫做过(过度)拟合。
要明确的是,不论过拟合还是欠拟合,一定是一个相对的概念,可能每种样本集的分布都各不相同,同一个模型在某个样本集中是欠拟合的,但在另一个模型中可能就“Just right”。
训练集不能代表整个样本空间,所以当训练误差特别小时,就走进了过拟合这个极端情况。
在实践中,我们要尽可能同时应对欠拟合和过拟合。虽然有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。
上图的三种拟合都是在线性空间里的多项式基底,可以用下面的通解公式
y
i
ˊ
=
b
+
∑
k
=
1
K
x
k
W
k
\acute{y^i}=b+\sum_{k=1}^Kx^kW_k
yiˊ=b+k=1∑KxkWk
在上面的例子中,可以看到模型简单(图一)会带来欠拟合问题,模型复杂(图三)会带来过拟合问题。(相对来说)
数据集的数据量太小会更容易带来过拟合问题,因为没有足够的数据来泛化模型的表达力。泛化误差不会随训练数据集里样本数量增加而增大,所以理论上数据量越多越好,特别是在模型较为复杂的深度神经网络。
正则化这个词从英文直译过来应该是规则化。就是对模型引入额外的信息来防止过拟合和降低泛化误差。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。上面说,模型复杂会导致过拟合,正则化可以对模型复杂度进行“惩罚”,以降低模型复杂性。
说白了,人为增加一定的训练误差。可解释性请参考一文搞懂深度学习正则化的L2范数
以二次误差损失函数为例
l
(
w
1
,
w
2
,
b
)
=
1
n
∑
n
=
1
n
1
2
(
x
1
i
w
1
+
x
2
i
w
2
+
b
−
y
i
)
l(w_1,w_2,b)=\frac{1}{n}\sum_{n=1}^n\frac{1}{2}(x_1^{i}w_1+x_2^{i}w_2+b-y^i)
l(w1,w2,b)=n1n=1∑n21(x1iw1+x2iw2+b−yi)
设
w
=
[
w
1
,
w
2
]
w=[w_1,w_2]
w=[w1,w2]
带有L2正则化的损失函数变为
l
o
s
s
=
l
(
w
1
,
w
2
,
b
)
+
λ
2
n
∣
w
∣
2
loss=l(w_1,w_2,b)+\frac{\lambda}{2n}|w|^2
loss=l(w1,w2,b)+2nλ∣w∣2
在【人工智能学习】【一】线性回归中,梯度更新的函数是这样的
(
W
,
b
)
:
=
(
W
,
b
)
−
α
1
m
∑
i
=
1
m
∂
w
,
b
l
o
s
s
i
(W,b) :=(W,b) - α\frac{1}{m} \sum_{i=1}^m {∂_{w,b}} loss^i
(W,b):=(W,b)−αm1i=1∑m∂w,blossi
加入正则项后变成
(
W
)
:
=
(
1
−
λ
α
m
)
(
W
)
−
α
1
m
∑
i
=
1
m
∂
w
,
b
l
o
s
s
i
(W) :=(1-\frac{\lambdaα}{m})(W) - α\frac{1}{m} \sum_{i=1}^m {∂_{w,b}} loss^i
(W):=(1−mλα)(W)−αm1i=1∑m∂w,blossi
可见L2正则项是先缩小要进行梯度计算的权重矩阵,再减去计算出来的梯度,达到降低权限矩阵数值的目的。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。
按一定比例随机丢弃神经元,图一是无dropout情况,图二是有dropout情况。drop out的是神经元结点,这些节点一旦dropout就不再参与网络计算了,其实是随机清零一些梯度,降低模型复杂度。
但是这样并不好,得到的数据不完整了。丢弃神经元和丢弃数据集的感觉差不多。
共享权值是神经元之间共享权值,也是为了达到降低模型复杂度的目的。
其他方案不再赘述,请参考机器学习中常见的过拟合解决方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。