一、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