欠拟合:
指的是在训练集上,训练误差较高
欠拟合可能的原因:复杂的数据,配上简单的模型
过拟合
指的训练集上的训练误差较低,但是测试集上的泛化误差较高
过拟合可能的原因:训练的数据量过少,模型过于强大,误认为学习到了所有,导致最终的泛化误差较大。
测试模型
模型
L2正则
欠拟合过拟合code
1 | # y= 1.2x-3.4x**2+5.6x**3+5.0+noise |
正则code
1 | from mxnet import ndarray as nd |
添加:另一种防止模型过拟合的方法
Dropout
Dropout总的来说分为两部分
1.对于该层的输出结果,以一定的概率选择丢弃元素乘0
2.把非丢弃元素拉伸(保证期望不变)1
2
3
4
5
6
7
8
9
10
11
12
13
14from mxnet import nd
def dropout(X, drop_probability):
keep_probability = 1 - drop_probability
# 全部元素都丢弃。
if keep_probability == 0:
return X.zeros_like()
# 随机选择一部分该层的输出作为丢弃元素。
mask = nd.random.uniform(
0, 1.0, X.shape) < keep_probability
# 保证 E[dropout(X)] == X
scale = 1 / keep_probability
return mask * X * scale
Dropout的实质:
Dropout的解释还是很多的,有人认为是集成学习不是很能理解,黑盒,并不是加Dropout一定比不加会有更高的准确率。
—————————————————————————————————————-update
隐藏层中每个神经元都有可能被丢弃,那么最后的输出无法过分依赖单个神经元,即参数接近为0,一定程度上起到了正则化的作用。