Improving Deep Neural Networks (Week1)---Practical aspects of Deep Learning

一、Train/Dev/Test sets

介绍使得神经网络在实际操作过程中高效的方法,如:超参数调整、数据准备、优化算法、时间调整

因此,机器学习是一个高度迭代的过程,不断尝试超参数的选择,通过比较以得到最优的选择

1、较快速得到较好结果的方式之一就是:将数据集分为train sets\dev sets\test sets

dev set的作用是:评估几个算法中,哪个算法效果最优

test set 是:在确定最优算法后,最终确定其表现如何

数据集较小的话:采用传统的分割比例:6:2:2

数据集很大:98:1:1(如100万条数据)

2、训练集与测试集的数据分布不匹配:如在进行识别猫的应用时,训练集的图片是从网上爬下来的,而测试集的图片是用户自己上传的,这就导致了训练集和测试集的数据分布不匹配,训练集的数据多是高分辨率的,而测试集的数据分辨率较低,就造成了问题。

因此,要保证测试集和数据集的数据分布要一致

3、没有测试集也是可以的,测试集的目的是通过一个无偏估计来评价最终选取的网络的性能,因此只有dev数据集而没有测试集也是可以的,

这时,应该用训练集尝试不同的模型结构,用开发集进行评估,并根据结果进行进一步迭代

二、Bias / Variance

train+dev表现都不好是欠拟合,但数值差距不大,(一个是15%,另一个是16%)高偏差

train表现好,Dev表现不好是过拟合,高方差

train-15%,dev-30%,即对数据集拟合不好是过偏差,且两者数据差距又大,是高方差

train-0.5%,dev-1%,都对数据拟合较好,低偏差,且两者数据差距又小,是低方差,这是较优的算法

上述前提是,人为误差为0

若没有好的分类器,如何分析偏差和方差?

三、Basic Recipe for Machine Learning

当训练好一个神经网络模型时,要首先为是否存在高偏差问题

四、Regularization

解决高方差问题:正则化、加大数据量

一般采用正则化,

一般使用L2正则化,即对w进行平方后求和,而L1正则化则是直接对w进行求和而不平方

在神经网络中,需要对每一层所有的w进行平方后求和

加上正则化项之后,会对权重进行衰减

五、Why regularization reduces overfitting?

 增加正则化项以避免权重矩阵过大,but why?

把正则化项lamda设置的很大,权重矩阵w的取值会很接近于0,相当于消除了某个隐藏单元的影响,即相当于删除了某些特征,把一个很大的神经网络变成一个很小的神经网络

但这样会造成其特征减少,出现欠拟合现象

直观理解就是:通过增大λ,减小了w,从而减小了Z,而在tanh函数中,Z值较小时,相当于线性函数,这样一来就减少了过拟合时产生的那些曲线,因此会减少过拟合现象,

六、Dropout Regularization

遍历网络中每一层的每一个节点,并为丢弃网络中的某个节点设置一个概率值,决定消除哪个节点,清除那些节点上所有正在进行的运算,得到一个简化很多的较小的神经网络,之后再做BP

对不同的训练样本可以重新设置概率,重新删除某些节点

总之,dropout也是通过减少隐藏节点个数,即特征值以避免过拟合  

七、Understanding Dropout

因为神经网络中的每一个单元都有被随机删除的可能性,所以每个的权值都会比较小,即也是通过缩小权值的方式进行的。

对于某些W值多的层,可以设置较小的留存率,即可以删除某些值

原理上也可以对输入层进行Droupout,直接随机删除某些特征,但实践中一般不这么做,会把留存率设置到1或0.9等较大的值

注:只有在过拟合状态下再考虑使用Droupout,除了计算机视觉领域,一般其他领域不会这么做

八、other regularization methods

1.加数据(通过转移图像,如水平平移、随机剪裁图像、)

2.early stopping,在迭代到一定次数时,可以停止迭代,J的值已经足够小,以避免W过大

九、Normalizing inputs

目的是为了对输入进行归一化处理

对数据的输入进行减平均数然后除以方差,但要注意对于训练集和测试集使用的平均数和方差要一致

进行归一化操作的好处是:使得代价函数看起来更加对称,可以在梯度下降中采用更长的步长

但是否进行归一化取决于输入的数据之间区别是否是很大的,如一种是0-1,另一种是100-1000;如果差距不大,就不需要做归一化处理了

十、Vanishing / Exploding gradients

当训练一个层数非常多的神经网络时,梯度会出现消失和爆炸,使得训练很难进行

即如果一个神经网络足够深,会出现梯度消失和梯度爆炸问题

十一、Weight Initialization for Deep Networks

其中一种较好的方法就是更好、更细致地随机初始化神经网络

1、初始化单个神经元

十二、Numerical approximation of gradients

梯度检验以确保BP梯度计算时的梯度逆传播的实现是正确的

使用双侧差值检验而非不够精确的单侧差值

十三、Gradient checking

讨论如何使用梯度检查来调试代码,并检验反向传播代码

十四、Gradient Checking Implementation Notes

猜你喜欢

转载自blog.csdn.net/weixin_38527856/article/details/86621064