学完深度学习

2020-07-19 22:21发布

可以从事的领域有哪些?

可以从事的领域有哪些?

1条回答
小红
2楼 · 2020-07-20 13:23






作者:RyanShrott

来源:机器之心


本文长度为2500字,建议阅读5分钟


本文作者是加拿大国家银行首席分析师RyanShrott,完成了迄今为止(2017年10月25日)吴恩达在Coursera上发布的所有深度学习课程,并为我们提供了课程解读。


目前Coursera上可用的课程中,有三门课非常值得关注:



  1. 神经网络与深度学习(NeuralNetworksandDeepLearning)

2.改进深度神经网络:调整超参数、正则化与优化(ImprovingDeepNeuralNetworks:Hyperparamatertuning,RegularizationandOptimization)

3.结构化机器学习项目(StructuringMachineLearningProjects)


我发现这三门课非常重要,过程当中,我们可以从吴恩达教授那里获得很多有用的知识。吴恩达在教学语言上做得很好,解释概念清晰明了。例如,吴恩达明确指出监督学习并没有超出多维曲线拟合过程的范畴,而对于这种方法的其他理解方式,如对人类神经系统的模拟,实际上并不严谨。


学习这些课程的基础知识要求不多,只要求你事先掌握一些线性代数,以及Python基础编程知识。在我看来,你也需要了解向量计算来理解优化过程的内在知识。但如果你不关心内部运作方式,并只希望了解高级层面上的内容,那就尽管跳过微积分的部分。


第1课:为什么深度学习如此热门?


现在人类产生的90%数据是在最近2年内被收集的。深度神经网络(DNN)能够利用体量巨大的数据。因此,DNN超越了较小的网络和传统学习算法。




规模是如何推动DNN性能的


此外,算法上的创新也使得DNN的训练速度变得更快。例如,从Sigmoid激活函数改为RELU激活函数对梯度下降等任务的优化过程产生了巨大影响。这些算法的改进使得研究人员可以更快地遍历灵感→代码→经验的开发循环,从而带来更多的创新。




深度学习开发循环


第2课:深度学习中的向量化


在开始这门课之前,我并不知道神经网络可以在没有任何明确循环语句的情况下被实现(除了层之间的)。吴恩达点明了Python中向量化编程设计的重要性。课程附带的作业引导你进行向量化的编程,同时这些方法也可以很快迁移到你自己的项目中。


第3课:深入了解DNN


前几门课实际上在引导你使用NumPy从头开始实现前向和反向传播。通过这种方法,我更加深入了解了高级深度学习框架(如TensorFlow和Keras)的工作原理。吴恩达解释了计算图背后的想法,从而让我们了解了TensorFlow如何实现「神奇优化」的。


第4课:为什么需要深度?


在这一节中,吴恩达深入解释了DNN的层概念。例如,对于面部识别系统,他向我们解释了先处理的层是用于处理面部边界的,其后的层用于将这些边界识别为面部组件(如鼻子、眼睛、嘴等),再其后的层会将这些组件整合到一起识别人的身份。他还解释了电路理论(circuittheory)的思想——存在一个函数,需要来自隐藏单元指数式的数字来适应浅网络的数据。可以通过添加有限数量的附加层来简化指数问题。


第5课:处理偏差和方差的工具


吴恩达解释了研究者识别和处理偏差方差相关问题的步骤。下图诠释了一种解决这些问题的系统性方法。




解决偏差和方差问题的方法


他还解决了偏差和方差之间的「权衡」(tradeoff)。他认为在现在这个深度学习的时代,我们拥有独立解决每个问题的工具,而使权衡不再存在。


第6课:正则化


为什么向成本函数添加惩罚项会降低方差?在上这门课之前我的理解是它使权重矩阵接近于零,从而产生一个更「线性」的函数。吴恩达给出了另外一种和tanh激活函数相关的解释,即较小的权重矩阵生成较小的输出,使得输出围绕在tanh函数线性区域的中心。





tanh激活函数


他还给出了dropout的有趣解释。之前我认为dropout在每次迭代中消灭随机神经元,就像越小的网络线性程度就越强一样。但是吴恩达的解释是从单个神经元的角度来看待生命(life)。





单个神经元的角度


由于dropout随机消灭连接,这促使神经元向父系神经元中更加均匀地扩展权重。通过扩展权重,它可以减少权重的L2范数(squarednorm)。他还解释了dropout是L2正则化的自适应形式,两种方法效果相近。


第7课:归一化为何有效?


