1.1 Train/dev/test sets
在配置训练,验证,和测试数据集的过程中做出正确决策,会在很大程度上帮助大家创建高效的神经网络。训练神经网络的时候,我们需要做出很多决策。例如:神经网络分多少层,每层包含多少神经元,以及学习速率是多少。
实际上,应用型机器学习是一个高度迭代的过程,下面的示例图可以表示我们训练一个神经网路的过程。
当然最佳决策取决于我们拥有的数据量,应用深度学习是一个典型的迭代过程,需要很多次循环往复,才能为应用程序找到一个称心的神经网络,因此循环过程的效率是决定项目进度的关键因素,创建高质量的训练集,验证集,测试集有助于提高循环效率。
在机器 学习的小数据时代,通常做法是将所有数据三七分。如下所示:
但是在大数据时代,那么验证集合测试集数据总量的比例会变得更小。
总结一下:
在机器学习中,我们通常将样本分成训练集,验证集和测试集三部分,数据规模相对较小的,适用传统的划分比例,数据规模较大的,验证集合测试集就可以占到20%或10%以下。其次要确保验证集和测试集的数据来自同意分布。
1.2 偏差和方差(bias and variance)
这一节我们对偏差和方差做一个简单的介绍。以一个简单的二分类为例。如下图所示:
上图中,第一种就是一种高偏差的情况,我们称之为欠拟合,第二种刚刚好,第三种是高方差的情况,我们称之为过拟合。
我们可以通过以下几个指标来研究偏差和方差,理解偏差和方差的两个关键数据是训练集误差和验证集误差。如下所示:
假设训练集误差为1%,但是验证集为误差为11%,此时,我们可能过度拟合了训练集,在某种程度上,验证集并没有充分利用交叉验证集的作用,像这种情况,称为高方差,如果训练集测试集误差都很高,则称为高偏差。也就是说,我们可以通过衡量训练集和验证集误差,我们可以得出不同结论。
注意
以上分析都是假设基本误差很小的情况下,其次训练集数据和测试集数据来自同一分布。
1.3 机器学习基础(Basic “recipe” for machine learning)
训练神经网络时可以用以下的基本方法,即初始模型训练完成后,我们首先妖之道算法的偏差高不高,如果偏差较高,试着评估训练集或训练数据的性能,如果偏差的确很高,甚至无法拟合训练集,那么我们要做的是选择一个新网络,比如含有更多隐藏层或者隐藏单元的网络,或者尝试更先进的优化算法。通常采用规模更大的网络会有用。进行不断尝试,直到解决偏差问题。一旦偏差降低到可以接受的程度,检查一下方差是否有问题,如果方差高,最好的方法是采用更多的数据,其次,我们可以通过正则化来减少过拟合。
1.4 正则化(Regularization)
如果我们怀疑神经网络过度拟合了数据,即存在高方差问题,此时又没有更多的数据,那么最先想到的方法是通过正则化来减少过拟合。这也是非常可靠的方法,下面我们来看看正则化的原理。
我们以逻辑回归为例,求成本函数的最小值,如下:
加上后面的 λ2m∥w∥22 我们称之为L2正则化,L2正则化是最常见的正则化类型,还有一种L1正则化,如下所示:
如果用L1正则化,W最终会是稀疏的,也就是说w向量中有很多0,虽然这样与利于压缩模型,因为集合中参数均为0,存储中所占用的内存更少,实际上,却没有降低太多存储内存。
λ 是正则化参数,我们通常使用验证集来配置这个参数,需要尝试各种各样的数据,寻找最好的参数,以上是在逻辑回归上实现正则化,那么如何在神经网络上实现正则化呢?
神经网络实现正则化
神经网络的成本函数如下: