吴恩达-深度学习工程师(二)

吴恩达的deeplearning.ai与网易云课堂合作推出了一个微专业课程《深度学习工程师》,整个课程分四个大部分

  1. 神经网络和深度学习
  2. 改善深层神经网络:超参数调试、正则化以及优化
  3. 结构化机器学习项目
  4. 卷积神经网路
  5. 序列模型

这里主要总结第二部分改善深层神经网络:超参数调试、正则化以及优化,一共有三周的学习内容:

  • 深度学习的使用层面
  • 优化算法
  • 超参数调试、Batch正则化和程序框架

我这里只做一些总结笔记,并没有详细的解释,可能对于在读博客的你并没有太大的帮助,因为主要是针对于我自己的,方便回顾,而不是作为一个教程存在。

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

2.1 深度学习的使用层面

  • 数据集的划分,通常会有训练集,验证(开发)集和测试集,训练完的模型需要看泛化能力好不好,如果过拟合了,在训练集上一级棒,有新的数据就一塌糊涂,所以要有一个验证集的存在,验证训练结果,帮助参数调整。需要注意的是划分后的数据集要有相同的分布。
  • 高偏差(High Bias)就是欠拟合,模型过于简单,在训练集和验证集上误差都高。高方差(High Variance)就是过拟合,模型过于复杂,在训练集上误差低,验证集上误差高。
  • 正则化
    • 正则项(L1和L2)用来防止过拟合问题,L1会让W变得稀疏,L2比较常用。对神经网络来讲,平方形式的正则项被称为费罗贝尼乌斯范数Frobenius norm(因为一些我们不需要知道的原因…)。L2正则化也会被称为权值衰减(Weigth Decay)
    • 正则化之所以能防止过拟合的问题,是因为比较大的 λ \lambda λ,会使W相对比较小,这样就会使Z比较小,以tanh激活函数为例,z比较小的部分线性化比较好,整个网络更接近线性化,而不会复杂化,如此就防止了过拟合。
    • dropout(随机失活)也算是正则化,实现的时候注意因为有些神经元失活,会引起期望值改变,所以需要有Inverted dropout技巧来校正期望值。另外,在测试的时候是没有必要让神经元失活的,也就是不需要dropout。
    • Data augmentation, Early stopping都是比较常用的防止过拟合的方法
  • 加快训练速度,通常会做归一化处理(Normalization)
    1 - 零均值化。
    2 - 归一化方差(Normalize the variances)。
  • 梯度消失(vanishing)和梯度爆炸(exploding),改善的方法就是合理选择初始化权重
  • 用梯度的数值计算结果与反向传播对比进行梯度验证

2.2 优化算法

  • Mini-batch梯度下降
    • 梯度下降算法的每一次迭代都需要在整个训练集上进行,当训练集很大的时候,速度慢而且占内存。把整个训练集分为多个子集(Mini-batch),然后一个batch一个batch训练,整个训练集迭代一次叫一个epoch。这个方法不但速度快而且占用内存小。
    • 但是使用Mini-batch时,成本函数会在波动中下降,因为每个Mini-batch可能都不太一致。
    • Mini-batch的单个batch样本怎么选呢,如果size=m,那就是整个就是一个batch。如果size=1,也就是每个单独的样本就是一个batch,也称为随机梯度下降。一般选2的指数,64、128、256、512比较常见,当然也要看训练处理器(CPU或者GPU)的内存大小。
  • 指数加权平均(Exponentially weighted averages)
    v t = β v t − 1 + ( 1 − β ) θ t v_t = \beta v_{t-1} + (1-\beta)\theta_t vt=βvt1+(1β)θt
    Bias correction用来修正计算初期的偏差(不一定要用)
  • 动量梯度下降(Momentum)
    V d W = β V d W + ( 1 − β ) d W V_{dW} = \beta V_{dW} + (1-\beta)dW VdW=βVdW+(1β)dW
    V d b = β V d b + ( 1 − β ) d b V_{db} = \beta V_{db} + (1-\beta)db Vdb=βVdb+(1β)db
    W = W − α V d W , b = b − α V d b W = W - \alpha V_{dW}, b=b-\alpha V_{db} W=WαVdW,b=bαVdb
    通常 β = 0.9 \beta=0.9 β=0.9 是个效果很好的选择
  • RMSprop
    S d W = β S d W + ( 1 − β ) d W 2 S_{dW} = \beta S_{dW} + (1-\beta)dW^2 SdW=βSdW+(1β)dW2
    S d b = β S d b + ( 1 − β ) d b 2 S_{db} = \beta S_{db} + (1-\beta)db^2 Sdb=βSdb+(1β)db2
    W = W − α d W S d W , b = b − α d b S d b W = W - \alpha {{dW} \over \sqrt{S_{dW}}}, b=b-\alpha {{db} \over \sqrt{S_{db}}} W=WαSdW dW,b=bαSdb db
    和动量梯度下降类似,都是用来消除梯度下降过程中的波动问题,同时加快下降速度,而且允许尝试大一些的学习率 α \alpha α
  • Adam优化算法
    结合了RMSprop和Momentum,被证明在各种深度学习网络中效果都很好
  • 学习率衰减
    训练到后期,通常损失函数会在最优值附近波动,减小学习率会让其波动范围变小。但前期训练我们希望学习率大一些,收敛速度快一些。
  • 局部最优问题
    在高维度的空间,更容易出现的是鞍点(saddle point)而不是局部最优点,局部最优要求在各个方向上导数方向一致,概率是很小的。

2.3 超参数调试、Batch正则化和程序框架

  • 调试处理
    一级超参:学习率 α \alpha α
    二级超参:Momentum β \beta β , 隐含层神经元个数,Mini-batch的大小
    三级超参:神经网络层数量,学习率衰减参数
    视频建议随机组合来找出到底哪个超参主要影响,同时要注意参数的缩放尺度,比如在对数尺度上效果会好一些,还有由粗到细的区域搜索。
  • Batch Normalization
    • 基本的想法是对隐含层的每一层都做归一化处理。可以归一化 z 或者归一化激活后的 a,视频推荐归一化 z。隐含层和输入层不一样的是,某些情况下,可能我们不希望均值为0,方差为1,而是可以调整的。
    • 计算均值和方差,减去均值,除以标准差,通常深度学习框架会提供计算函数
    • 为什么BN有效呢?有个概念叫Covariate Shift,意思就是说输入数据的分布有变化,那么训练出来的网络也要重新训练。细化地对每一层网络来说,它的前一层激活函数输出就是本层的输入,这个输入的分布是会一直改变的,利用BN正则化可以约束其在某个均值和方差内波动,那么虽然变化,分布不会变化太大,有利于加速训练过程。另外,BN有一定的正则化效果,但不显著。
  • Softmax回归
    • 之前提到的Logistic Regression是二分类(Binary Classification),更一般化的形式Softmax Regression可以处理多分类问题。使用Softmax Regression的层,叫Softmax层,使用Softmax激活函数。
    • Hard max是指直接把值最大的那个概率设为1,其他全为0。
    • 用Softmax层作为输出层的损失函数一般选择交叉熵(Cross Entropy)
  • 深度学习框架
    主流的框架各有各的好处,而且日新月异,优缺点可以上网搜索,每个人需求不同,选择也不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值