在过去的三周,我们学完了《深度学习专项》的第二门课《改进深度神经网络:调整超参数、正则化和优化》。这些知识十分零散,让我们用点技能点的方式回顾一下这些知识,同时评测一下自己的学习情况。复习完了后,我们来看看下一门课的学习内容。
第二阶段回顾
在本节中,你需要记下两个数字:技能点数和觉醒技能点数。
技能点获取规则:必须先点完基础的知识,再点进阶的知识。同级知识之间没有先后限制。同时,某些知识还有额外的前置条件。
数据集划分
浅尝(+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个博闻知识点。
第三阶段知识预览
经过了三周紧张的学习,我们学到了非常多硬核的深度学习知识,还完成了不少编程项目。
在《深度学习专项》的下一门课《组织深度学习项目》中,我们会用两周时间,轻松地学一些不那么困难的知识:
- 机器学习改进策略的宗旨
- 正交化
- 设置改进目标
- 评估指标
- 数据集划分的细节
- 与人类表现比较
- 为什么使用人类的表现
- 理解并利用人类表现
- 试图改进模型以超过人类的表现
- 差错分析
- 分析开发误差的由来
- 清理错标数据
- 不匹配的训练与开发/测试集
- 如何使用不同分布的数据
- 如何在这种情况下评估偏差与方差
- 解决数据不匹配问题
- 完成多个任务
- 迁移学习
- 多任务学习
- 端到端学习
- 什么是端到端学习
- 何时用端到端学习
从标题中也能大致看出,这些知识基本不涉及任何复杂的数学公式,学习起来应该会很轻松。不过,了解这些知识也是很有必要的。在搭建一个能解决实际问题的深度学习项目时,这些组织深度学习项目的经验往往能帮助到我们。让我们做好准备,迎接新课程的学习。