Andrew Ng(吴恩达) deep learning 课程 (coursera)
引言
最近一段时间内,在Coursera平台开设了深度学习课程的内容。与他之前关于机器学习的基础课程相似地,在这门课上Andrew也采用了面向无专业背景的学习者的教学方式而非针对具备专业知识的人群因此其特点通常是直观易懂且注重实践应用但可能会让专注于机器学习领域的专业人士觉得内容较为基础不过对于有经验的人来说他们的见解仍然具有参考价值因此我整理了自己在这门课中学到的一些关键点并进行了记录
第一课:神经网络和深度学习
第一周:深度学习引言
- 结构化数据与非结构化数据?
- 结构化数据在机器学习领域被视为具有明确意义的特征集合。
从而我们可以按照数据库管理的方式组织这些信息到表格中,
每一行代表每个样本的信息记录,
每列则对应特定的属性或特征值。 - 在这种背景下,
非结构化数据(如图像、语音信号和文本)则难以直接转换成这种标准的数据格式进行分析处理。
难以以表格形式有效地组织存储并提取有用信息。
- 深度学习为何成为主流?
- 其根本原因在于深度学习算法在大数据量上的卓越表现尤其体现在非结构化数据处理中。
- 从客观角度来看该现象之所以流行主要得益于三个方面的影响一是数据规模的增长二是计算能力的进步三是算法优化的结果。
第二周:神经网络基础
- 讲述logistic回归的基本原理及其通过最大似然估计建立损失函数的具体方法。
- 对链式法则反向传播算法的直观解释相对容易接受,然而与严格数学证明相比仍不够令人满意,完整推导可参考吴恩达在斯坦福大学UFLDL课程中的汉译版教材1。
- 强调向量化代码实现的优势,习惯使用MATLAB的人自然过渡到向量化实现,显著提升了计算效率和并行性能。
- 解释了Python库numpy中的广播机制及其潜在问题,这一细节可能被许多人忽视。需要注意np.random.randn(5)生成的是一个一维数组,而np.random.randn(5,1)或np.random.randn(1,5)分别生成列向量或行向量,后两种情形便于理解且在实际应用中更为常见。
- 总体而言,这一课的知识点较为基础,主要涉及机器学习的基本概念和技术框架以及Python编程中的常见知识储备,对于有一定基础的学习者可以直接略过相关内容而不影响整体学习效果。
第三周:浅层神经网络
阐述了单个隐藏层神经网络的一个实例,并讨论了激活函数的选择以及随机参数初始化的问题,均属于基础学习范畴,在此并未涉及较高级的内容。
第四周:深层神经网络
- 本周课程的重点讲述了如何构建一个多层的全连接神经网络结构,并详细讲解了前向传播与反向传播的具体实现过程。如果读者之前手动实现了相关内容,则本节课的内容基本可以作为复习性质的学习。
- Andrew在本课程中深入探讨了"deep learning"这一术语的理解与应用背景, 其本质相当于多层次的人工神经网络结构, 这个"deep learning"其实就是一个吸引眼球的概念, 目的是通过高大上的表述来引起人们的关注与兴趣。
第一次听到这个词的时候, 我同样感到非常神奇与震撼, 原以为算法能够像人脑一样进行思考, 实际上它与传统的机器学习方法并无本质区别, 都是基于相同的数学模型构建起来的预测工具。
至于神经网络与人类大脑之间的关系问题, Andrew也进行了深入阐述, 认为人类大脑的工作机制目前还完全不清楚, 神经网络只是简单类比于大脑运行的方式进行假设描述, 可能两者之间并没有实质性的关联。
总体而言, Andrew这种务实的态度是非常值得认可的
大师采访
- Geoffrey Hinton
无需多言,Hinton无疑是深度学习领域的泰斗级人物,他不仅引领了深度学习的发展方向,其理论贡献对学科进步具有里程碑意义.值得提及的是,Hinton最初并未从事心理学及哲学研究,而是通过反复探索最终转向机器学习领域,这一过程既充满艰辛又令人敬佩.
-
Abbeel被视为深度强化学习领域的先驱之一,在其接受采访的视频中也多次阐述了他的观点与见解关于深度学习、强化学习以及深度强化学习的不同维度。
-
Abbeel提倡的做法是鼓励个人主动尝试不同的方法或策略,在实践中不断探索与总结经验的有效途径其核心理念在于通过实践来验证和掌握知识体系中的关键技巧与概念。
-
由于当前研究者所掌握的知识水平有限导致许多基础问题仍然有待深入探索这使得仅凭理论知识难以全面掌握实际操作中的要点与细节。
-
- Ian Goodfellow
-
Goodfellow被誉为GAN领域的开创者,在生成对抗网络提出之初便迅速成为研究热点,并被广泛认为是生成模型的重要工具之一。
-
此外,《deep learning》一书已被翻译出版,并且这本书作为系统性总结相关知识的作品备受推崇。
-
然而,在具体领域如RNN方面则显得不够深入,在某些细节上仍显略浅。
-
在接受采访时提到,在极度困难的时候(头疼感觉快要死的时候),首先想到的竟然是自己的研究想法是否有人能够继续下去。
-
不知真相如何(不知是真是假),这种经历似乎更能体现真正的研究热情:以为自己快要结束时(头疼感觉快要死的时候),突然想到自己的研究想法是否有人能够继续下去。
-
这种经历让人不禁怀疑:或许这才是真正的科研精神。
第二课:改善深层神经网络:超参数调试、正则化以及优化
第一周:深度学习的实用层面
该文阐述了过拟合与偏差-方差平衡这一核心知识点及其内在关联关系。
作为机器学习体系的重要组成部分之一, 这一理论自提出以来便备受关注, 初次深入学习时确实令人倍感新奇。
文章详细介绍了正则化方法中的Dropout技术及其局限性: 即使采用Dropout策略, 也难以直观地观察到损失函数曲线(经过平滑处理后)随着迭代次数逐步下降的变化轨迹, 这一特点使得其实现过程显得异常抽象。
此外,文章还探讨了数据增强与早停法(Early Stopping)相结合的有效性: 其中后者通过减少正则化超参数搜索空间的方式, 较为便捷地实现了对模型超参数优化的目标。
在讨论神经网络训练过程中可能出现的问题时,文章重点分析了梯度消失与梯度爆炸两种极端情况: 幸好在实际应用中可以通过合理选择参数初始化策略加以有效抑制——具体而言, 就是要使各层参数方差与其前一层神经元数量平方根之间形成反比关系。
需要特别说明的是: 梯度检验的方法尚未在实际项目中得到过完整实践, 但实现起来并不复杂: 只需执行两次前向传播操作即可计算出近似的数值梯度并进行验证比较。以下是Andrew教授所提出的具体建议:

