【吴恩达深度学习笔记】2.1 深度学习实践方面Practical aspects of Deep Learning

第二门课 改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning,Regularization and Optimization)

1.1训练,验证,测试集(Train / Dev / Test sets)

训练数据通常划分为:

  • 训练集(training set):尝试不同的模型框架训练数据,
  • 验证集(development set):通过验证集或简单交叉验证集选择最好的算法模型
  • 测试集(test set):正确评估分类器的性能,对最终选定的神经网络系统做无偏估计

在机器学习发展的小数据量时代,一般60%训练集,20%验证集,20%测试集。大数据时代,验证集和测试集占数据总量的比例会趋于更小,一般小于数据总量的20%或10%。根据经验,建议确保验证集和测试集的数据来自同一分布。如果没有测试集也可以,一般训练集被称为测试集。在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据,其不再提供无偏性能评估。

1.2偏差,方差(Bias / Variance)

高偏差(high bias):数据欠拟合(underfitting
高方差(high variance):数据过度拟合(overfitting
适度拟合(just right
在这里插入图片描述

\high variancehigh biashigh bias&high variancelow bias&low variance
Train set error1%15%15%0.5%
Dev set error11%16%30%1%

1.3机器学习基础(Basic Recipe for Machine Learning)

在这里插入图片描述

  • 高偏差和高方差是两种不同的情况,通常会用训练验证集来诊断算法是否存在偏差或方差问题,然后根据结果选择尝试部分方法。若算法存在高偏差问题增加训练数据也没用。
  • 现在我们有工具可以做到在减少偏差或方差的同时,不对另一方产生过多不良影响。

1.4正则化(Regularization)

正则化可以避免过度拟合并减少神经网络的误差
w w w b b b是逻辑回归的两个参数, w ∈ R n x w\in \mathbb{R}^{n_x} wRnx是多维度参数矢量, b ∈ R b\in \mathbb{R} bR是一个实数,我们想要的是求成本函数的最小值,正则化表达式如下:

J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∥ w ∥ 2 2 J(w,b)=\frac{1}{m}\sum^{m}_{i=1}L(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}\left\| w\right\|^{2}_2 J(w,b)=m1i=1mL(y^(i),y(i))+2mλw22

L 2   r e g u l a r i z a t i o n : ∥ w ∥ 2 2 = ∑ j = 1 n x w j 2 = w T w L_2\space regularization:\left\| w\right\|^{2}_2=\sum^{n_x}_{j=1}w^{2}_j=w^Tw L2 regularization:w22=j=1nxwj2=wTw

此方法利用了欧几里得范数(2范数),称为 L 2 L2 L2正则化。此处只正则化 w w w而不正则化 b b b,因为 w w w通常是高维参数矢量,已经可以表达高偏差问题,加了参数 b b b并没有什么影响。 λ \lambda λ也是一个超参数 。

L 1   r e g u l a r i z a t i o n : λ 2 m ∑ j = 1 n x ∣ w j ∣ = λ 2 m ∥ w ∥ 1 L_1\space regularization:\frac{\lambda}{2m}\sum^{n_x}_{j=1}|w_j|=\frac{\lambda}{2m}\left\| w\right\|_1 L1 regularization:2mλj=1nxwj=2mλw1

L 1 L1 L1正则化 w w w最终是稀疏的,即 w w w向量中有很多0,实际上这样也并没有降低太多的存储内存,一般在训练网络时选择 L 2 L2 L2正则化。

J ( w [ 1 ] , b [ 1 ] , . . . , w [ L ] , b [ L ] ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∑ l = 1 L ∥ w [ l ] ∥ F 2 J(w^{[1]},b^{[1]},...,w^{[L]},b^{[L]})=\frac{1}{m}\sum^m_{i=1}L(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum^L_{l=1}\left\| w^{[l]}\right\|^{2}_F J(w[1],b[1],...,w[L],b[L])=m1i=1mL(y^(i),y(i))+2mλl=1Lw[l]F2

∥ w [ l ] ∥ F 2 = ∑ i = 1 n l − 1 ∑ j = 1 n l ( w i j l ) 2 \left\| w^{[l]}\right\|^{2}_F=\sum^{n^{l-1}}_{i=1}\sum^{n^{l}}_{j=1}(w^{l}_{ij})^2 w[l]F2=i=1nl1j=1nl(wijl)2

∥ w [ l ] ∥ F 2 \left\| w^{[l]}\right\|^{2}_F w[l]F2矩阵范数被称作“弗罗贝尼乌斯范数”,用下标 F F F标注,代表矩阵中所有元素的平方求和,其中 W : ( n [ l − 1 ] , n [ l ] ) W:(n^{[l-1]},n^{[l]}) W:(n[l1],n[l]) l l l为神经网络层数。

∂ J ∂ w [ l ] = d w [ l ] = ( f r o m   b a c k p r o p ) + λ m w [ l ] \frac{\partial J}{\partial w^{[l]}}=dw^{[l]}=(from\space backprop)+\frac{\lambda}{m}w^{[l]} w[l]J=dw[l]=(from backprop)+mλw[l]

w [ l ] : = w ( l ) − α d w [ l ] = w ( l ) − α [ ( f r o m   b a c k p r o p ) + λ m w [ l ] ] = w [ l ] − α λ m w [ l ] − α ( f r o m   b a c k p r o p ) w^{[l]}:=w^{(l)}-\alpha dw^{[l]}=w^{(l)}-\alpha [(from\space backprop)+\frac{\lambda}{m}w^{[l]}]=w^{[l]}-\frac{\alpha \lambda}{m}w^{[l]}-\alpha(from\space backprop) w[l]:=w(l)αdw[l]=w(l)α[(from backprop)+mλw[l]]=w[l]mαλw[l]α(from backprop)

矩阵 W W W前面的系数为 ( 1 − α λ m ) < 1 (1-\alpha \frac{\lambda}{m})<1 (1αmλ)<1,因此 L 2 L2 L2正则化有时被称为“权重衰减”。

1.5为什么正则化有利于预防过拟合?(Why regularzation reduces overfitting?)

如果正则化 λ \lambda λ设置得足够大,权重矩阵 W W W就设置为接近0,此时大量的隐藏单元的影响就变得很小,神经网络变得更简单,这样更不容易发生过拟合。

对于 t a n h tanh tanh函数,如果 λ \lambda λ很大, w [ l ] w^{[l]} w[l]很小, z z z也会很小, g ( z ) g(z) g(z)大致呈线性,若每层都是线性的,整个神经网络就是线性网络,即使网络很深,也不适用于非常复杂的决策,即不会发生过拟合。

1.6dropout正则化(Dropout Regularization)

dropout(随机失活)正则化会遍历网络的每一层,并设置消除网络中节点的概率。

最常用的方法实施dropout,即Inverted dropout(反向随机失活),定义向量 d d d d [ 3 ] d^{[3]} d[3]表示一个三层的dropout向量:

d3=np.random.rand(a3.shape[0],a3.shape[1])

判断 d 3 d3 d3是否小于keep-prob,keep-prob是一个具体的数字,表示保留某个隐藏单元的概率。若 k e e p − p r o b = 0.8 keep-prob=0.8 keepprob=0.8,表示消除任意一个隐藏单元的概率是0.2, d [ 3 ] d^{[3]} d[3]是一个矩阵,每个样本和每个隐藏单元, d [ 3 ] d^{[3]} d[3]中对应值为1的概率为0.8,对应为0的概率为0.2。

从第三层中获取激活函数 a [ 3 ] a^{[3]} a[3]:

a3=np.multiply(a3,d3) 或者a3 *= d3

最后向外扩展 a [ 3 ] a^{[3]} a[3],以便不影响后面的期望值。

a3 /= keep-prob

1.7理解dropout(Understanding Dropout)

实施dropout的结果使它会压缩权重,并完成一些预防过拟合的外层正则化, L 2 L2 L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小。

dropout一大缺点就是代价函数不再被明确定义,每次迭代都会随机移除一些节点。首先通常会关闭dropout函数,将keep-prob的值设为1,运行代码,确保J函数单调递减。然后打开dropout函数,希望在dropout过程中,代码并未引入bug。

1.8其他正则化方法(Other regularization methods)

  1. 数据扩增:翻转、旋转、扭曲图片以增大数据集
    在这里插入图片描述
  2. early stopping:在迭代过程和训练过程中 w w w的值会变得越来越大,通过early stopping在中间点停止迭代过程得到一个 w w w值中等大小的弗罗贝尼乌斯范数。
    在这里插入图片描述

early stopping的主要缺点是不能独立地处理这两个问题,因为提早停止梯度下降,也就停止优化代价函数 J J J,所以代价函数 J J J的值可能不够小,同时又希望不出现过拟合,你没有采取不同的方式来解决这两个问题,而是用一种方法同时解决两个问题。如果不用early stopping,另一种方法就是 L 2 L2 L2正则化,训练神经网络的时间就可能很长,导致超参数搜索空间更容易分解,也更容易搜索,但是缺点在于必须尝试很多正则化参数 λ \lambda λ的值,这也导致搜索大量 λ \lambda λ值的计算代价太高。

1.9归一化输入(Normalizing inputs)

归一化输入可以加速训练,归一化需要两个步骤:

  1. 零均值化: μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum^m_{i=1}x^{(i)} μ=m1i=1mx(i)是一个向量, x x x等于每个训练数据 x x x减去 μ \mu μ,即移动训练集直到完成零均值化。
  2. 归一化方差: σ 2 = 1 m ∑ i = 1 m ( x ( i ) ) 2 \sigma^2=\frac{1}{m}\sum^m_{i=1}(x^{(i)})^2 σ2=m1i=1m(x(i))2,所有数据除以向量 σ 2 \sigma^2 σ2使各特征方差差不多。

在这里插入图片描述
不论是训练数据还是测试数据都是通过相同 μ \mu μ σ 2 \sigma^2 σ2定义的相同数据转换,其中 μ \mu μ σ 2 \sigma^2 σ2是由训练集数据计算得来的。

归一化输入的原因:
在这里插入图片描述

1.10梯度消失/梯度爆炸(Vanishing / Exploding gradients)

训练神经网络时,深度神经网络通常会面临梯度消失或梯度爆炸的问题,就是导数或坡度有时会变得非常大或非常小,加大了训练难度。

1.11神经网络的权重初始化(Weight initialization for Deep Networks)

在一定程度上降低梯度消失/梯度爆炸的不利影响可以设置某层权重矩阵为:

w [ l ] = n p . r a n d o m . r a n d ( s h a p e ) ∗ n p . s q r t ( 1 n [ l − 1 ] ) w^{[l]}=np.random.rand(shape)*np.sqrt(\frac{1}{n^{[l-1]}}) w[l]=np.random.rand(shape)np.sqrt(n[l1]1)

1.12梯度的数值逼近(Nemerical approximation of gradients)

在执行梯度检验时使用双边误差 f ′ ( θ ) = f ( θ + ϵ ) − f ( θ + ϵ ) 2 ϵ f'(\theta)=\frac{f(\theta+\epsilon)-f(\theta+\epsilon)}{2\epsilon} f(θ)=2ϵf(θ+ϵ)f(θ+ϵ),其逼近误差可以写成 O ( ϵ 2 ) O(\epsilon^2) O(ϵ2),而不是单边误差 f ′ ( θ ) = f ( θ + ϵ ) − f ( θ ) ϵ f'(\theta)=\frac{f(\theta+\epsilon)-f(\theta)}{\epsilon} f(θ)=ϵf(θ+ϵ)f(θ),其逼近误差可以写为 O ( ϵ ) O(\epsilon) O(ϵ),其中 ϵ \epsilon ϵ为一个很小的数。

1.13梯度检验(Gradient checking)

实施梯度检验的过程,英语简称“grad check

Take W [ 1 ] , b [ 1 ] , . . . , W [ L ] , b [ L ] W^{[1]},b^{[1]},...,W^{[L]},b^{[L]} W[1],b[1],...,W[L],b[L] and reshape into a big vector θ \theta θ,即 J ( W [ 1 ] , b [ 1 ] , . . . , W [ L ] , b [ L ] ) = J ( θ ) = J ( θ 1 , θ 2 , θ 3 , . . . ) J(W^{[1]},b^{[1]},...,W^{[L]},b^{[L]})=J(\theta)=J(\theta _1,\theta _2,\theta _3,...) J(W[1],b[1],...,W[L],b[L])=J(θ)=J(θ1,θ2,θ3,...)

Take d W [ 1 ] , d b [ 1 ] , . . . , d W [ L ] , d b [ L ] dW^{[1]},db^{[1]},...,dW^{[L]},db^{[L]} dW[1],db[1],...,dW[L],db[L] and reshape into a big vector d θ d\theta dθ

循环执行,对每一个 i i i也就是每个 θ \theta θ组成元素计算 d θ a p p r o x [ i ] d\theta_{approx}[i] dθapprox[i]的值,使用双边误差:

d θ a p p r o x [ i ] = J ( θ 1 , θ 2 , . . . θ 1 + ϵ , . . . ) − J ( θ 1 , θ 2 , . . . θ 1 − ϵ , . . . ) 2 ϵ d\theta_{approx}[i]=\frac{J(\theta _1,\theta _2,...\theta_1+\epsilon,...)-J(\theta _1,\theta _2,...\theta_1-\epsilon,...)}{2\epsilon} dθapprox[i]=2ϵJ(θ1,θ2,...θ1+ϵ,...)J(θ1,θ2,...θ1ϵ,...)

只对 θ i \theta_i θi增加 ϵ \epsilon ϵ θ \theta θ其他项不变,对另一边减去 ϵ \epsilon ϵ θ \theta θ其他项不变。 d θ a p p r o x [ i ] d\theta_{approx}[i] dθapprox[i]应该接近 d θ [ i ] = ∂ J ∂ θ i d\theta[i]=\frac{\partial J}{\partial \theta_i} dθ[i]=θiJ d θ [ i ] d\theta[i] dθ[i]是代价函数的偏导数,需要对 i i i的每个值都执行这个运算,最后得到逼近值 d θ a p p r o x d\theta_{approx} dθapprox,取 ϵ = 1 0 − 7 \epsilon=10^{-7} ϵ=107时,求出 ∥ d θ a p p r o x − d θ ∥ 2 ∥ d θ a p p r o x ∥ 2 + ∥ d θ ∥ 2 \frac{\left \|d\theta_{approx}-d\theta\right \|_2}{\left \|d\theta_{approx}\right \|_2+\left \|d\theta\right \|_2} dθapprox2+dθ2dθapproxdθ2的值,若其在 1 0 − 7 10^{-7} 107范围内,则结果正确,若在 1 0 − 5 10^{-5} 105范围内,可能存在bug。

1.14梯度检验应用的注意事项(Gradient Checking Implementation Notes)

在这里插入图片描述

错题笔记

dropout只用在训练集上,目的是在每层添加噪声,降低对权重的依赖,从而防止过拟合。但是测试的时候目的是真实反映当前模型的优化程度,当然不能用dropout,否则会影响评估

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值