摘要: 本文对Andrew Ng深度学习课程进行了大体的介绍与总结,共包括21个课程。
我最近在Coursera上完成了Andrew Ng导师关于新深度学习的所有课程。Ng在解释术语和概念方面做得非常出色。例如,Ng指出,监督深度学习只不过是一种多维曲线拟合过程。
以下是我对课程的简单回顾:
第1课:为什么深度学习会兴起?
因为在过去的几年里科学家收集了90%的数据,而深度神经网络(DNN)需要大量的数据。因此,DNN可以支配较小的网络和传统的学习算法。
此外,还有许多算法的创新使得DNN的运行速度越来越快。例如,sigmoid激活函数进化到Relu激活函数,这对如梯度下降类的优化过程产生了巨大影响。这些算法的改进使得研究人员更快速地对新想法进行迭代->实验->编码周期循环,从而实现更多的创新。
第2课:深度学习中的矢量化
在上这门课之前,我没意识到在不需要对循环进行明确操作的前提下,可以实现一个神经网络。Ng出色的表达了Python矢量化代码设计的重要性。他提供了一个样板化的代码设计,你可以轻松地将其转移到你自己的应用程序中。
第3课:深入了解DNN
第一个课程实际上是让你能够了解,如何从头开始实现numpy的向前和向后传播的步骤。通过该课程,使得我对TensorFlow和Keras等高层框架的内部工作有了更深入的了解。Ng解释了计算图背后的想法,让我理解了TensorFlow是如何执行“神奇的优化”的。
第4课:为什么使用深层表达
Ng对DNN的分层方面给出了直观地理解。例如他对人脸识别的解释,神经网络第一层所做的事就是从原始图片中提取出人脸的轮廓与边缘,即边缘检测。这样每个神经元得到的是一些边缘信息。神经网络第二层所做的事情就是将前一层的边缘进行组合,组合成人脸一些局部特征,比如眼睛、鼻子、嘴巴等。再往后面,就将这些局部特征组合起来,融合成人脸的模样。他还解释了存在一些函数,这些函数需要指数数量的隐藏单元来适应浅层网络中的数据。
第5课:处理偏差和方差的工具
Ng讲解了研究人员为识别和解决与偏差和方差相关问题而采取的步骤。他还谈到了偏差和方差之间的“权衡”。他解释说,在现代的深度学习时代,我们有工具来单独解决每个问题,不在需要“权衡”了。
第6课:规范化的直觉
为什么将惩罚因子添加到成本函数可以减少方差效应?Ng给出了另外一种涉及tanh激活函数的解释。即,较小的权重矩阵产生较小的输出,然后将输出集中于tanh函数的线性部分。
他还为dropout提供了一个有趣的解释。在选修这门课程之前,我认为dropout基本上都是在每次迭代过程中随机杀死神经元,导致我们好像是在用一个更小更线性的网络。而他是从单个神经元的角度看待问题。
由于dropout是随机杀死连接,神经元被激励将其权重更平均地分布在其父母之间。通过扩展权重缩小全中的平方规范。他还解释说,dropout只不过是L2正规化的一种自适应形式,这两种方法都有相似的效果。
第7课:为什么规范化工作?
Ng通过一个在归一化和非归一化轮廓图上遍历逐渐下降的例子证明了一个问题,即,为什么归一化倾向于通过绘制登高线图来提高优化过程的速度。
第8课:初始化的重要性
Ng表示参数的初始化失误会导致渐变的消失或爆炸。他演示了几种解决这些问题的程序,基本思想都是确保每一层的权重矩阵在方差1以内,而且他还讨论了tanh激活函数的Xavier初始化。
第9课:为什么使用小批量梯度下降法?
Ng使用等高线图解释了小尺寸和大尺寸mini-batch的权衡。基本思想是,大尺寸的会在每次迭代中变慢,而小尺寸的允许你更快的取得进展,但是不能对收敛做出相同的保证。最好的方法是在两者之间做一些措施,使你能够更快地处理整个数据集,同时还可以利用矢量化技术。
第10课:对高级优化技术的直观理解
Ng解释了动量(momentum)和RMSprop等技术如何用梯度下降来减少它通向最小值的路径。
他还用滚下山的球给出了很好的物理解释。他将这些方法联系起来解释著名的亚当优化程序。
第11课:基本后端TensorFlow的理解
Ng不仅解释了如何使用TensorFlow实现一个神经网络,还解释了如何在优化过程中使用一些后端程序。其中的一项作业是鼓励你用TensorFlow实现dropout和L2正则化,这进一步增强了我对后端流程的理解。
第12课:正交化
Ng论述了正交化在机器学习策略中的重要性。基本思想是,希望实现的控件每次只影响算法的单个组件。例如,为了解决偏差问题,你可以使用更大的网络或更健壮的优化技术。你希望这些控件只影响偏差,而不是例如泛化等其他问题。缺乏正交化的控件的一个例子是提前终止优化过程。这是因为它同时影响模型的偏差和方差。
第13课:单个数字评估指标的重要性
Ng强调了用单个数字评价指标评估算法的重要性。如果你的目标更改,则只需在模型开发过程中更改评估指标。Ng给出了一个在猫分类应用程序中识别色情照片的例子!
第14课:测试/开发分布
在过程中需要保持开发和测试集具有相同的分布,这能确保你的团队在迭代过程中针对正确的目标。不过这也意味着,如果你再测试集中纠正错误数据,那么也必须在开发集中纠正。
第15课:处理不同的培训和测试/开发分配
为什么团队会对培训和测试/开发分配不同感兴趣呢?Ng给出了相应的解释。他的观点是,你希望评估指标可以根据你真正关心的比例进行分配。例如,你可能希望使用与你的问题不相关的示例来进行培训,但是你不希望你的算法对这些示例进行评估。这样你的算法就可以得到更多的数据。经验表明,这种方法在许多情况下会给你带来更好的性能。缺点是你的训练和测试/发布集有不同的发布。解决方案是忽略训练集的一小部分,并确定训练集的泛化能力。然后,你可以将此错误率与实际开发错误进行比较,并计算“数据不匹配”指标。然后,Ng解释了处理这种数据不匹配问题的方法,例如人工数据合成。
第16课:训练/发布/测试尺寸
在深度学习时代,设置训练/发布/测试分离的指导方针发生了巨大变化。在上这门课之前,我知道通用的60/20/20分组比例。然而,Ng强调,对于一个非常大的数据集,应该使用大约98/1/1甚至99/0.5/0.5的分割。这是因为开发和测试集大小只需要能够确保团队提供的置信区间内。如果你使用10,000,000个训练示例,那么可以100,000个示例就能保证你的开发和测试集的某些信任范围。
第17课:近似贝叶斯最优误差
Ng解释了在某些应用中,人类级别的误差如何用作贝叶斯误差的代理。例如,在视觉和音频识别之类的任务中,人类的误差水平非常接近贝叶斯误差。因此可以通过量化人类模型来避免偏差量。如果没有贝叶斯误差的基准,很难理解网络中的变化和可避免的偏差问题。
第18课:错误分析
Ng讲述了一种显而易见的技术:通过错误分析大幅提高算法性能。基本的思路是手动给错误分类的例子贴上标签,这样就能重点关注在错误上,这对错误分类数据是最重要的。
例如,在猫识别任务中,Ng确定模糊图像出现错误的几率最大。而这种敏感性分析可以让你看到可以减少总错误数量。敏感性和近似工作将被纳入决策过程。
第19课:何时使用转移学习?
转移学习允许你将知识从一个模型转移到另一个模型。例如,你可以将图像识别知识从cat识别应用转移到放射诊断。实现迁移学习需要重新训练网络的最后几层,用于类似的应用程序域并提供更多的数据。这个思路是,网络中较早的隐藏单元具有更广泛的应用程序,它通常不是特定于你正在使用网络的确切任务。总之,当两个任务都有相同的输入特性,并且当你要学习的任务比你想要训练的任务数据更多时,转移学习是有效的。
第20课:何时使用多任务学习?
多任务学习迫使单个神经网络同时学习多个任务(而不是每个任务都有一个单独的神经网络)。Ng解释说,当一组任务可以从共享较低级别的特性中受益,并且当每个任务的数据量大小相似时,这种方法很有效。
第21课:何时使用端到端深度学习?
端到端的深度学习需要进行多个阶段的处理,并将它们组合成一个单一的神经网络。这使得数据可以为自己说话,而无需在优化过程中使用人工操作。但相应的缺点为,这种方法需要更多的数据,并且可能会排斥手动设计的组件。
文章原标题《Deep Learning Specialization by Andrew Ng – 21 Lessons Learned》
作者: Ryan Shrott
译者:奥特曼,审校:袁虎。
原文链接
干货好文,请关注扫描以下二维码: