目录
1.前言
深度学习难以在大数据领域发挥最大效果的一个原因是,在巨大的数据集基础上进行训练速度很慢。而优化算法能够帮助我们快速训练模型,提高计算效率。接下来我么就去看有哪些方法能够解决我们刚才遇到的问题或者类似的问题
1.设备问题-----通过gpu提高训练速度
2.优化算法----减少梯度消失,梯度爆炸,局部最优 问题(在梯度函数上出现的以指数级递增或者递减的情况分别称为梯度爆炸或者梯度消失。 )
2. 数据集划分
首先我们对机器学习当中涉及到的数据集划分进行一个简单的复习
-
训练集(train set):用训练集对算法或模型进行训练过程;
-
验证集(development set):利用验证集(又称为简单交叉验证集,hold-out cross validation set)进行交叉验证,选择出最好的模型;-----一般省略
-
测试集(test set):最后利用测试集对模型进行测试,对学习方法进行评估。
在小数据量的时代,如 100、1000、10000 的数据量大小,可以将数据集按照以下比例进行划分:
-
无验证集的情况:70% / 30%
-
有验证集的情况:60% / 20% / 20%
而在如今的大数据时代,拥有的数据集的规模可能是百万级别的,所以验证集和测试集所占的比重会趋向于变得更小。
-
100 万数据量:98% / 1% / 1%
-
超百万数据量:99.5% / 0.25% / 0.25%
以上这些比例可以根据数据集情况选择。
3.偏差与方差的
“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。
泛化误差可分解为偏差、方差与噪声,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。
-
偏差:度量了学习算法的期望预测与真实结果的偏离程度 ,即刻画了学习算法本身的拟合能力 越小越好--出现欠拟合问题
-
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响--出现过拟合问题
-
噪声:表达了在当前任务上任何学习算法所能够达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
那么偏差、方差与我们的数据集划分到底有什么关系呢?
-
1、训练集的错误率较小,而验证集/测试集的错误率较大,说明模型存在较大方差,可能出现了过拟合
-
2、训练集和测试集的错误率都较大,且两者相近,说明模型存在较大偏差,可能出现了欠拟合
-
3、训练集和测试集的错误率都较小,且两者相近,说明方差和偏差都较小,这个模型效果比较好。
所以我们最终总结,方差一般指的是数据模型得出来了,能不能对未知数据的扰动预测准确。而偏差说明在训练集当中就已经误差较大了,基本上在测试集中没有好的效果。
所以如果我们的模型出现了较大的方差或者同时也有较大的偏差,该怎么去解决?
解决方法:
对于高方差(过拟合),有以下几种方式:
获取更多的数据,使得训练能够包含所有可能出现的情况
正则化(Regularization)
寻找更合适的网络结构----神经元太多了,少一点
对于高偏差(欠拟合),有以下几种方式:
扩大网络规模,如添加隐藏层或者神经元数量
寻找合适的网络架构,使用更大的网络结构,如AlexNet
训练时间更长一些
不断尝试,直到找到低偏差、低方差的框架。
4正则化
正则化,即在损失函数中加入一个正则化项(惩罚项),惩罚模型的复杂度,防止网络过拟合
逻辑回归的L1与L2正则化:
在损失函数中增加一项,那么其实梯度下降是要减少损失函数的大小,对于L2或者L1来讲都是要去减少这个正则项的大小,那么也就是会减少W权重的大小。这是我们一个直观上的感受。
4.1其它正则化方法
早停止法(Early Stopping)
数据增强
数据增强
-
数据增强
指通过剪切、旋转/反射/翻转变换、缩放变换、平移变换、尺度变换、对比度变换、噪声扰动、颜色变换等一种或多种组合数据增强变换的方式来增加数据集的大小。
即使卷积神经网络被放在不同方向上,卷积神经网络对平移、视角、尺寸或照度(或以上组合)保持不变性,都会认为是一个物体。
我们需要减少数据集中不相关特征的数量。对上面的汽车类型分类器来说,你只需要将现有的数据集中的照片水平翻转,使汽车朝向另一侧。现在,用新的数据集训练神经网络,通过过增强数据集,可以防止神经网络学习到不相关的模式,提升效果。