吴恩达展示了为什么归一化可以通过绘制等高线图的方式加速优化步骤。他详细讲解了在归一化和非归一化等高线图上进行梯度下降所需要的迭代次数变化,即相同优化算法没经过归一化操作会需要更多的迭代数。


第8课:初始化的重要性


吴恩达表示不使用参数初始化可能导致梯度消失或爆炸。他展示了多个步骤来解决这些问题。基本原则是确保每一层的权重矩阵的方差都近似为1。他还讨论了tanh激活函数的Xavier初始化。


第9课:为什么使用小批量梯度下降?


吴恩达使用等高线图解释了使用小批量和大批量训练之间的权衡。基本原则是较大的批量每次迭代会变慢,较小的批量可以加快迭代过程,但是无法保证同样的收敛效果。最佳方法就是在二者之间进行权衡,使得训练过程比一次性处理整个数据集要快,又能利用向量化技术的优势。


第10课:高级优化技术的直观理解


吴恩达解释了合适使用动量(momentum)和RMSprop等技术限制梯度下降逼近极小值的路径。他还用球滚下山的例子生动地解释了这一过程。他把这些方法结合起来来解释著名的Adam优化。


第11课:基本的TensorFlow后端理解


吴恩达不仅解释了如何使用TensorFlow实现神经网络,同时还讲解了在优化过程中出现的后端进程。有一个家庭作业就是鼓励我们使用TensorFlow实现dropout和L2正则化,这加强了我对后端过程的理解。


第12课:正交化


吴恩达还讨论了机器学习策略中正则化的重要性。其基本思想是,我们希望实现并控制影响算法性能的因素,即一次只控制一个影响性能的因素。例如为了解决偏差问题,我们可以使用更大的网络或更鲁棒的优化技术,我们希望这些控制只影响偏差而不会影响其它如泛化等问题。缺少正交化控制的案例是过早停止了算法的最优化过程,因为这样会同时影响模型的偏差和方差。


第13课:单数值评估度量的重要性


吴恩达强调了选择单数值评估度量(singlenumberevaluationmetric)的重要性,它可以允许我们评估算法。如果目标改变,我们应该在模型开发过程中仅更改评估度量。吴恩达给我们讲解了一个使用猫分类应用识别色情图片的案例。


第14课:测试和开发集的分布


通常我们会假设测试集与开发集(devsets)的分布相同,这就确保了我们在迭代过程中朝向正确的目标优化。这同样意味着如果你决定纠正测试集中错误的标注数据,那么你需要在开发集中纠正错误标注的数据。


第15课:处理不同的训练和测试/开发分布


吴恩达介绍了为什么我们对训练和测试/开发集没有相同的分布这一问题感兴趣。因为我们希望根据实际关心的样本来计算评估度量。例如我们可能希望使用和训练问题无关的的样本进行训练,但我们并不希望算法使用这些样本进行评估,这就令我们的算法可以在更多的数据上进行训练。经验上,这种方法可以在许多案例上产生非常好的效果。缺点是可能我们的训练和测试/开发集有不同的分布,这个问题的通常解决办法是,可以留出一小部分训练集,并确定训练集的泛化性能。然后我们可以比较这些误差率与实际的开发误差,并计算一个「数据误匹配」的度量标准。吴恩达还解释了解决这些数据误匹配问题的方法,例如人工数据合成。


第16课:训练集/开发集/测试集大小


在深度学习时代,训练集/开发集/测试集的分隔方法也发生了巨大的改变。之前,我只知道较普遍的60/20/20分隔。吴恩达强调,对于一个非常大的数据集,应该使用98/1/1甚至99/0.5/0.5的分隔。这是因为开发集合测试集只要足够大能保证模型处于团队设定的置信区间即可。如果你使用

1千万个训练样本,那么10万样本(即数据集的1%)就足够保证开发集和/或测试集的置信区间了。


第17课:近似贝叶斯最优误差


吴恩达解释了在某些应用中人类级别的性能如何作为贝叶斯误差的替代。例如,在视觉和听觉识别任务中,人类级别的误差通常很接近贝叶斯误差,可以用于量化模型中可避免偏差。如果没有诸如贝叶斯误差这样的基准测试,理解网络中的方差和可避免的偏差问题是很困难的。


第18课:误差分析


吴恩达介绍了一种能显著提高算法性能的有效性的误差分析技术。基本想法是手工标注错误分类的样本,集中精力处理对错误分类数据影响最大的误差。




猫识别App误差分析


