0%

吴恩达《深度学习专项》第二阶段总结与第三阶段预览

在过去的三周,我们学完了《深度学习专项》的第二门课《改进深度神经网络:调整超参数、正则化和优化》。这些知识十分零散,让我们用点技能点的方式回顾一下这些知识,同时评测一下自己的学习情况。复习完了后,我们来看看下一门课的学习内容。

第二阶段回顾

在本节中,你需要记下两个数字:技能点数和觉醒技能点数。

技能点获取规则:必须先点完基础的知识,再点进阶的知识。同级知识之间没有先后限制。同时,某些知识还有额外的前置条件。

数据集划分

浅尝(+1点)

  • 数据集可以分成训练集、开发集、测试集三种。
  • 数据量小时按比例划分,数据量大时只需要选少量数据用作开发集、测试集。
  • 开发集和测试集的区别:开发模型时不能偷看测试集的评估结果。

偏差与方差

浅尝(+1点)

  • 理解偏差和方差的基本意义。
  • 能用二维点集分类的例子描述偏差问题和方差问题。
  • 在知道了模型在训练集、开发集上的误差后,能够诊断模型存在的问题。

精通 - 解决偏差与方差问题(+1点)

前置技能点:正则化

  • 面对偏差问题,常见的解法是使用的更复杂的模型提升参数量,并延长训练时间。
  • 面对方差问题,常见的解法是增加数据(数量和质量)和正则化。
  • 改变模型结构往往能同时解决这两个问题。

正则化

浅尝(+1点)

前置技能点:了解方差

  • 正则化的作用:缓解过拟合。
  • 正则化的通用思想:防止网络过分依赖少量的某些参数。

入门 - 添加正则化项(+1点)

在损失函数新加一项:

梯度下降时稍微修改一下参数的更新方法:

精通 - dropout(+1点)

  • dropout的思想:训练时随机丢掉某些激活输出。
  • dropout的实现:由随机数矩阵和失活概率算出一个bool矩阵,以此bool矩阵为mask与激活输出相乘。

博闻 - 其他正则化方法(+1点)

  • 数据增强。
  • 提前停止(early stopping)。
  • ……

若能够实现正则化项、dropout、提前停止,则获得1觉醒点

参数初始化

浅尝(+0点)

  • 知道参数要用比较小的值初始化。

入门(+1点)

  • 了解梯度数值异常的原因:中间计算结果随网络层数指数级变化。
  • 参数初始化可以令数据的方差尽可能靠近1,防止梯度异常问题。

精通(+1点)

  • 知道如何添加参数初始化系数。
  • 了解常见的初始化系数的选择方法,比如He、Xavier。

博闻(+1点)

  • 看参数初始化的原论文,深入理解参数初始化的原理。

梯度检查

精通(+1点)

  • 知道梯度检查的数学公式。
  • 实现简单模型的梯度检查。

博闻(+1点)

  • 会用编程框架里的梯度检查以调试大模型里的梯度。

mini-batch

入门(+1点)

  • 知道mini-batch是怎么根据batchsize划分训练集的。
  • 能够实现mini-batch。

精通(+2点)

  • mini-batch的加速原理:增加参数更新次数,同时不影响向量化运算的性能。
  • 在实验中体会不同batchsize的效果,能灵活选择batchsize。

指数加权移动平均

入门(+1点)

  • 移动平均数的作用。
  • 指数加权移动平均的公式:$v_i=\beta v_{i-1} + (1 - \beta)t_i$。

精通(+1点)

  • 大概明白为什么使用指数加权移动平均而不使用普通的移动平均。
  • 偏差矫正的原理和实现。

高级梯度下降算法

前置知识:指数加权移动平均

精通 - Momentum(+1点)

  • 大致理解Momentum的思想。
  • 掌握公式,能用代码实现,知道一般情况下超参数$\beta=0.9$。

精通 - RMSProp(+0点)

  • 掌握公式,能用代码实现,知道有哪些超参数。

精通 - Adam(+2点)

前置知识:Momentum, RMSProp

  • 掌握公式,能用代码实现,知道一般情况下超参数$\beta_1=0.9, \beta_2=0.999, \epsilon=10^{-8}$,基本不需要调参。

博闻(+1点)

  • 阅读经典优化器的论文。
  • 了解各优化器的由来,能直观理解各种优化算法的意义。

实现Adam后,获得1觉醒点

学习率衰减

精通(+1点)

  • 知道学习率衰减的意义。
  • 了解几个常见的学习率衰减公式。

尝试使用Mini-batch、高级优化算法、学习率衰减训练网络,比较各类改进梯度下降方法的效果,则获得1觉醒点

调参

浅尝(+1点)

  • 明确自己的模型里有哪些超参数。
  • 大概知道超参数的优先级,会先去尝试调学习率。

入门(+1点)

  • 调参整体思想:随机选数,由粗至精。
  • 不要均匀采样,而要根据参数的意义选择合适的搜索尺度。

批归一化

浅尝(+0点)

  • 知道批归一化的存在。
  • 知道深度学习框架有时默认附带批归一化操作。

