入门与进阶深度学习

在入门或者进阶深度学习的时候,很多人都会存在各种各样的疑问与迷惑。本课程的初衷也是希望能帮助大家答疑解惑。在开始学习深度学习之前,先明确几个观点,解决一些疑惑。这里,我针对曾经遇到的大多数入门者经常会遇到的问题,这里进行了总结。后续再发现更多的问题,会进一步完善。

我总结了以下几个问题,这也是知乎等各个平台了很多人关心的问题:

  • 深度学习是否可以快速入门?

  • 深度学习是否需要学习理论和公式推导?

  • Fork 了很多源码和 Demo,却没什么进步?

  • 源码读不懂,复现起来很难,怎么办?

  • 学完之后,依然找不到实习工作?

  • 关于深度学习,面试会问哪些问题?

接下来,我们针对上述问题,分别展开回答。

1. 深度学习是否可以快速入门?

对于这个问题,我们首先看一下,入门深度学习,你需要学点什么(假设已经具备 Python 编程基础、高数、线性代数、概率统计的基本数学基础)。

如果你能够坚持看完周志华所著的机器学习入门教材《机器学习》(俗称“西瓜书”)、深度学习基础教程《深度学习》/《Deep Learning》、Caffe 教程《深度学习:21天实战 Caffe》、TensorFlow 教程《TensorFlow 实战》这四本书,相信这时你已初步具备了深度学习的基础,接下来就是特定领域的深入探究。比如,如果想要进行计算机视觉方面的研究,首先需要掌握目前各种各样的卷积神经网结构,于是又需要花费至少两周的时间了解从 LeNet 到 ResNet 再到 mobileNets 等等卷积神经网,具体可以看下表。

深度网络名年份作者描述
LeNet1994Yann LeCun简单卷积神经网
AlexNet2012Alex Krizhevsky2012届图像识别大赛的冠军
ZFNet2013Matthew D Zeiler可视化
Net in Net2013Lin M网络嵌套模型
VGGNet2014牛津大学的视觉几何组ILSVRC-2014中定位任务第一名和分类任务第二名
GoogLeNet2014GoogleILSVRC14 比赛中获得冠军
Inception-v2/v32015Google小卷积代替大大卷积
ResNet2015MSRA 何凯明团队 
Stochastic_Depth2016Gao Huang随机深度
Wide ResNet2016Sergey Zagoruyko考虑宽度网络性能
Inception-ResNet V1/V2/V32016Google融合 resnet 和 inception 结构的网络
ResNet in ResNet2016Sasha Targ泛化的 resnet 网络结构
Fractalnet2016Gustav Larsson分形结构
ResNeXt2016Saining Xie减少参数
DenseNet2017Gao Huang稠密网络
DPN2017颜水成结合 resnet 和 densenet
PyramidNet2017Dongyoon Han金字塔+resnet 网络
SqueezeNet2017伯克利&斯坦福的研究人员网络压缩
MobileNet V1/V22017Google精简网络
ShuffleNet2017旷视科技精简网络
SENet2017Momenta精简网络+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。这里我总结了一些,供大家参考:

  • 代码题(LeetCode 类型)。主要考察数据结构和基础算法,以及代码基本功。大家在找工作之前,一定要刷一些题;

  • 机器学习基础。推荐大家阅读周志华老师的西瓜书、Ng 的机器学习课程和李航的《统计学习方法》;

  • 深度学习基础。推荐大家阅读《Deep learning》花书;

  • 编程语言。推荐 Python+TensorFlow+Caffe;

  • 充分准备做过的项目。尽量准备一些不同的项目作为亮点展示给面试官;

  • 阅读 CVPR、ICCV、ECCV 上相关领域的最新 Paper,甚至可以和面试官探讨;

  • 调整好心态,不要急躁,也不要灰心,坚持找,相信最终一定能拿到好的 Offer。

最后,向大家推荐一些深度学习的面经:

  • 应届硕士毕业生如何拿到知名互联网公司深度学习 Offer?

  • 腾讯、滴滴、阿里、三星深度学习实习岗位面经

  • 2017秋招面试总结:计算机视觉/深度学习算法

  • 国内大互联网公司深度学习面试题

结束语

我相信每一个想要从事深度学习算法工作的人,都心怀一颗不甘的心。我也希望大家能够发挥自己的最大努力,去提升自己,多从自身找原因,发现自己的不足,而不是抱怨面试官的不公。相信,千里马终将会遇到伯乐,如果现在还没有,那一定是你跑的还不快,仍需要加油!

最后,祝每一位即将从业者,都能够找到一份心仪的 Offer。

转载自

https://mp.weixin.qq.com/s?__biz=MzI5OTYzODI4Mg==&mid=2247483661&idx=1&sn=88ad9de6bc7124ac7f113ab37441eafd&chksm=ec92ca68dbe5437e85125204461779a6839d743683d05ec3c1ec0a41005a7eaf0cb95ab3f330&mpshare=1&scene=1&srcid=0825M9H9RitvPmF7UZZZSUOs#rd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值