Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization--笔记(第一周)
1、深度学习如何划分数据集
第一点:传统的机器学习划分数据集的方法是把数据集划分为70%训练集,30%测试集。或者是60%训练集,20%交叉验证集,20%的测试集,这在很长一段时间内被验证是最佳的分类方法。这样划分是为了验证算法的泛化能力和算法的效果,但是如果训练集非常非常巨大,在训练集上性能表现很好,虽然降低交叉验证集和测试集的比例,但是也可以很好的有很好的表现。
第二点:训练集和测试集要同分布,这样可以使算法更快的收敛(如不同数据来源的数据)
第三点:交叉验证集和测试集的目的是为了得到模型的无偏估计,如果不需要无偏估计,可以不需要交叉验证集。需要做的是用不同的算法进行训练,寻找对开发集拟合最好的模型。但是有可能会遇到算法在测试集上过拟合的问题
2、方差和偏差困境:
如下图:
通常我们会假设是理想的方差(贝叶斯方差/真人识别的错误概率)为0
如图四种类型算法的方差和偏差结果:
第一种:高方差算法
第二种:高偏差
第三种:高方差&高偏差
第四种:低方差和低偏差
如果数据来源比较模糊,无论是真人或者是任何系统都不能拿识别,理想方差本身就是比较的,第二种算法就是得到的最完美的结构了。当然还可以对原始数据进行处理,降低方差
高方差和高偏差出现的可能需要调整设置的拟合的算法
3、机器学习的基本准则
训练完最初的神经网络算法之后,看算法存在的问题:
高偏差问题
第一、调整的神经网络算法的参数(更多的隐藏层/更多的隐藏单元/让梯度下降法运行更长时间)
第二、选择更适合解决目前问题的算法
高方差问题
第一、获取更多样本量(图片可以使用图片选择增加技术、随机截取图片进行扭曲)
第二、调整正则化系数
第三、选择更适合解决目前问题的算法
获取更多的数据也许是解决高方差(过拟合)问题的有效途径,但是现实中获取更多样本如果不是很方便,调整正则化系数也许也是个可靠的方法
对神经网络的正则化
增加正则项:在cost函数中加入正则化项,常用的是L2范数
dropout(随机失活)正则化:随机使部分神经网络节点系数为0,控制过拟合,应用在计算机视觉领域较多,在其他领域用的相对较少。 该方法的缺点是cost函数比较不确定
数据集扩增:旋转图片,随机截取扭曲图片增加伪训练集的样本数量,提供更多的样本的信息
早终止法(early stopping):测试集和训练集误差之和最小时提前终止
归一化可以加速神经网络的训练
梯度消失和梯度爆炸的问题,可以通过合理设置初始化值以及设置适合的**函数处理(如relu)
梯度检验方法注意事项:
一、在测试bug时,可以使用梯度检验的方法,可以检验自己写的算法在反向传播中是否出现问题,一般情况下检验的结果应该远远小于10的-3次方
二、注意使用正则化项
三、不要使用dropout随机失效正则化方法