伴随人工智能时代的到来,深度学习技术也发挥着越来越重要作用,越来越多的技术人才开始投身入这一行业中,并希望发展成为一名深度学习算法工程师。然而,在实际的工程设计中,深度学习研发者总会面临着各种问题与困惑,比如:
本达人课,将针对上述问题进行一一分析与解答。主要针对机器学习初学者、深度学习入门者以及其他想从事深度学习相关工作的从业者,内容涉及到深度学习的基本概念,模型原理,不同类别的网络模型,模型设计的基本原则、训练、优化、模型精简等不同方面。另外,本课程还通过实际的网络设计,结合相应的原则来解决分类任务、序列任务等,带领大家深入理解网络设计的基本原则和方法,并锻炼深度学习编程能力和技巧。
本课程共包括22个课时,分为四大部分:
王学宽,曾就职于海康威视研究院担任计算机视觉方向算法工程师,发表多篇学术论文、申请多项国家专利,参与多项图像、自然语言项目相关课题研发工作,在计算机视觉领域具有深厚的专业知识和工程开发经验。运营有公众号:白话机器学习(微信号:simpleml90hou),开设有知乎专栏:《深度学习干货铺》。
大家好,我是深度学习算法工程师王学宽。现就职于某 AI 智能科技公司,参与教育+计算机视觉类创新性产品研发任务。曾在香港理工大学担任 RA,参与大规模图像检索项目的研发,后加入海康威视,参与 ADAS 视觉相关算法研发工作。曾发表多篇学术论文、申请多项国家专利,先后参与多项图像、自然语言项目相关课题研发工作,在深度学习领域具有深厚的专业知识和工程开发经验。运营有公众号:白话机器学习(微信号:simpleml90hou),开设有知乎专栏:《深度学习干货铺》。
很高兴能在接下来的十周里,通过《深度学习工程应用指南》达人课来分享深度学习在工程应用中的实战心得,包括在网络设计、训练调参、优化压缩、迁移剪枝等各个方面的技术知识和探索心得。希望能够通过通俗易懂的语言,带大家一起揭开深度学习的神秘面纱,帮助大家快速入门深度学习,并尽快展开工程实战项目。
深度学习入行的迫切性已无须强调,无论从行业发展前景、行业人才需求、国家人工智能发展战略等不同角度来看,深度学习作为人工智能发展的基石,在未来行业中必将大放异彩。目前,越来越多的企业,纷纷迈开了深度学习的第一步,并取得重要成果。对于从业者而言,行业的欣欣向荣带来更多的就业机会,更高的薪资待遇。越来越多的人开始希望投身到深度学习这个行业之中,从事工程或者算法类的相关工作。在实际工作中,入行者即便已了解了 Caffe 和 TensorFlow 等基础知识,但在实际工程设计时,依然会遇到各种各样的困惑,比如:
而帮助大家认识这些问题,并尝试着解决这些问题,也是我推出这门课程的初衷。
主要优势可以总结一下几点:
全面的内容、快速入门到实战
本课程内容涉及到工程实战深度学习中的各种概念、问题,内容全面、适合初学者从入门到快速实战,更面向工程开发。
工程实战下的通俗概念阐释
本课程涵盖深度学习各个不同领域涉及到的模型基本原理,并结合工程经验,对这些核心概念进行分析、解释。针对具体的数学推导公式,深入剖析。本课程在第二部分涉及到多个概念,每个课程将配有细致的图示化解释,通俗易懂。
工程实战下的设计原则和技巧
本课程重点介绍深度学习在实际工程实战时会遇到的一些问题,并针对这些问题,给出各种常用的解决技巧,另外,在设计网络时,也给出基本的设计原则,更加符合工程开发。
更加直观的实战代码讲解
本课程对网络设计原则、模型讲解的过程中,会引入大量的深度学习代码,以 Python 语言为主,来对模型、设计技巧、原则等问题进行说明,更加直观。
本课程共包括 23 个课时,分为四大部分。主要针对机器学习初学者、深度学习入门者以及其他想从事深度学习相关工作的从业者,分别涉及到深度学习的基本概念,模型原理,不同类别的网络模型,模型设计的基本原则、训练、优化、模型精简等等不同方面。另外,本课程还通过实际的网络设计,结合相应的原则来解决分类任务、序列任务等,加上动手实践过程,带领大家深入理解网络设计的基本原则和方法,并锻炼深度学习编程能力和技巧。
第一部分(第01-02课):绪论。
初窥门径。本部分带你初步认识深度学习、了解深度学习行业背景、发展状况以及如何进阶深度学习。
第二部分(第03-14课):深度学习的核心理论。
深谙其理。本部分从工程实践的角度出发,详细介绍深度学习中涉及到的各种各样的概念、原理,尤其在工业实战中的使用技巧和原则,帮助大家打好深度学习工程实战基础。
第三部分(第15-20篇):工程实战中深度神经网设计原则。
登堂入室。本部分从实际工程的角度出发,详细介绍卷积神经网、循环神经网的发展历程、工程设计原则和方法,并带领大家一起设计一个精简的深度网络,并用于目标检测任务。
第四部分(第21篇):总结、回顾与展望。
总结与超越。本部分对课程进行总结,回顾已经学习过的知识点,在此将这些知识点串成一条完整的技术路线,温故知新,并为大家接下来展开深度学习专业领域研究奠定理论基础。
很多朋友会认为深度学习是一门工程类学科,也有人把它比喻成一个炼丹的过程,而 Caffe、TensorFlow 就相当于是炼丹炉,而深度网络则像是在炼丹。而深度学习框架的使用,使得这项炼丹技巧越来越大众化,越来越多的人慢慢开始忽视深度学习背后的科学知识,把它仅仅当做一门实验科学来做。甚至有人认为,只要调调包、调调参就够了。然而,真的是这样子吗?
我相信,有这样想法的人,即使是从事着这样行业,估计也不会有太高的成就。深度学习技术发展确实十分迅速,网络上各种各样的开源模型确实存在很多,那这些模型真的就只是调用下就可以了吗?
实际上,并不是这样子的。基础不扎实,首先你可能很难获得一份大厂的 Offer。国内外名企在招聘的时候,十分强调基础的重要性,而这里的基础并不是仅仅只看过西瓜书、NG 的课程这么简单,更需要你能够讲出其中的内部原理、机制。对于深度学习工程师,不仅仅需要你去调调参,同样也需要你去阅读大量的文献,设计新型的网络结构。
记住,想要走的远,就需要基础打得牢。不要相信那些网上的烟雾弹,迷失本心。付出多少才会收获多少,薪资也才会符合自己创造的价值。想想公司可能花闲钱来养你划水吗?答案一定是,No!
相信很多订阅或者准备订阅这个课程的人,都是希望在未来能够投身到深度学习、人工智能这个行业中的,而目前伴随着行业人数、技术门槛等各方面的提升,很多公司在笔试、面试的时候,都更加关注深度学习基础是否扎实这一问题。在面试中,很多面试官喜欢提问深度学习模型背后的一些理论性的东西。因此,更加需要大家注重这方面的积累。本课程通过细致的原理剖析,帮助大家吃透深度学习中的各个理论,相信用来挑战接下来的面试应该是绰绰有余了。
很多同学在开始学习深度学习的时候,都喜欢从模型的角度入手,本课程同样也不例外,在介绍过深度学习的基本理论和方法之后,我们立刻将重点转移到真实的模型和方法中,通过以模型为载体,再次反观理论方法,相互印证,进而更好的推动读者对这两方面内容的理解。
本课程中涉及到了丰富的模型设计、压缩、迁移等工程实战相关知识,相信目前在网络上已经存在各种各样的关于 Caffe、TensorFlow 的视频教程,这些教程更多的偏向于纯粹的工程入门,更像是在教你用一门软件。对于工程化而言,模型设计原则、模型压缩方法、技巧等等往往具有更加重要的意义。它是我们掌握深度学习技术的进阶基础,一个合格的深度学习算法工程师,不仅要懂得如何设计模型,更需要懂得如何设计精简的模型。
在模型讲解阶段,课程会引入大量的实战代码,并通过代码讲解,来带领大家深入理解不同模型的网络结构。而深度学习本身也更加强调实战能力,“纸上谈兵”没有实际意义。
我希望本课程的读者在掌握深度学习相关知识和技巧的同时,能够将所学应用到实际的项目中,时刻牢记,我们需要有更多的创新精神和意识,真正用 AI 技术去重新认识世界、改变世界,推动社会的进步。我相信,这个时代是人工智能的时代,同时也希望这个时代能够有你的身影。
最后,预祝每一位准备入行深度学习的朋友,均能够通过自身的学习与努力找到心仪的工作。如果大家有任何疑问和建议,也可以通过读者圈或者在我的知乎专栏“深度学习干货铺”留言与我交流,希望我们能够共同探讨、共同进步。
在入门或者进阶深度学习的时候,很多人都会存在各种各样的疑问与迷惑。本课程的初衷也是希望能帮助大家答疑解惑。在开始学习深度学习之前,先明确几个观点,解决一些疑惑。这里,我针对曾经遇到的大多数入门者经常会遇到的问题,这里进行了总结。后续再发现更多的问题,会进一步完善。
我总结了以下几个问题,这也是知乎等各个平台了很多人关心的问题:
接下来,我们针对上述问题,分别展开回答。
1. 深度学习是否可以快速入门?
对于这个问题,我们首先看一下,入门深度学习,你需要学点什么(假设已经具备 Python 编程基础、高数、线性代数、概率统计的基本数学基础)。
如果你能够坚持看完周志华所著的机器学习入门教材《机器学习》(俗称“西瓜书”)、深度学习基础教程《深度学习》/《Deep Learning》、Caffe 教程《深度学习:21天实战 Caffe》、TensorFlow 教程《TensorFlow 实战》这四本书,相信这时你已初步具备了深度学习的基础,接下来就是特定领域的深入探究。比如,如果想要进行计算机视觉方面的研究,首先需要掌握目前各种各样的卷积神经网结构,于是又需要花费至少两周的时间了解从 LeNet 到 ResNet 再到 mobileNets 等等卷积神经网,具体可以看下表。
深度网络名 | 年份 | 作者 | 描述 |
---|---|---|---|
LeNet | 1994 | Yann LeCun | 简单卷积神经网 |
AlexNet | 2012 | Alex Krizhevsky | 2012届图像识别大赛的冠军 |
ZFNet | 2013 | Matthew D Zeiler | 可视化 |
Net in Net | 2013 | Lin M | 网络嵌套模型 |
VGGNet | 2014 | 牛津大学的视觉几何组 | ILSVRC-2014中定位任务第一名和分类任务第二名 |
GoogLeNet | 2014 | ILSVRC14 比赛中获得冠军 | |
Inception-v2/v3 | 2015 | 小卷积代替大大卷积 | |
ResNet | 2015 | MSRA 何凯明团队 | |
Stochastic_Depth | 2016 | Gao Huang | 随机深度 |
Wide ResNet | 2016 | Sergey Zagoruyko | 考虑宽度网络性能 |
Inception-ResNet V1/V2/V3 | 2016 | 融合 resnet 和 inception 结构的网络 | |
ResNet in ResNet | 2016 | Sasha Targ | 泛化的 resnet 网络结构 |
Fractalnet | 2016 | Gustav Larsson | 分形结构 |
ResNeXt | 2016 | Saining Xie | 减少参数 |
DenseNet | 2017 | Gao Huang | 稠密网络 |
DPN | 2017 | 颜水成 | 结合 resnet 和 densenet |
PyramidNet | 2017 | Dongyoon Han | 金字塔+resnet 网络 |
SqueezeNet | 2017 | 伯克利&斯坦福的研究人员 | 网络压缩 |
MobileNet V1/V2 | 2017 | 精简网络 | |
ShuffleNet | 2017 | 旷视科技 | 精简网络 |
SENet | 2017 | Momenta | 精简网络+imageNet2017 冠军 |
学完这些卷积神经网,这时候你一定会发现大多数深度学习会更关注某一领域,比如:检测模型、分割模型、关键点等等。于是又一堆的 Paper 袭来。因为你需要阅读最新的 Paper,了解最新的技术,以检测网络为例,
学完这些,才真正的算是深度学习入行了,对于一些其他的深度学习任务,你可能需要花费单独的时间再去了解研究。
相信看到这里,大家已经明白,“深度学习能否快速入门”这一问题的答案。当然是不能。我在网上也看到过很多这样的网络教程,标题大多以“快速入门,快速精通”等等为标题,整个课程的时间也在很短的时间之内能够完成。相信,如果大家购买课程,并认真学完,一定会有所收获,但短时间内成为一名合格的算法工程师,是不现实的。这也是很多人会在学完课程之后,很难找到工作的一个主要原因。积累不够,内行人或者说面试官是很容易识破的,因此,希望大家在学习这些课程的时候,端正好自己的心态——深度学习是很难短时间速成的,我们需要打好基础,才能够在这一领域走得更远。这也就涉及到了我们的下一个问题,深度学习是否需要学习理论和公式推导?
2. 深度学习是否需要学习理论和公式推导?
答案一定是肯定的,理论基础是必须的,也是决定你以后是否具备核心竞争力的一个重要因素,也决定了你网络创新的能力有多强。很多学习深度学习的人,为了速成,会忽略基础的积累,直接上手 Caffe 或者 TensorFlow,开始调包之旅,对于这些模型背后的理论一知半解,或者从一些博客上随便看看。
曾经面试过一些深度学习岗位的求职者,在问到一些背后理论问题的时候,经常会收到的答案是“这个我从知乎上某某地方看到过……”。从这个答案我只能够看到你关注了一些知乎的大 V,可能收藏了很多这样的文章,然而,并没有认真得思考过为什么。一般这种求职者,都会被贴上一个“基础不扎实”的标签,往往也很难成功拿到 Offer。
为什么需要学习理论和公式推导?我总结出原因有以下几点:
对于大多数面试官而言,不仅仅想听你讲故事,因为很多你做的事情,在面试官看来都是比较容易和基础的事情。在看到你的简历上项目的名字的时候,大致就已经猜到项目的内容和所用到的方法。因此,在和面试官交流的时候,他会更在意求职者是否具备扎实的基础,而这些更能反映求职者的学习能力和认识问题的深度。这些在后续工作中,会反映你可能更具备解决和处理问题的能力。因此,扎实的理论基础,往往会更容易赢得面试官的青睐。
如果你准备从事算法工程师工作,那接下来你的同事一定也是一群可爱的算法工程师。而在工作之中,难免会遇到同事来和你讨论一些论文,一些新的理论和方法。此时,如果不具备扎实的基础,仅仅只会调用一些模型的话,很容易在同事心中造成不好的印象,尤其是领导。如果大家都认为你水平一般的话,相信在接下来的工作之中,一定会产生很多不利的影响。
结合自己长期从事算法工程师这一岗位的实际情况来看,有些时候,我们不仅仅需要会调用现有的模型,甚至会由于各种各样的原因,不得不实现一些底层的东西,比如:解决硬件上对于某些层不支持的问题。这时候,当然需要你具备较好的工程基础,同样更需要对于原理和源码的深入理解。另外,在实际工作中,很多时候现成的网络结构并不能满足性能要求的,需要我们自己去设计、实现一些精简的网络结构。没有扎实的基础,也就很难在工作上做出重大贡献。
因此,希望大家都能够做到“知其然,也知其所以然”的程度。相信做到这样程度,一定能找到心仪的 Offer。
3. Fork 了很多源码和 Demo,却没什么进步?
很多人会在私下里微信问我这样一个问题——在 Github 上 Fork 了很多的源码,也跑了不少的 Demo,却依然感觉自己的深度学习技能没有得到太大的提升,很迷茫,不知道接下来怎么去做。
这时候,我通常会问他们,除了配置环境、跑 Demo,你还有尝试和去做下面几件事情吗?
很多人听完这一系列问题之后,才会发现,自己原来还有这么多事情没有去做。其实,Fork 代码,运行一些 Demo 这仅仅是展开深度学习研究的第一步,后续还有太多的事情需要我们去进一步完成。相信做完这些事情,你再也不会觉得自己没有进步了。
4. 源码读不懂,复现起来很难,怎么办?
阅读源码就带来一个很重要的问题,就是源码读不懂怎么办?很多读者也会因此而感到挫败,或者干脆怀疑自己是否适合继续从事算法的相关工作。其实,就算是我,也会遇到很多源码读不懂,很多文章很难复现的情况。这里给大家提供几个参考的建议:
5. 学完之后,依然找不到实习?
关于实习的问题,也是很多读者最关心的问题之一,很多人,在学习完深度学习的课程之后,发现去面试的时候,依然很难找到工作,这也使得很多转行做深度学习朋友产生很大的挫败感,甚至怀疑自己是不是适合这一行业。也有朋友会向我咨询这方面的问题,我觉得有必要关于此问题,提醒大家需要注意以下几点:
理论基础是否扎实。 关于理论基础的重要性,在上文中已经进行了阐述。大家谨记,仅仅通过看视频获取基础理论,是远远不够的。很多人在看完 Ng 的机器学习课程以后,会觉得自己已经入行机器学习了,实际上,这些还远远不够,你仍需要补充大量的理论知识,包括数学、编程、深度学习模型,以及阅读大量领域相关英文文献;
具备实际的项目经验。 这里的实际项目指的是利用深度学习解决过一些实际的问题,而不是跑过 mnist,cifar 这样的数据集;
是否发表过高质量的论文。 注意这里指的是高质量,至少 EI、SCI 检索的论文。如果有能力,可以考虑顶会和顶级期刊的论文;
是否有过竞赛的经历。 很多人会说,自己转行过来的,并没有机会去发表论文,或者导师没有相应的课题,那怎么办?这时候,你可以考虑去参加天池数据大赛、Challenge AI 挑战赛等等,目前国内外,有很多很多这样的公开比赛,或者在公开的数据集刷榜。这些都是无门槛,任何人都可以参与的,靠这些为自己的简历镶金,何乐而不为呢?
计算机基础知识是否扎实。 很多算法面试,比如 BAT 这些大厂 ,会更加看中你的计算机基础是否扎实,会考察一些 ACM 类型的题目。关于计算机素养的考察,希望大家能够经常去 LeetCode 这样的平台刷题,来提升自己的思维和编程能力。
6 .关于深度学习,面试会问哪些问题?
最后,我们再看一下,深度学习的面试会遇到哪些问题,希望大家能够有针对的进行准备和培养,相信,大家也会更容易找到自己心仪的 Offer。这里我总结了一些,供大家参考:
最后,向大家推荐一些深度学习的面经:
我相信每一个想要从事深度学习算法工作的人,都心怀一颗不甘的心。我也希望大家能够发挥自己的最大努力,去提升自己,多从自身找原因,发现自己的不足,而不是抱怨面试官的不公。相信,千里马终将会遇到伯乐,如果现在还没有,那一定是你跑的还不快,仍需要加油!
最后,祝每一位即将从业者,都能够找到一份心仪的 Offer。
阅读全文: http://gitbook.cn/gitchat/column/5b30789393f14818da76bdbc