吴恩达deeplearning.ai的深度学习课程怎么样?DT君为你划重点
想上手吴恩达深度学习最新课程的同学可以先看看这篇。许多人认为机器学习太专业化,入门门槛高。但事实证明,机器学习是一个公共的、开放的、活跃的领域,学习机器学习的不仅有来自计算机专业、人工智能专业、自动化专业的专业人士,更有许多来自金融、物理、材料甚至艺术领域的其他人士,这些人一样能够精通机器学习——关键在于如何入门机器学习,怎样更快地掌握机器学习的本质。吴恩达的机器学习课程在 Coursera 平台上已上线 5 年左右,选课人数已达180多万人。该门课程是国内,乃至全球许多机器学习爱好者、专家学者的入门课程。整门课程深入浅出、简洁易懂。8月9日,吴恩达又宣布 deeplearning.ai 在 Coursera 平台上开设系列全新深度学习课程,包括神经网络和深度学习概述、神经网络参数调整及优化、如何搭建机器学习项目、卷积神经网络、神经网络序列模型。从课程设置上来看,涵盖了深度学习的基础理论和简单实操。这也是 deeplearning.ai 三大项目的第一个项目。据说该课程火爆到 deeplearning.ai 的官网多次出无法访问。目前,课程中文版已于8月29日在网易公开课上线。这门课如何?难易程度如何?是不是如吴所说的那样面向普通大众?为了搞清楚这些问题,DT君亲测了这5门课中的3门,并按难(kao)易(pu)程度给每门课打出分数,划出重点。下面就跟着DT君来了预览一下这个课程吧。第一门课评分:4.8分(满分5分)结论:如果在该门课程中新增一个完全由自己设计解决的编程项目,那就完美了!一句话,“最本质的东西往往是最简单的”。第一门课程是《神经网络与深度学习》。该门课程持续时间四周,视频内容包括了深度学习发展的必要性、神经网络基础知识、浅层神经网络、深层神经网络以及对深度学习名人的采访;编程作业则从Numpy库中最常见的函数开始、然后以神经网络的观点看待逻辑回归,接着又训练了仅含一个隐藏层的神经网络,最后以深层神经网络的应用结束。在学习整门课程的过程中,我最喜欢的是编程题的设计。我认为这些设计非常有助于学习者对模型的理解,能抓住深度学习模型和算法的本质,降低了学习者完成该门课程的难度。这样既能保证学习者学到知识,也不会打击学习者的信心。该门课程非常适合于机器学习入门者,即使是机器学习小白,只要能理解最基本的概率和矩阵运算、能快速学会python编程,也能跟着编程指导顺利地完成课程。第二门课评分: 4.9 分结论:该课程非常适合于已完成第一门课的学习者,也适合于对神经网络有一定基础的学习者。希望在新一轮次的课程中,增加对Tensorflow 的指导。第二门课程是《改善神经网络:调参、正则化和优化》。该课程持续时间三周,视频内容主要包括如何避免模型的过拟合、选择合适的优化算法、选择模型的超参数、介绍最流行的深度学习框架以及对深度学习名人的采访。编程部分则包括了权重初始化、正则化方法、梯度检查(检验反向传播算法是否正确运行)、不同的优化算法以及利用当前最流行的深度学习框架Tensorflow实现多分类项目。该门课程延续了第一门课程的优良传统,内容丰富、难度不大、很实用、有助于提高学习者对深度学习的兴趣(我最喜欢的仍然是其编程作业,所有编程作业都给出了极其清晰的解答提示,你不需要写太多代码就能使模型运行,这大大地降低了完成、理解这门课的难度,会增强你进行深度学习的信心!)。第三门课评分: 4.7分第三门课程是《构建机器学习项目》。该门课程持续两周,是这个专项课程的一个特色,希望每个构建机器学习项目的人都去汲取前辈的经验教训,以后少走弯路!这门课程不仅仅是针对机器学习、深度学习小白,也是针对所有在构建机器学习系统中有困惑的各类人士。本文后半部分是DT君学完了吴恩达深度学习专项课程的第三门课程的一份简单的总结,如果你对机器学习感兴趣,立志从事机器学习、深度学习的研究工作,希望这份总结对你有帮助。不完善之处,还望大家多多交流,共同进步!要想成为一名优秀的机器学习工程师,你不仅需要熟练地掌握机器学习的核心算法,更需要掌握机器学习的“基本”策略。那么,有哪些因素能保证我们的机器学习系统会更快、更有效地工作?第三课提供的经验总结非常宝贵,是许多大学里深度学习课程里讲不到的,这些经验总结将为你构建高性能的复杂机器学习系统指明方向,节约时间、成本。注:此图是我在学完了这三门课程后用 Tensorflow 构建的一个深层神经网络,用于分类62种不同的交通标志对象,600 次循环后准确率在 92% 左右;在学习这课程之前,我曾尝试构建卷积神经网络、包含三个隐藏层的深层神经网络解决这个问题,但 600 次循环后准确率不到 85% (这可能与我的神经网络权重初始化不同有关)。试想一下,当你构建了一个准确率已达90%的机器学习系统,我们应该怎样进一步改进系统以取得实际应用?可能你有很多想法:收集更多的训练数据;保持训练数据集的多样性;使用更大规模的神经网络;使用不同的优化算法;采用dropout层或使用L2正则化;更改神经网络的架构等。面对如此多的选择,我们究竟应该如何抉择?哪一种选择是最有希望改善系统性能的?如果你的团队花费了近半年的时间去收集数据,结果发现更多的数据并不是该系统性能提升的决定性因素,这样你们就浪费了大量如同你生命一样宝贵的时间。策略一:正交化过程构建机器学习系统的最大挑战包括调参,调参的过程中你有许多种选择,如果时间允许的话,你可以各种尝试。但是经验表明,最高效的机器学习人员他们很清楚什么样的方式最有效,这就要用到正交化的思想。举个例子,一台老式的电视机,上面有很多旋钮,你可以采用各种方式调整照片。但是,最有效的调整方式就是,每个旋钮只拥有一个功能,然后再调整旋钮。电子工程师已经花费了大量的时间来保证每个设计的旋钮都有相对可解释的功能:一个旋钮控制图像的高度,一个旋钮控制图像的宽度,一个旋钮控制视频的左右位置,其它的分别控制图像的旋转、平移——这样的设置确保了人能更加容易地操纵图像;如果一个旋钮控制着所有的功能,你几乎不可能调整电视图像。这就是正交化的设计思维,它能确保我们的操作简单、具有可解释性。那么,这与机器学习有什么关系呢?在构建有监督机器学习的系统中,我们也在做类似的过程。首先,我们必须确保我们的系统能在训练集上表现很好,然后在交叉验证集上,最后是测试集。如果你的算法在训练集上表示不好,这时你需要一个专用的“旋钮”来解决这个问题,这可能是你需要训练更大的神经网络,也或许是要采用更好的优化算法,如 Adam 优化算法;如果你的系统在交叉验证集上表示不好,那么你也需要开发出另一组正交化的“旋钮”来解决这个问题,这可能需要你采用更大的训练集,这有助于你的机器学习算法更好地泛化到交叉验证集上;如果你的系统在交叉验证集上也表现很好,但测试集上性能较差又怎么办呢?在这种情况下,你应该调整旋钮得到一个更大的交叉验证集;如果你的系统在测试集上也表现不错,但是用户体验较差,这意味着你可能需要回去重新选择交叉验证集或成本函数。在构建高性能的机器学习系统时,我们应该清楚哪个模块出现了问题,针对这些不同的模块采取不同的措施,机器学习系统的构建应充分考虑正交化的概念,确保各个流程、各个功能不交叉,保持相对的独立性,具有可解释的功能性。策略二:确定单一的模型性能评价指标和选择合适的训练集、交叉验证集/测试集无论你是调整超参数,还是尝试不同的学习算法,甚至是使用不同的机器学习模型,你都需要确定一个模型性能的评价指标。有了性能评价指标,你能快速地判断出新的尝试是否有效,这会加速你构建机器学习系统的步伐。应用机器学习需要丰富的经验,一个比较好的做法是,先编写代码,然后运行代码查看实验结果,并据此来继续改进你的算法。比如,你先建立了一个简单的分类器A,然后通过调整模型中的某些超参数或一些其它东西,你可以训练出一个新的分类器B,然后根据性能评估指标评估你分类器的优劣。采用精确率和召回率评估分类器的性能可能是合理的,但是可能会出现这样的问题:分类器A上的精确率更高,这意味着分类器A的预测结果准确率更高;分类器B的召回率更高,意味着分类器B的误分类概率更低。那么分类器A和分类器B谁更优呢?另外,如果你尝试许多想法,采用不同的参数,这通常会得到更多的分类器,如何从这些分类器中选择最好的分类器呢?这时如果仍然使用两个指标衡量模型性能,就显得不太合理,所以最好的方式是综合考虑精确率和召回率,如F1分数就是这样的一个指标。采用这样的评估指标,会加速机器学习的迭代过程。有时,我们并不能只是关注精确率、召回率,甚至是F1分数,我们需要考虑训练机器学习系统的更多限制因素,如时间、金钱。这时,单一的性能评估指标并不能满足我们的要求。更一般地说,我们需要在多个目标中确定出一个最合理的优化目标,将其它目标或条件作为限制性因素,然后在训练集或交叉验证集上或测试集上进行评估或计算,选出在有限制的条件下的最优算法。训练集、交叉验证集和测试集的选择对构建机器学习应用产品具有巨大的影响。那么,我们应该怎样选取这些数据集来提高团队开发机器学习系统的效率?训练机器学习模型时,通常会尝试许多不同的想法,在训练集上训练不同的模型,然后使用交叉验证集验证你的想法并选择一个模型。继续保持训练,在验证集上提高你的模型,最后在测试集上评估模型。事实证明,交叉验证集和测试集应该来自于同一数据分布。确定好单一的性能评估指标和交叉验证集后,机器学习团队就可以快速地进行创新,尝试不同的想法,运行实验,选择最好的模型。所以建议是,在划分数据集前,先将数据均匀混洗,再划分交叉验证集和测试集,这样就能保证两个数据集来自相同的分布。事实证明,验证集和测试集的规模选择也正在改变机器学习领域。你可能听说过机器学习领域内70/30的经验法则之一,即将所有的数据按70:30的比例划分为训练集和测试集,或者将数据集的60%划为训练集,20%划为交叉验证集,20%划为测试集。这在早期的机器学习领域相当合理,尤其是当数据量很少的时候。但是,现代的机器学习领域,数据集的规模极其庞大,这种情况下 70/30 的经验规则不再适用。假如你有 100 万个样例,可以选取其中的 98% 作为训练集, 1%作为交叉验证集,剩余 1%作为测试集才合理。这是因为其中的 1% 也有 10000 个样例,对于测试集和交叉验证集已经足够了。所以在现代大规模数据集的机器学习或深度学习过程中,测试集和交叉验证集的划分比例远远小于 20%。另外,深度学习算法对数据的需求量极大,所以大部分的数据都可以划分入训练集。而使用测试集的目的就是验证最终机器学习系统的可靠性,增加你对机器学习系统整体性能的信心。除非你需要非常准确地衡量系统的最终表现,否则你的测试集不需要数以百万计的样例,成千上万的数据足矣。策略三:调整性能评估指标和交叉验证集/测试集选择交叉验证集和评估指标就如同打靶。很多时候,你的项目已经进行了一部分,你才发现你将目标选错了,这如同你在打靶过程看错了靶子的位置。因此,建立机器学习系统时,第一步应该是确定评估指标,哪怕确定的评估指标并不一定最好,但你要有这个意识;然后采用正交化过程中的各个步骤,使算法能很好地工作。例如,你建立了两个识别猫的分类器A和B,它们在交叉验证集上的分类错误率分别是3%,5%,但当你在实际中测试你的算法的时候,你发现分类器B却做的更好——这可能是你选择的交叉验证集是高质量的猫图片,而建立的机器学习应用程序要处理的却是大量低质量的猫图像,这些图片不仅模糊,也可能包含各种奇怪的猫表情。这种情况下,你就需要改变你的交叉验证集以使你的数据能更好地反映出你实际情况。总而言之,如果目前的评估指标和数据不能很好地应对你真正关心的事情,这就是改变你的评估指标和/或交叉验证集/测试集的好时机。这会使你的算法更好地捕获你所关心的信息;这对于确定算法的优劣,加速想法的迭代过程,提高算法效率很有帮助。策略四:将系统的表现与人类的表现相比,确定提升系统性能的方法我们经常发现,当机器学习系统在某些方面超越人之前,系统的性能提升最快,在超越人之后,进步就变得缓慢。人类非常擅长分类,识别事物,听音乐,做阅读理解。当系统的性能超越人之前,人类总能使用特定的策略帮助改善系统的性能。这些策略包括使用更多标签化的数据;从误差分析中获得启示;进行偏差和方差分析。当系统的表现超越人之后,这些策略将更难奏效。这就是为什么要将机器学习系统的表现行为与人类的表现行为相比,尤其是在人类擅长的任务上。一个监督的机器学习系统要正常工作,从根本上来说,要保证两个方面:第一,很好地拟合训练集,低偏差;第二,训练的系统要有很强的泛化能力,即要在交叉验证集或测试集上很好地工作,低方差。在提升机器学习系统性能之前,首先要明白机器学习系统的训练误差与人类误差之间的差异,辨别是否存在高偏差。解决高偏差可以使用以下几种方法:使用更大的神经网络模型;训练更长的时间;使用 ADAM,Momentum,NAG,Adagrad, Adadelta,RMSProp 等更好的算法;调整神经网络架构,这包括神经网络的层数、神经元的连接方式、神经元个数,激活函数等超参数。然后,比较交叉验证集或测试集与训练集上的误差,确定是否具有高方差。方差的高低意味着你的模型是否具有很好的泛化能力。遇到高方差,可以采用以下几种方式解决:收集更多的数据训练模型;使用正则化方法,这包括采用dropout,数据增强,权重正则化等;调整神经网络结构等。评分希望 DT 君的亲测总结能帮助解决大家在构建机器学习系统中的某些疑惑,节约时间、成本,加快构建机器学习系统的步伐。
相关推荐
- 免责声明
- 本文所包含的观点仅代表作者个人看法,不代表新火种的观点。在新火种上获取的所有信息均不应被视为投资建议。新火种对本文可能提及或链接的任何项目不表示认可。 交易和投资涉及高风险,读者在采取与本文内容相关的任何行动之前,请务必进行充分的尽职调查。最终的决策应该基于您自己的独立判断。新火种不对因依赖本文观点而产生的任何金钱损失负任何责任。