吴恩达深度学习总结(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 J(ω,b)=m1i=1mL(y^(i),y(i))+2mλωF
范数可以为二范数,也可以为一范数。
∣ ∣ ω ∣ ∣ 2 2 = ∑ j = 1 n x ω j 2 = ω T ω ||\omega||_2^2 = \sum_{j=1}^{n_x} \omega_j^2 = \omega^T\omega ω22=j=1nxωj2=ωTω
∣ ∣ ω ∣ ∣ 1 = ∑ i = 1 n x ∣ ω i ||\omega||_1 = \sum_{i=1}^{n_x}|\omega_i ω1=i=1nxωi
在模型训练的过程中 λ \lambda λ 是通过验证集来配置。

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

过拟合很大程度上是因为训练的模型过于复杂导致的。以正则化项为二范数为例
d ω [ l ] = ( from backward ) + λ m ω [ l ] d\omega^{[l]} = (\text{from backward}) + \frac{\lambda}{m}\omega^{[l]} dω[l]=(from backward)+mλω[l]
ω [ l ] = ω [ l ] − α d ω [ l ] \omega^{[l]} = \omega^{[l]} - \alpha d\omega^{[l]} ω[l]=ω[l]αdω[l]
所以
ω [ l ] = ω [ l ] − α [ ( from backward ) + λ m ω [ l ] ] \omega^{[l]} = \omega^{[l]} - \alpha [(\text{from backward}) + \frac{\lambda}{m}\omega^{[l]}] ω[l]=ω[l]α[(from backward)+mλω[l]]
= ( 1 − α λ m ) ω [ l ] − α ( from backward ) = (1- \frac{\alpha\lambda}{m})\omega^{[l]} - \alpha(\text{from backward}) =(1mαλ)ω[l]α(from backward)
所以参数 ω [ l ] \omega^{[l]} ω[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)} μ=m1i=1mx(i)
x = x − μ x= x-\mu x=xμ
归一化方差
σ 2 = 1 m ∑ i = 1 m x ( i ) ∗ ∗ 2 \sigma^2 = \frac{1}{m}\sum_{i=1}^m x^{(i)}**2 σ2=m1i=1mx(i)2
x = x / σ 2 x = x/\sigma^2 x=x/σ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]}}) ω[l]=np.random.randn(shape)np.sqrt(n[l1]2)
  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]=np.random.randn(shape)np.sqrt(n[l1]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]}}) ω[l]=np.random.randn(shape)np.sqrt(n[l1]n[l]2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值