之前小编就给大家提过正则化(超链接),其实还有很多定义大家是有点模糊又有点清楚的,今天好好带大家一起捋一遍~~
1训练集、验证集、测试集
正确地配置训练、验证和测试数据集,会很大程度上帮助大家创建高效的神经网络。即使是深度学习专家也不太可能一开始就知道匹配度最高的参数,深度学习网络需要多次循环往复,才能为应用程序找到最佳的神经网络,因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。
在机器学习发展的小数据量时代,常见做法所有数据中存在70%的验证集,剩下的30%作为测试集,如果没有明确设置验证集的话,可以将训练集、验证集、测试集以3:1:1的标准划分。(这点小编应该也在之前的机器学习系列中给大家普及过)而当涉及大量数据的时候,验证集和测试集占数据总量的比例会趋向于变得更小。(没错,验证集的目的就是验证不同的算法,检验哪种算法更有效,因此,验证集要足够大才能评估,而因为我们的数据总量是巨大的,因此即使验证集所占的比例很小,但是其数据量也是可观的)。所以当数据集规模较大的,验证集和测试集要小于数据总量的20%或10%。
当然,小编这里还有两个小TIPS,大家可以细品一下:
1.尽可能使验证集和测试集的数据来自同一分布;
2.就算没有测试集也无伤大雅,只需要在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。
1.2 偏差,方差
假设给上图中的数据集拟合一条直线,可能会得到一个逻辑回归拟合,但是并不能很好地拟合该数据,这就是高偏差(high bias)的情况,即欠拟合。
而如果拟合一个非常复杂的分类器适用于这个数据集,这时候就可能会出现方差较高(high variance),数据过度拟合(overfitting)的现象。
当然,介于欠拟合与过拟合之间也会存在适度拟合(just right)的情况,使得数据拟合看起来更加合理。
理解偏差和方差的两个关键数据是训练集误差(Train set error)和验证集误差(Dev set error)。
1.假定训练集误差是1%,验证集误差是11%,可以看出训练集设置得非常好,而验证集设置相对较差,可能过度拟合了训练集,像这种情况,我们称之为“高方差”。
2.假设训练集误差是15%,验证集误差是16%,算法并没有在训练集中得到很好训练,如果训练数据的拟合度不高,就是数据欠拟合,就可以说这种算法偏差比较高。另一方面,它对于验证集产生的结果却是合理的,验证集中的错误率只比训练集的多了1%。
3.训练集误差是15%,偏差相当高,同时验证集的错误率达到30%,这样一来方差也很高。
4.最匹配的结果模型:训练集误差是0.5%,验证集误差是1%,偏差和方差都很低。
1.3 处理方法
因此当初始模型训练完成后,我们首先需要知道算法的偏差高不高,如果较高,甚至无法拟合训练集,那么我们就需要毫不犹豫地选择一个或多个新的网络。
采用规模更大的网络,延长训练时间也可以试试看,直到解决偏差问题,实现数据拟合。
如果偏差降低到可以接受的数值,查看验证集性能检查方差,如果方差高,那就是采用更多数据来解决问题,当然无法增加数据,那么就可以采用我们之前提到的正则化来减少过拟合。
1.4 正则化如何预防过拟合
为什么正则化可以减少方差问题?这里可以具体给大家讲解一下:
左图是高偏差,右图是高方差,中间是恰好合适。
假设上图为一个过拟合的神经网络,代价函数J,含有参数W,b。添加正则项避免数据权值矩阵过大。
如果正则化设置得足够大,权重矩阵W被设置为接近于0的值,将多隐藏单元的权重设为0,消除了隐藏单元的影响。如果是这种情况,神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,使网络从过度拟合的状态更接近左图的高偏差状态。但是会存在一个中间值,于是就会有一个接近“Just Right”的中间状态。
假设使用的是双曲线激活函数。
用g(z)表示tanh(z),只要z非常小,激活函数开始变得非线性。
如果正则化参数λ很大,激活函数的参数会相对较小,因为代价函数中的参数变大了,如果W很小,z也会很小。
总结来说,如果正则化参数变得很大,参数W很小,z也会相对变小,此时忽略b的影响,z会相对变小。激活函数tanh曲线函数会相对呈线性,整个神经网络会计算离线性函数近的值,不会发生过拟合。
当然啦,正则化我们之前只是做了比较简单的介绍,下期我们进行更加详细的介绍~再会!