* 其中再次提到dropout的复杂性,不能与梯度检验共存。
第二周:优化算法
文章阐述了Mini-batch算法的核心概念及其计算方式及其影响。
介绍了动量法、RMSprop以及Adam优化器等加速梯度下降的方法,并强调这是最易于理解的优化方案之一。
深入探讨了学习率衰减问题这一重要内容。
最后这一节关于局部最优解的内容让我印象深刻,在这里我对深度学习目标函数的理解也得到了极大的提升。

- 如上图所示,
大家普遍认为梯度下降算法容易陷入局部最优解。
然而,在深度学习中由于参数数量庞大,
许多导数为零的点实际上是鞍点,
如右图表所显示。
因此,在实际应用中较好的局部最小值相对较少。
深度学习的一个关键问题是:
在这些鞍点附近算法可能会收敛较慢,
才最终走出困境。

第三周:超参数调试、Batch Normalization、深度学习框架
介绍了深度学习中的实用技术与框架,并详细讲解了调参技巧及Batch Normalization技术。
对于框架而言, 我已经简单试用过caffe, tensorflow, keras以及paddlepaddle这些工具。
其中一些工具基于计算图设计模型架构;而另一些则基于层状结构进行模型设计。
其中一些工具基于计算图设计模型架构;而另一些则基于层状结构进行模型设计。
你需要先明确模型的机构定义;并准备好相应的数据与环境配置。
最近通过Python开发的PyTorch因其成熟的生态系统和发展趋势逐渐成为主流选择。
我认为这是个非常有潜力的方向;值得花时间深入学习并将其作为研究深度学习框架的主要方向。
大师采访
- Yoshua Bengio
*Bengio 是深度学习领域的重要人物之一,并且还是 Ian Goodfellow 的导师。最近的一次采访中提到他对当前深度学习研究的看法时指出感到失望:他认为现在的研究已经偏离了最初希望让机器具备类似人类的认知能力的想法(original idea),而是更多地关注如何设计出更好的网络架构以及开发出更高效的优化算法来实现深度学习的应用。
*Bengio 提出的观点是:从事深度学习研究与将深度学习技术应用于实际产品之间所需的能力和知识存在差异性差异性差异性差异性差异性差异性差异性差异性差异性差异性差异性差异性 vary vary vary vary vary vary vary vary vary. 但双方都达成了一致意见:要尝试自己(try things yourself),这表明他们都坚信基础研究的重要性。
林元庆无需多言,在我们工厂下的深度实验室负责人无疑算得上是国内深度学习领域的先驱者,并且他分享了工业界的观点。建议可以从掌握机器学习的基本原理入手,并选择一些流行的开源框架作为基础工具。对于从事深度学习研究的人来说,掌握机器学习是必经之路,并且都是离不开开源框架的支持。
第三课:结构化机器学习项目
我认为本周课程是本门课的核心重点内容之一,并且这些知识难以从公开课程、书籍等渠道深入掌握
第一周:机器学习策略
- 介绍正交化策略时指出其方法与控制变量法相仿,并强调此方法有助于迅速定位问题核心。
- 介绍构建评价体系及划分训练数据集、验证数据集和测试数据集等基本步骤;这些是我们进行研究的第一要务,并且可以类比于设定明确的目标——如射击靶心的过程。
- 介绍算法在与人类能力对比过程中不断进步这一特性;这一问题主要体现在人类强项领域如图像识别和语音识别等方面;要超越人类当前水平并非易事,并由此形成了一系列对比与改进的机会;
- 然而对于结构化数据这类领域而言机器往往表现更为出色,在这种情况下机器的优势在于能够记忆大量数据并进行建模。
第二周:机器学习策略
- 误差评估,在模型后期进行是一项非常重要的工作。
- 详细阐述了如何应对训练数据与测试数据分布不一致的情况:首要任务是识别分布差异带来的影响;主要策略则是通过人工合成数据来提高模型性能。
- 讲述了迁移学习、多任务学习、端到端学习等技术:这些都是深度学习中常见的方法论。
大师采访
采访了两位重量级专家——斯坦福大学CS231课程的主讲教授以及苹果公司技术部门的核心人物。他们都提出了高度一致的意见——希望开发者不仅能够熟练调用现有的深度学习框架,并且能够深入理解并能手动推导前向传播和反向传播的过程。经过自己的实践后我发现通过亲手编写神经网络代码来加深理解是一种非常有效的方法——这不仅帮助我更加清晰地认识到每个组件的作用机制,并且培养了一种严谨的学习态度。这种态度也让我在面对各种复杂的技术方法时显得更加从容应对。此外我还深信只有真正掌握知识才能做到举一反三——因此我会持续关注新技术的发展并不断充实自己的知识储备库。PS: 曾经在matlab上手写了全连接层与卷积神经网络(CNN)的相关代码以加深理解。
第四课:卷积神经网络
因为我在学习图像处理课程的过程中具有一定的基础,在第四课的所有内容均能理解掌握,未发现新的知识点。与此同时,在Andrew讲解风格迁移网络时提到:“随机初始化一张生成图片样本(尺寸为100x100x3)”,这一表述可能存在一定的随意性。在我印象中,风格迁移网络的学习图像应与内容图像保持一致尺寸(100x100x3),以便于计算内容损失函数。