例如,在猫识别中吴恩达认为模糊的图像最容易导致误差。这种敏感性分析可以令人看到在降低总体误差的过程中,你花费的精力到底有多值得。还有一种可能是,修复模糊图像是很费力的任务,而其它的误差更容易理解和修复。敏感性分析和近似操作都将作为决策过程的因素。


第19课:什么时候使用迁移学习?


迁移学习允许将一个模型的知识迁移到另一个。例如,你可以将一个猫识别app中的图像识别知识迁移到放射诊断中去。实现迁移学习需要用更多的数据重训练网络的最后几个层,以用于相似的应用领域。其思想基础是网络的低层的隐藏单元拥有更加广阔的应用范围,即对具体的任务类型不敏感。总之,当任务之间拥有相同的输入特征,并且需要学习的任务拥有比需要训练的任务多得多的数据的时候,迁移学习是可行的。


第20课:什么时候使用多任务学习?


多任务学习迫使单个神经网络同时学习多个任务(和每一个任务都配置单独的神经网络相反)。吴恩达解释道,当任务集合通过共享低级特征获得学习增益,以及每一个任务的数据量规模相似的时候,这种方法能工作得很好。


第21课:什么时候用端到端的深度学习?


端到端的深度学习需要多层处理并将它们组合到单个神经网络中,这使得数据能在没有人工设计步骤引进偏差的前提下自主进行优化过程。另一方面,这个方法需要非常多的数据,有可能排除潜在的手工设计成分。


结论:


吴恩达的深度学习课程使我对深度学习模型的开发过程有了基本的直观理解,以上我解释过的课程只不过是这个课程中展示资料的一部分。即使完成了课程你也还不能称为深度学习专家,而我唯一的不满是课程的作业布置太简单了。


原文链接:

https://medium.com/towards-data-science/deep-learning-specialization-by-andrew-ng-21-lessons-learned-15ffaaef627c






相关问题推荐

  • 回答 19

    人有多大胆  地有多大产  你学好,知识够,过10问题不大!

  • 回答 6

    首先所谓的饱和只是从大环境上粗犷的理解,这个本身理解就是有偏差的。IT行业缺的是精英人才,而整个行业参差不齐,很多都是平庸之辈,所以很多大公司要的是优秀的,而不是一般的,去招聘类网站看一圈你就知道,IT行业的薪资和需求量非常巨大,尤其是电商运营...

  • 回答 7

    ① Web开发方向:众多大型网站均为 python 开发。豆瓣:公司几乎所有的业务均是通过 python 开发的知乎:国内最大的问答社区,通过 python 开发(Quora) 春雨医生:国内知名的在线医疗网站是用 python 开发的还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘...

  • 回答 4

    基于python作为网站后端,和数据库进行关联,提供数据给页面的技术,分为:1、html前端页码技术2、python 后端技术(django,flask,web.py,tornado.....)3、服务器网站部署和架构技术三部分组成...

  • 回答 2

    接口调用一般分为前端调用和后端调用。百度API有很多官方文档和接口说明,在调用时传入相对应的数据。如果在后端python代码中调用可以借助:requests模块实现。requests模块主要用于模拟浏览器进行访问。也可以用于请求某些接口获取数据。...

  • 回答 3

    最主要的还是看自己的兴趣,自己喜欢的话,在工作中就不会感觉那么累。而且工作也不会一直加班开发,没有项目的时候,大部分时间还是比较轻松的。

  • 回答 8

    是的,深度学习是建立在有Python的基础上的,是一个由浅入深的过程

  • 回答 4
    已采纳

    如何成为全栈工程师,从前端到后端的技术很多百,全栈工程师并不需要你真的掌握所有的技术,你应该将自己的精力聚焦于关键开发技能以及一些必须掌握的附加技能上。你必须要会版本管理,精度通一门语言,熟练运用开发框架和第三方库,精通前端技术,熟悉数据库...

  • 回答 3

    import redef command_add(date, event_details, calendar):'''Add event_details to the list at calendar[date]Create date if it was not there:param date: A string date formatted as YYYY-MM-DD:...

  • 回答 4

    ① Python基础:Python语言基础,函数,文件操作,面向对象,异常处理,模块和包,Linux系统使用,Mysql数据库等;② 全栈开发:Web编程基础,Flask框架,Django框架,Tornado框架,Elasticsearch全文搜索引擎等;③ 网络爬虫:数据爬取,Scrapy框架,分布...

  • 回答 1

    深度学习是属于Python人工智能方向的,所以像是有Python基础的人或是想要提升技能从事人工智能方向的可以来某公学习,课程很好,师资阵容强大。

没有解决我的问题,去提问