1. 训练,验证,测试集
创建新应用的过程中,我们不可能从一开始就准确预测出这些信息和其他超参数。实际上,应用型机器学习是一个高度迭代的过程,通常在项目启动时,我们会先有一个初步想法,比如构建一个含有特定层数,隐藏单元数量或数据集个数等等的神经网络,然后编码,并尝试运行这些代码。根据输出结果重新完善自己的想法,改变策略,为了找到更好的神经网络不断迭代更新自己的方案。
因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。
我们通常将数据划分成几部分,一部分作为训练集(training set),一部分作为简单交叉验证集(Hold-out cross validation),有时也称为验证集(development set),方便起见就叫它验证集(dev set),其实都是同一个概念,最后一部分则作为测试集(test set)。
工作流程: 1、首先对训练集执行训练算法(训练集会运行在不同的模型上, 得到不同模型的W,b参数). 2、通过验证集选择不同模型中表现最好的. 3、最后在测试集上对最好的模型进行无偏评估(步骤1、2是反复的尝试不同得到模型,最后得到最好的模型).
数据划分: 数据集规模相对较小,适用传统的划分比例,数据集规模较大的,验证集和测试集要小于数据总量的20%或10%。
现代深度学习的一个趋势是越来越多的人在训练集和测试集分布不匹配的情况下进行训练。针对这种情况,根据经验,建议大家要确保验证集和测试集的数据来自同一分布。
最后一点,就算没有测试集也不要紧,测试集的目的是对最终所选定的神经网络系统做出无偏估计,如果不需要无偏估计,就可不设置测试集。所以我们要做的就是,在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。
在机器学习中,如果只有一个训练集和一个验证集,而没有独立的测试集,遇到这种情况,训练集还被人们称为训练集,而验证集则被称为测试集,不过在实际应用中,人们只是把测试集当成简单交叉验证集使用,并没有完全实现该术语的功能,因为他们把验证集数据过度拟合到了测试集中。
2. 偏差,方差
在多维空间数据中,绘制数据和可视化分割边界无法实现,但我们可以通过几个指标,来研究偏差和方差。
以上分析的前提都是假设基本误差(贝叶斯误差)很小,训练集和验证集数据来自相同分布(如果不是来自相同分布即使不存在过拟合它们之间的差距依然可能很大),如果没有这些假设作为前提,分析过程更加复杂。
3. 机器学习基础
初始模型训练完成后,首先要知道算法的偏差高不高,如果偏差较高(训练集或训练数据的性能)。甚至无法拟合训练集,那么就要选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多时间来训练网络,或者尝试更先进的优化算法。直到解决掉偏差问题,这是最低标准,反复尝试,直到可以拟合(或者过拟合)训练集。
一旦偏差降低到可以接受的数值,检查一下方差有没有问题,为了评估方差,我们要查看验证集性能。如果方差高,最好的解决办法就是采用更多数据,但有时候,无法获得更多数据,可以尝试通过正则化来减少过拟合。
4. 正则化
L2
正则化:
w
欧几里德范数的平方等于
L1
正则化:求所有
w
绝对值之和.
矩阵范数
∥W[l]∥2F
:定义为矩阵中所有元素的平方求和.矩阵范数被称作“弗罗贝尼乌斯范数”,用下标
F
标注.
该如何使用该范数实现梯度下降呢?
增加正则项后,就需要在
5. 为什么正则化有利于预防过拟合呢?
直观上理解就是如果正则化参数
λ
设置得足够大,权重矩阵
W
被设置为接近于0的值,于是基本上消除了这些隐藏单元的许多影响。这样更不容易发生过拟合。
6. dropout 正则化
工作流程: dropout会遍历网络中每一层,并设置消除神经网络中节点的概率(可为不同层设置不同保留率,也可同一设置)。对于每个训练样本,都将采用一个精简后神经网络来训练它。
如何实施dropout呢?
有几种方法,我们讲最常用的的方法反向随机失活(inverted dropout) keep-prob它表示保留某个隐藏单元的概率;在
你会发现对于不同的训练样本,在清除某层的神经元也不同。事实上如果你通过相同训练集多次传递数据,那么训练集每次的梯度都将不同。
如何对使用了dropout已训练好的模型进行测试呢?
在测试阶段我们不用dropout,如上图所示。这是因为在测试阶段进行预测时不希望输出结果是随机的。
7. 理解 dropout
让我们看单个神经元,由于特征都有可能被随机清除,所以不能给任何一个输入加上太多权重,对于单元的四个输入只给一点权重;dropout将产生收缩权重的平方范数的效果,和之前的L2正则化类似。
对于不同的层我们可能有不同的dropout率,对于参数比较多的层我们可以把keep_prob设置比较小的值,这个有点像处理L2的正则化参数
λ
;对于输入层我们的keep_prob会接近1。
8. 其他正则化方法
工作流程: 每执行n次梯度下降后观察验证集误差,如果多个n次验证集误差都没有下降就停止训练。
9. 归一化输入
10. 神经网络的权重初始化
tanh激活函数(Xavier初始化): 方差
Var(wi)=1n[l−1]
Relu激活函数:方差
Var(wi)=2n[l−1]
Yoshua Bengio提出:方差
Var(wi)=2n[l−1]∗n[l]