吴恩达深度学习总结(5)

数据的划分

给定一堆数据,我们需要将数据划分为训练集,验证集和测试集。训练集用于训练模型,验证集用于从不同的模型中选出最优的结构,测试集用于检测模型的泛化性能。
对于小数据,通常按照7/3(只分训练和测试)或者6/2/2。
对于大数据(百万级数据),按照98/1/1或者99.5/0.4/0.1划分。
验证集和测试集最好有同一个来源并且分布相同;若从同一堆数据中分割训练集、验证集和测试集,那么三个集合的分布最好与原始数据的分布一致。

bias和variance

high bias 通常是指训练模型不能很好的拟合训练数据(在训练集中错误率较高)
high variance 通常是指训练模型没有很好的泛化性能(在测试集中错误率较高)
当train set error为 1%,dev(验证集)set error为11%时,成为high variance;当train set error为 15%,dev(验证集)set error为16%时,成为high bias,因为训练集与验证集的误差相差不大;当train set error为 15%,dev(验证集)set error为31%时,成为high bias 和 high variance(训练集与验证集的误差都很高,但是验证集的误差更高)。吴恩达在视频中提到,以上假设的前提是人眼能充分识别样本集中的所有样本,即最优错误率(bages error)为0%时,上述情况是成立的。当最优错误率为15%时,那么训练集的错误率为15%就不能成为high bias。
high bias和high variance是说训练样本过分拟合了训练集中的部分数据,但对其余数据是线性分布。

模型训练的基本观点

对于high bias的情况,可以使用更深的网络,更长的训练时间,甚至选择不同的神经网络结构来调整
对于high variance的情况,可以用更多的数据训练并通过正则化来减少过拟合。(正则化后的网络加深只会增大训练时间。正常来说,正则化之后的网络variance降低但bias增大,但可以通过使用更大更深的网络来避免这种情况)

regularization

添加范数

J ( ω , b ) = 1 m i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ω F J(\omega, b) = \frac{1}{m}\sum_{i=1}^m\mathcal{L}(\hat{y}^{(i)}, y^{(i)}) + \frac{\lambda}{2m}||\omega||_F
范数可以为二范数,也可以为一范数。
ω 2 2 = j = 1 n x ω j 2 = ω T ω ||\omega||_2^2 = \sum_{j=1}^{n_x} \omega_j^2 = \omega^T\omega
ω 1 = i = 1 n x ω i ||\omega||_1 = \sum_{i=1}^{n_x}|\omega_i
在模型训练的过程中 λ \lambda 是通过验证集来配置。

为什么添加范数可以防止过拟合

过拟合很大程度上是因为训练的模型过于复杂导致的。以正则化项为二范数为例
d ω [ l ] = ( from backward ) + λ m ω [ l ] d\omega^{[l]} = (\text{from backward}) + \frac{\lambda}{m}\omega^{[l]}
ω [ l ] = ω [ l ] α d ω [ l ] \omega^{[l]} = \omega^{[l]} - \alpha d\omega^{[l]}
所以
ω [ l ] = ω [ l ] α [ ( from backward ) + λ m ω [ l ] ] \omega^{[l]} = \omega^{[l]} - \alpha [(\text{from backward}) + \frac{\lambda}{m}\omega^{[l]}]
= ( 1 α λ m ) ω [ l ] α ( from backward ) = (1- \frac{\alpha\lambda}{m})\omega^{[l]} - \alpha(\text{from backward})
所以参数 ω [ l ] \omega^{[l]} 变小,权重衰减(weight decay),对于激活函数(如tanh),当权重很小时,激活函数可以近似为线性函数,若多个网络层全为近似线性的函数,那么训练出的模型也可近似认为是线性,所以整个网络复杂度就会降低,很好的预防了过拟合。
如果用一范数作为正则化项,可以在一定程度上使权重表现出很好的稀疏度

Dropout

定义

以一定概率消除网络中的某些节点,并消除进入和离开该节点的连线。

实现方法

吴恩达是通过随机化一个与权重矩阵大小相同的随机矩阵,若随机矩阵上的值小于keep_prob,那么就将这些位置上的值设为0。做了这些处理之后,权重矩阵的均值会减少,因此需要将处理后的权重矩阵除以keep_prob。
在实现dropout的backward时,可以根据权重矩阵,对那些为0位置上的权重不进行权重的更新。
测试阶段不会使用 dropout,因为不想使结果随机

优势

因为每一个节点都可能被取消,因此训练的网络不会过分依赖某一个feature,但是缺点是该方法不能很好的表述。
因为dropout可能带来欠拟合的现象,因此除非过拟合,否则不使用dropout。

其他regularization的方法

  1. 数据增强
  2. early stopping

normalization

均值零化
μ = 1 m i = 1 m x ( i ) \mu = \frac{1}{m}\sum_{i=1}^m x^{(i)}
x = x μ x= x-\mu
归一化方差
σ 2 = 1 m i = 1 m x ( i ) 2 \sigma^2 = \frac{1}{m}\sum_{i=1}^m x^{(i)}**2
x = x / σ 2 x = x/\sigma^2
当输入测试集时同样需要归一化。
在normalization之后,可以选用较大的学习率,比较快速的实现梯度下降。
对于图片这种输入在一定范围内的输入一般不需要做normalization

梯度消失和梯度爆炸

当权重大于1时,随着神经网络的加深,权重会越来越大,发生梯度爆炸。
当权重小于1时,随着神经网络的加深,权重会越来越小,发生梯度消失。
为了防止这种情况的发生,权重通常选择1的近似值,所以在权重初始化时,通常会乘上系数。

  1. ReLU的初始化: ω [ l ] = n p . r a n d o m . r a n d n ( s h a p e ) n p . s q r t ( 2 n [ l 1 ] ) \omega^{[l]} = np.random.randn(shape)*np.sqrt(\frac{2}{n^{[l-1]}})
  2. tanh的初始化: ω [ l ] = n p . r a n d o m . r a n d n ( s h a p e ) n p . s q r t ( 1 n [ l 1 ] ) \omega^{[l]} = np.random.randn(shape)*np.sqrt(\frac{1}{n^{[l-1]}}) ω [ l ] = n p . r a n d o m . r a n d n ( s h a p e ) n p . s q r t ( 2 n [ l 1 ] n [ l ] ) \omega^{[l]} = np.random.randn(shape)*np.sqrt(\frac{2}{n^{[l-1]}*n^{[l]}})

猜你喜欢

转载自blog.csdn.net/qq_33669204/article/details/83279604