深度学习的实用层面
数据的划分
给定一堆数据,我们需要将数据划分为训练集,验证集和测试集。训练集用于训练模型,验证集用于从不同的模型中选出最优的结构,测试集用于检测模型的泛化性能。
对于小数据,通常按照7/3(只分训练和测试)或者6/2/2。
对于大数据(百万级数据),按照98/1/1或者99.5/0.4/0.1划分。
验证集和测试集最好有同一个来源并且分布相同;若从同一堆数据中分割训练集、验证集和测试集,那么三个集合的分布最好与原始数据的分布一致。
bias和variance
high bias 通常是指训练模型不能很好的拟合训练数据(在训练集中错误率较高)
high variance 通常是指训练模型没有很好的泛化性能(在测试集中错误率较高)
当train set error为 1%,dev(验证集)set error为11%时,成为high variance;当train set error为 15%,dev(验证集)set error为16%时,成为high bias,因为训练集与验证集的误差相差不大;当train set error为 15%,dev(验证集)set error为31%时,成为high bias 和 high variance(训练集与验证集的误差都很高,但是验证集的误差更高)。吴恩达在视频中提到,以上假设的前提是人眼能充分识别样本集中的所有样本,即最优错误率(bages error)为0%时,上述情况是成立的。当最优错误率为15%时,那么训练集的错误率为15%就不能成为high bias。
high bias和high variance是说训练样本过分拟合了训练集中的部分数据,但对其余数据是线性分布。
模型训练的基本观点
对于high bias的情况,可以使用更深的网络,更长的训练时间,甚至选择不同的神经网络结构来调整
对于high variance的情况,可以用更多的数据训练并通过正则化来减少过拟合。(正则化后的网络加深只会增大训练时间。正常来说,正则化之后的网络variance降低但bias增大,但可以通过使用更大更深的网络来避免这种情况)
regularization
添加范数
范数可以为二范数,也可以为一范数。
在模型训练的过程中
是通过验证集来配置。
为什么添加范数可以防止过拟合
过拟合很大程度上是因为训练的模型过于复杂导致的。以正则化项为二范数为例
所以
所以参数
变小,权重衰减(weight decay),对于激活函数(如tanh),当权重很小时,激活函数可以近似为线性函数,若多个网络层全为近似线性的函数,那么训练出的模型也可近似认为是线性,所以整个网络复杂度就会降低,很好的预防了过拟合。
如果用一范数作为正则化项,可以在一定程度上使权重表现出很好的稀疏度
Dropout
定义
以一定概率消除网络中的某些节点,并消除进入和离开该节点的连线。
实现方法
吴恩达是通过随机化一个与权重矩阵大小相同的随机矩阵,若随机矩阵上的值小于keep_prob,那么就将这些位置上的值设为0。做了这些处理之后,权重矩阵的均值会减少,因此需要将处理后的权重矩阵除以keep_prob。
在实现dropout的backward时,可以根据权重矩阵,对那些为0位置上的权重不进行权重的更新。
测试阶段不会使用 dropout,因为不想使结果随机
优势
因为每一个节点都可能被取消,因此训练的网络不会过分依赖某一个feature,但是缺点是该方法不能很好的表述。
因为dropout可能带来欠拟合的现象,因此除非过拟合,否则不使用dropout。
其他regularization的方法
- 数据增强
- early stopping
normalization
均值零化
归一化方差
当输入测试集时同样需要归一化。
在normalization之后,可以选用较大的学习率,比较快速的实现梯度下降。
对于图片这种输入在一定范围内的输入一般不需要做normalization
梯度消失和梯度爆炸
当权重大于1时,随着神经网络的加深,权重会越来越大,发生梯度爆炸。
当权重小于1时,随着神经网络的加深,权重会越来越小,发生梯度消失。
为了防止这种情况的发生,权重通常选择1的近似值,所以在权重初始化时,通常会乘上系数。
- ReLU的初始化:
- tanh的初始化: 或