入门(+1点)

  • 知道批归一化的意义,与输入归一化的异同。
  • 知道批归一化层有两个超参数。

精通(+1点)

  • 知道批归一化的数学公式(正向传播、反向传播)。
  • 知道批归一化在测试时的用法。

精通II(+1点)

  • 动手实现批归一化

博闻(+1点)

完成入门即可学习。

  • 了解其他的几种归一化(layer, group)。
  • 知道不同归一化方法的优劣。

多分类问题

浅尝(+1点)

  • 多分类问题的定义。
  • 知道多分类问题的输出、训练集标签与二分类有什么不同。

精通 - softmax(+1点)

  • softmax的公式定义。
  • 如何在网络中使用softmax。
  • 大致了解softmax为什么要做一步指数运算。

精通II - 实现带softmax的多分类网络(+1点)

  • one-hot编码转换。
  • 实现多分类网络。
  • 利用one-hot处理标签和输出结果,正确评测多分类网络。

初识Tensorflow

浅尝 - 编程框架(+1点)

  • 知道编程框架能做什么事。
  • 认识常见的编程框架。
  • 知道选择编程框架的原则。

入门(+1点)

  • 安装GPU版的TensorFlow。

精通(+2点,+1觉醒点)

前置知识:多分类问题

  • 使用TensorFlow实现多分类网络。

第二阶段自评

在“回顾”一节中,共35个普通技能点,4个觉醒技能点。普通技能点主要表示课堂知识,以及少量的课堂上没讲到的可拓展知识点(我自己也拿不满),觉醒技能点主要表示对知识的综合实现与应用。让我们根据自己获得的技能点数,看看自己的学习情况。

Level 0:乱搞一通

条件:技能点≤5

评价:随便去拷贝了几份深度学习代码,跑通了,就以为自己会深度学习了。丝毫不去关心深度学习的基础知识。这样下去,学习和应用更难的深度学习技术时肯定会碰到很多困难。

Level 1:初来乍到

条件:6≤技能点≤15

预估学习情况:大致获取了6个浅尝技能点和7个入门技能点,没有对知识做进一步的思考和实现。

评价:要学会使用深度学习编程框架,甚至复现出一些经典模型,了解入门知识就足够了。尽管如此,钻研更深的知识对深度学习项目的开发还是有很大的帮助的。

Level 2:学有所成

条件:16≤技能点≤22。至少有1个觉醒点才能升级到Level 2。

预估学习情况:完全获取了6个浅尝技能点和7个入门技能点,深入理解了部分知识,进行过代码实现。

评价:非常棒!相信在这一过程中,你已经对部分知识有了更深的理解。第二阶段的所有知识都很重要,建议坚持下去,把所有知识都探究完。

Level 3:登堂入室

条件:23≤技能点≤32。至少有3个觉醒点才能升级到Level 3。

预估学习情况:完全获取了6个浅尝技能点和7个入门技能点,基本获取了17个精通知识点,对部分自己感兴趣的知识做了额外的探究。

评价:恭喜!学到这里,你可以说自己已经完全掌握了第二阶段的知识了。同时,在多个代码实现项目中,你也锻炼了编程能力,从代码的角度近距离接触了各项知识。相信这些学习经验会对你未来的学习和应用产生莫大的帮助。

Level 4:学无止境

条件:33≤技能点≤35。至少有4个觉醒点才能升级到Level 4。

预估学习情况:学懂了除博闻外所有的知识点,对课堂中没有详细介绍的知识做了补充学习。同时,完成了大量的编程练习。

评价:很强。能做到这一步,说明你对深度学习的学习充满了兴趣。相信这一兴趣能够帮助在未来的学习中走得更远。

成就

此外,还要颁发两个成就:

编程狂魔:获取4个觉醒点。

百科全书:获取5个博闻知识点。

第三阶段知识预览

经过了三周紧张的学习,我们学到了非常多硬核的深度学习知识,还完成了不少编程项目。

在《深度学习专项》的下一门课《组织深度学习项目》中,我们会用两周时间,轻松地学一些不那么困难的知识:

  • 机器学习改进策略的宗旨
    • 正交化
  • 设置改进目标
    • 评估指标
    • 数据集划分的细节
  • 与人类表现比较
    • 为什么使用人类的表现
    • 理解并利用人类表现
    • 试图改进模型以超过人类的表现
  • 差错分析
    • 分析开发误差的由来
    • 清理错标数据
  • 不匹配的训练与开发/测试集
    • 如何使用不同分布的数据
    • 如何在这种情况下评估偏差与方差
    • 解决数据不匹配问题
  • 完成多个任务
    • 迁移学习
    • 多任务学习
  • 端到端学习
    • 什么是端到端学习
    • 何时用端到端学习

从标题中也能大致看出,这些知识基本不涉及任何复杂的数学公式,学习起来应该会很轻松。不过,了解这些知识也是很有必要的。在搭建一个能解决实际问题的深度学习项目时,这些组织深度学习项目的经验往往能帮助到我们。让我们做好准备,迎接新课程的学习。