文章目录
一、训练,验证,测试集(Train/Dev/Test sets)
本周我们将继续学习如何有效运作神经网络,内容涉及超参数调优,如何构建数据以及如何确保优化算法快速运行,从而使学习算法在合法时间内完成自我学习。
在机器学习发展的小数据量时代,如果没有明确设置验证集,可以按照60%训练,20%验证和20%测试集来划分。
但是在大数据时代,我们现在的数据量可能是百万级别。假设我们有100w条数据,其中1w条作为验证集,1w条作为测试机,98w作为训练集。对于数据量过百万的应用,训练集可以占到99.5%,验证和测试集各占0.25%。
二、偏差,方差(Bias/Variance)
深度学习的误差很少权衡二者,我们总是分别考虑偏差和方差,却很少谈及偏差和方差的权衡问题。
三、机器学习基础
尝试这些方法,可能有用,可能没用。
如果偏差很高:1.选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络。2.花费更多时间来训练网络。3.尝试更先进的优化算法
如果方差高:1.采用更多的数据。2.正则化
四、正则化
过拟合有两个解决方法,一个是正则化,另一个是准备更多数据,这是非常可靠的方法,但是你可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高,但正则化通常有助于避免过拟合或减少你的网络误差。
L2正则化
五、为什么正则化有利于预防过拟合
直观上理解就是如果正则化𝜆设置得足够大,权重矩阵W被设置为接近于0的值,直观上理解就是把更多的隐藏单元的权重𝜆设为0,于是基本上消除了这些隐藏单元的很多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近高偏差状态。
但是𝜆会存在一个中间值,于是会有一个接近“Just Right”的中间状态。
六、dropout正则化
除了L2正则化,还有一个非常实用的正则化方法–“Dropout”(随机失活),我们来看看它的工作原理。
我们复制这个神经网络,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是0.5,设置完节点概率,我们会消除一些节点,然后删除从该节点的连线,最后得到一个节点更少,规模更小的网络,然后用backprop方法进行训练。
七、理解dropout
直观上理解:不要以来于任何一个特征,因为该单元的输入可能随时被清除,因此该单元通过这种方式传播下去,并为单元的四个输入增加一点权重,通过传播所有权重,dropout将产生收缩权重的平方范数的效果,和之前讲的L2正则化类似。
八、其他正则化方法
除了L2正则化和随机失活(dropout)正则化,还有几种方法可以减少神经网络中的过拟合:
一、数据扩增
随意翻转和裁剪图片,我们可以增大数据集,额外生成假训练数据。
二、early stopping
九、归一化输入
训练神经网络,其中一个加速训练的方法就是归一化输入。假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:
1.零均值
2.归一化方差
我们希望无论是训练集和测试集都是通过相同的u和𝜎2定义的数据转换,这两个是由训练集得出来的。
十、梯度消失/梯度爆炸
在这样一个深度神经网络中,如果激活函数或梯度函数以与L相关的指数增长或递减,它们的值将会变得极大或极小,从而导致训练难度上升,尤其是梯度指数小于L时,梯度下降法的步长会非常非常小,梯度下降法花费的时间很长时间来学习。
总结一下,我们讲了深度学习网络是如何产生梯度消失或梯度爆炸问题的,实际上,在很长一段时间内,它曾是训练深度学习网络的阻力,虽然有一个不能彻底解决此问题的解决方案,但是已在如何选择初始化权重问题上提供了很多帮助。
十一、神经网络的权重初始化
上节课,我们学习了深度学习网络如何产生梯度消失和梯度爆炸问题,最终针对该问题,我们提出了一个不完整的解决方案,虽然不能彻底解决问题,却很有用,有助于我们为神经网络更谨慎地选择随机初始化参数,为了更好地理解它,我们先举一个神经单元初始化的例子,然后再演变到整个深度网络。
𝑧 = 𝑤1𝑥1 + 𝑤2𝑥2 + ⋯ + 𝑤𝑛𝑥𝑛,𝑏 = 0,为了防止z过大或过小,设置wi=1/n,n表示神经元的输入特征数量。实际上,你要做的就是设置𝑤[𝑙] = 𝑛𝑝. 𝑟𝑎𝑛𝑑𝑜𝑚. 𝑟𝑎𝑛𝑑𝑛(shape) ∗ np. sqrt(1/n[l-1])。
总结,对于tanh函数,它是sqrt(1/n[l-1]),被称为Xavier初始化。如果你想要Relu函数,我会用这个公式sqrt(2/n[l-1])。
十二、梯度的数值逼近
十三、梯度检验
注意这里(||𝑑𝜃approx − 𝑑𝜃||2)没有平方,它是误差平方之和,然后求平方根。
检查图片中分式和给定的10^-5的大小,判断great or wrong.
编程作业
略