02. 改善深层神经网络:超参数调试、正则化以及优化

第一周 深度学习的实用层面

1.1 训练、验证、测试集

  1. 机器学习实践是一个高度迭代过程
    应用领域:NLP,CV,语音,结构化数据(广告,搜索,安全,物流)
  2. 训练、验证、测试数据集
    训练、测试:70,30
    训练验证测试:60,20,20
    大数据背景下,验证、测试集所占比例更小。
  3. 训练测试集分布不匹配
    要确保验证集和测试集来自同一分布
    即使没有测试集也可以(测试集用于无偏估计)

1.2 偏差、方差

  1. 偏差和方差
    《吴恩达深度学习》02改善深层神经网络:超参数调试、正则化以及优化(第1周深度学习的实用层面)
    欠拟合、适度拟合、过拟合
  2. 偏差和方差例子
  3. 高偏差高方差
    《吴恩达深度学习》02改善深层神经网络:超参数调试、正则化以及优化(第1周深度学习的实用层面)

1.3 机器学习基础

  1. 机器学习基础
    (1) 高偏差?若训练集上偏差也高,则需要寻找新的网络(更大的网络)
    (2) 高方差?若验证集上方差也高,则需要更多的数据,或正则化,或新的网络

1.4 正则化

  1. 逻辑回归
    (1) L2正则化:J(w,b)=1mi=1mL(y^(i),y(i))+λmw22J(w,b) = \frac{1}{m}\sum_{i=1}^m L(\hat{y}^{(i)}, y^{(i)})+\frac{\lambda}{m} \| w \|_2^2
    (2) L1正则化,确保稀疏
    (3) 编程时,为避免与python保留字段重复,λ\lambda写为lambd
  2. 神经网络
    (1) J(w[1],b[1],,(w[L],b[L])=1mi=1mL(y^(i),y(i))+λml=1LwF2J(w^{[1]},b^{[1]}, \cdots, (w^{[L]},b^{[L]}) = \frac{1}{m}\sum_{i=1}^m L(\hat{y}^{(i)}, y^{(i)})+\frac{\lambda}{m} \sum_{l=1}^{L}\| w \|_F^2
    (2) 矩阵的F范数的平方是矩阵中所有元素的平方和

1.5 为什么正则化可以减少过拟合?

  1. 正则化如何组织过拟合?
    《吴恩达深度学习》02改善深层神经网络:超参数调试、正则化以及优化(第1周深度学习的实用层面)
  2. 另一个例子

1.6 Dropout正则化

  1. 对于每个节点,以概率消除或保留
  2. 实施dropout(反向随机失活)
    假设有一3层网络
    d3 = np.random.rand(a3.shape[0], a3.shape[1])<keep-prob
    a3 = np.multiply(a3, d3)
    a3 /= keep-prob
  3. 在测试阶段做出预测
    在测试阶段不适用dropout

1.7 理解Dropout

  1. 为什么dropout起作用?
    (1) 直觉:不能依靠任何单一特征,所以不会给某个特征增加权重,最终结果是形成对于权重类似于l2的正则化。
    (2) 不同层的keep-prob可以不同,通常若参数矩阵较大,则设置keep-prob较小。
    (3) 计算机视觉中使用非常多,在其他领域中较少。
    (4) 缺点:代价函数J不再显式定义。解决方法:首先将keep-prob设为1,调试代码,使J单调下降,然后再调试keep-prob。

1.8 其他正则化方法

  1. 数据扩增
    通过对原数据的简单变化,增加训练数据集
  2. 早期停止
    正交化
    缺点:不能分别独立地处理最优化和防止过拟合两个工作。

1.9 归一化输入

  1. 归一化训练集
    (1) 步骤:a. 0均值x:=xμx:=x-\mu b.方差归一化d/=δ2d/=\delta^2
  2. 为什么归一化输入?
    《吴恩达深度学习》02改善深层神经网络:超参数调试、正则化以及优化(第1周深度学习的实用层面)

1.10 梯度消失与梯度爆炸

  1. 梯度消失和梯度爆炸

1.11 神经网络的权重初始化

  1. 单个神经元示例
    (1) w[l]=np.random.randn(shape)np.sqrt(2n[l1])w^{[l]}=np.random.randn(shape)*np.sqrt(\frac{2}{n^{[l-1]}})

1.12 梯度的数值逼近

  1. 检验梯度计算
    《吴恩达深度学习》02改善深层神经网络:超参数调试、正则化以及优化(第1周深度学习的实用层面)
    双边公差比单边公差更逼近精确值,双边公差的误差为O(ϵ2)O(\epsilon^2),单边公差的误差为O(ϵ)O(\epsilon)

1.13 梯度检验

  1. 神经网络的梯度检验
    (1) 将全部参数矩阵reshape为一个向量θ\theta
    (2) 将全部导数矩阵reshape为一个向量dθd\theta
  2. 梯度检验
    (1) 对于每个i,计算dθapprox[i]=J(θ1,θ2,,θi+ϵ,)J(θ1,θ2,,θiϵ,)2ϵ=dθ[i]=Jθid\theta_{approx}[i]=\frac{J(\theta_1, \theta_2, \cdots, \theta_i+\epsilon, \cdots)-J(\theta_1, \theta_2, \cdots, \theta_i-\epsilon, \cdots)}{2\epsilon} = d\theta[i]= \frac{\partial J}{\partial \theta_i}
    (2) 检查dθapproxdθ2\| d\theta_{approx} - d\theta \|_2, 若是小于10710^{-7}则比较好,在10510^{-5}则要小心,若大于10310^{_3}则要小心。

1.14 关于梯度检验实现的注记

  1. 不要在训练中使用,只是用于调试中。
  2. 如果检验错误,则要每一项都要检查。
  3. 注意不要丢了正则项。
  4. 梯度检验和dropout不能同时使用。
  5. 随机初始化,训练后可能会有问题。

相关文章:

  • 2021-09-16
  • 2021-05-03
  • 2021-05-15
  • 2021-05-27
  • 2021-12-17
  • 2021-06-29
  • 2021-07-19
  • 2021-09-12
猜你喜欢
  • 2021-07-14
  • 2021-07-12
  • 2021-05-16
  • 2021-10-08
  • 2021-05-04
  • 2021-04-11
  • 2021-10-04
相关资源
相似解决方案