吴恩达深度学习--神经网络的优化(1)

1.训练集,验证集,测试集

选择最佳的Train/Dev/Test sets非常重要。除此之外,构建神经网络时,需要设置的参数很多:神经网络层数,神经元个数,学习率的大小。**函数的选择等等。实际上很难第一次就确定好这些参数,大致过程是:

先确定初始参数,构建神经网络模型,然后通过代码实现该模型,之后进行试验确定模型的性能。根据性能再不断调整参数,重复上述过程,直到让神经网络模型最优。

由上述可知,深度学习是一个不断迭代优化的过程,效率取决于单次试验所花费的时间,而设置合适的Train/Dev/Test sets数量,能有效提高训练效率。

对于如今的大数据样本,Train/Dev/Test sets的比例通常可以设置为98%/1%/1%,或者99%/0.5%/0.5%。样本数据量越大,相应的Dev/Test sets的比例可以设置的越低一些。

另外一个值得注意的问题是:训练样本和测试样本分布上不匹配,即训练样本和测试样本来自于不同的分布。解决方法就是尽量使两者处于统一分布。
具体做法有:对于一张图片,可以让图片转向或者截取图片的一部分,识别一些数字时可以使数字进行稍微的变形等等。

偏差和方差

如下图所示,显示了二维平面上,可见,高偏差(high bias)对应着欠拟合,而高方差(high variance)对应着过拟合。
在这里插入图片描述减少high bias的方法通常是增加神经网络的隐藏层个数、神经元个数,训练时间延长,选择其它更复杂的模型等。

减少high variance的方法通常是增加训练样本数据,进行正则化Regularization,选择其他更复杂的NN模型等。

正则化

逻辑回归中采用L2正则化的表达式为:
在这里插入图片描述
λ就是正则化参数(超参数的一种)。可以设置λ为不同的值,在Dev set中进行验证,选择最佳的λ。
因为w的维度很大,b只是一个常数,很大程度上b对整体模型的影响很小,所以可以不对b进行正则化。

在深度学习模型中:
在这里插入图片描述

由于加入了正则化项,梯度下降算法中的 d w [ l ] dw^{[l]} 计算表达式需要做如下修改
在这里插入图片描述
由于加上了正则项, d w [ l ] dw^{[l]} 有个增量,在更新 w [ l ] w^{[l]} 的时候,会多减去这个增量,使得 w [ l ] w^{[l]} 比没有正则项的值要小一些。不断迭代更新,不断地减小。

为什么正则化能够有效避免high variance,防止过拟合呢?
当λ很大时,w就会很小接近于0,意味着该神经网络模型中的某些神经元实际的作用很小,可以忽略。从效果上来看,其实是将某些神经元给忽略掉了。这样原本过于复杂的神经网络模型就变得不那么复杂了,而变得非常简单化了

第二种防止过拟合的方法:Dropout
Dropout是指在深度学习网络的训练过程中,对于每层的神经元,按照一定的概率将其暂时从网络中丢弃。也就是说,每次训练时,每一层都有部分神经元不工作,起到简化复杂网络模型的效果,从而避免发生过拟合。

对于同一组训练数据,利用不同的神经网络训练之后,求其输出的平均值可以减少overfitting。Dropout就是利用这个原理,每次丢掉一定数量的隐藏层神经元,相当于在不同的神经网络上进行训练,这样就减少了神经元之间的依赖性,即每个神经元不能依赖于某几个其他的神经元。

此方法在计算机视觉应用很多,其他应用很少。

第三种防止过拟合的方法:early stoping

一个神经网络模型随着迭代训练次数增加,train set error一般是单调减小的,而dev set error 先减小,之后又增大。也就是说训练次数过多时,模型会对训练样本拟合的越来越好,但是对验证集拟合效果逐渐变差,即发生了过拟合。因此,迭代训练次数不是越多越好,可以通过train set error和dev set error随着迭代次数的变化趋势,选择合适的迭代次数,即early stopping。

但是Early stopping的做法通过减少得带训练次数来防止过拟合,这样J就不会足够小.
在这里插入图片描述归一化:主要是为了让所有输入归一化同样的尺度上,方便进行梯度下降算法时能够更快更准确地找到全局最优解。

相关文章
相关标签/搜索