前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实习商汤,校招华为,我的深度学习之路

实习商汤,校招华为,我的深度学习之路

作者头像
用户1737318
发布2018-12-13 15:39:42
1.8K0
发布2018-12-13 15:39:42
举报

大家好,我是为人造的智能操碎了心的智能禅师。

尽听说现在国内外一线互联网巨头,包括后起的独角兽,对 AI 人才的需求非常大,Google、Facebook 为了抢 AI 人才都快 battle 起来了。

然而实际上,AI 岗位还是面临僧多粥少的窘境。其中一个非常关键的问题在于,真正掌握 AI 知识技术的人才,还是非常稀缺。

那么如何能够成为 AI 人才,又如何能够被抢呢?是很多人都非常关心的问题。人工智能头条的后台也经常能够收到很多类似的留言。

所以禅师联系到了曾在商汤实习,目前校招选定华为的小伙伴,谈谈他是如何在深度学习这条路上,一步一步往深度走的。

本文较长,建议收藏,转发,并认真实践

本文适用人群:非计算机、非 AI 专业的同学,或刚接触该专业的本科、硕士生。

作者介绍:

沿途的笔记。西安电子科技大学人工智能学院研三学生,发表论文两篇,拥有目标检测、图像匹配、高光谱图像分类 3 项专利。遥感领域国际竞赛取得第一名

全文大约4500字。读完可能需要好几首下面这首歌的时间

?

自 2016 年阿尔法狗问世以来,深度学习的地位无论是在学术界还是在工业届都逐步攀升。

从事深度学习岗位的工程师们的薪水也水涨船高,拿今年秋招各大互联网巨头给应届生的待遇便可见一斑。

重赏之下,必有勇夫。所以很多学数学、机械等其他专业的同学也想转行加入深度学习的大浪潮。

与此同时,过剩的人才也导致了该领域的竞争空前激烈,更有甚者传出某企业的 CV 算法岗投岗量与 HC 比达到 100:1。

下图是某四个知名互联网企业简历投递量与 HC 比:

目前关于深度学习入门、进阶的教程也很多,琳琅满目。很多大牛写的内容,对新人来说,经常显得太深奥。

很多刚入门的同学们、从其他行业转行的开发者,往往是一脸懵逼的进去,又一脸懵逼的出来。

于是我决定,自己的实际情况出发,以自己的学习经历、心得和里程,写一篇针对性很强的文章。

入门

素材:精准简洁,切忌贪多

刚接触深度学习的同学,很容易陷入一个死结:“贪多”。

网上到处搜笔记搜资源,看见“机器学习”“人工智能”…的群就加。特别热衷于搜集类似于“机器学习从入门到精通”、“XXX 大学机器学习公开课”、“X 百 G 的深度学习资料一定要收藏”…

先不说这些资源的完整性,单就内容量来讲,这几十个 G,甚至是几百 G 的学习资源,也会让人晕头转向。

(禅师插个嘴,其实就想想你硬盘里那几十个 G 的视频,你有没有看完。这些学习资料,你就能看完了?)

因此,选择精准的入门教程非常关键。

我推荐的视频资源有:

  1. Coursera 上的吴恩达的《机器学习》
  2. Hinton 的 《Neural Networks for Machine Learning》

推荐的书籍:

  1. 周志华老师的《机器学习》
  2. Ian Goodfellow 的“花书”《深度学习》

这一部分主要是用于夯实基础,了解相关的概念。虽然本文的主题是深度学习的学习历程,但机器学习与深度学习有着千丝万缕的联系,最好还是要一起看一看。

上面所提到的资料不要觉得看一遍就完事儿,一定要多看几遍,即使有实战经验之后也可以反复看,保证你每看一遍都会有新的体会。

勤做笔记,动手推导

在学习上面我推荐的两个视频资源及书籍的时候,会涵盖高等数学、矩阵论、凸优化、概率统计等知识。

我们需要熟悉的机器学习和深度学习理论包括:

重要理论上的数学推导,一定要一步步的验证!

能根据书本(或视频)一步步走下来。遇到知识盲点、遗忘的部分,就针对性的查阅资料,力争不放过任何重点。

这里需要提醒的是,不建议从头开始学习数学知识,因为时间周期太长,中途可能仍会遗忘。可以在实际问题涉及到的时候,随时查阅。

好,恭喜你,你已经一只脚踏进了深度学习的大门。

确定研究领域后,就可以开始混迹相关网站、论坛。然后开始着手学习经典主流深度学习算法。

进阶:从经典主流内容下手

等你真正进入大门后,你就会发现,深度学习实在是一个非常庞大的系统,涵盖的知识面很广,那么我们该从那个方向下手呢?

答案是:

  1. 内容,选择经典主流
  2. 方向,选择自己感兴趣的

为什么要强调经典主流呢?因为新出的论文,太容易遇到水论文了。无论什么领域,经过时间积淀下来的东西,才是好东西。

相反,经典主流的东西,理论完备,积累的资料多,研究的人多,碰到问题也相对容易找到前辈的解答。

为什么选择自己感兴趣的方向呢?还不是因为兴趣是最好的老师!

例如如果你比较感兴趣 CV,就可以从 CV 的目标检测为切入口。然后再深入一线去看相关论文。

以 CV 中的目标检测为例,它的发展历程如下图所示:

目标检测发展史?

现阶段在视觉顶会上,关于目标检测的文章就已经很多了,短时间内根本不可能全部吃透。

所以要有针对性的重点进行突破,其实很多算法都是触类旁通的。比如?上图中红色内容所表示的算法需要精读,其他检测算法了解即可。

更具体的,了解传统 DMP 算法及主要缺陷,然后 two-stage 思路发展到 RCNN 做出了哪些改进。

再到 SPP-Net 做了哪些改进,然后到 Fast-RCNN、Faster-RCNN 又改进了什么?以及 one-stag 思路中 SSD 系列、YOLO 系列之间的差别。

恭喜你,你已经正式踏上了深度学习这条不归路了。

实操

解决问题

上面提到需要重点精度的论文,由于我们自身水平有限,而论文受到篇幅限制,没办法把细节都解释清楚。

这就导致我们再实操过程中,会遇到很多问题。遇到问题不可怕,我们可以从下面两个方向入手解决:

  1. 在相关论坛搜集高手们对该论文的解读
  2. 阅读论文开源代码

还解决不了的,Google、论坛、博客、人工智能头条的股东粉群……

你会发现,你遇到的问题,别人可能早就遇到并且得到解决,这样就事半功倍啦。

总结经验

问题解决之后,应该做总结,便于巩固理解,加深印象。

尤其要做的是,找出论文各部件之间的差异,分析这个差异是“改进”造成的差异还是由于对主体算法“因地制宜”而造成的差异。

比如,YOLO 和 YOLOv2 之间,bbox 的回归计算方法是不一样的。我们要体会作者的初衷,不断去靠近这些大神们的思路。

再比如,Faster-RCNN 和 YOLOv2 虽然均是有事先 Anchor Boxes 来对 bbox 做回归,但是回归的计算方式也不一样,这就是由于这两个 Anchor Boxes 的由来不同导致的。

Faster-RCNN 是由三种宽高比、三种尺寸形成的 Anchor Boxes,而 YOLOv2 则是由先验框聚类得到的。

将这些细枝末节以图表,文字的形式总结起来(可以写在 CSDN 或 GitHub 上,也可以写在纸质版笔记本上),能够有助于我们找到一些算法的改进空间或者一些新的灵感。

选择合适的框架

对于重要的论文文章,光看是远远不够的,我们还得学习其工程实现。

一来是编程复现论文算法有助于加深理解,二来是可以将我们所学知识转化为生产力。

下图是某机构对各大深度学习框架的综合评估。

这里重点推荐 TensorFlow 和 PyTorch,因为它们不仅灵活性高,而且背后有强大的团队维护,可查阅的文档也很丰富。

当选定一个深度学习框架之后,应当通过具体工程实例去学习,而非直接去阅读源码。

遇到一些常用的或者复杂的函数用法,要总结到个人博客中。

更重要的一点是,要时常混迹于 GitHub 之中,将 star/fork 数量较多的、且与自己研究方向相近的代码 clone 下来去练习,学习大佬们的编程风格。

讲真,好的编程习惯写出来的代码简直是一个非常愉悦的艺术享受,这里切记自己闭门造车,一定要多读大神们的代码。

这里拿 TensorFlow 举例。先去看 TensorFlow 文档,接下来看《TensorFlow 实战 Google 深度学习框架》,然后是《TensorFlow 实战》。注意别弄错了顺序,前面那本书稍微简单点,后面那本书主要是 demo。

待到 TensorFlow 能够灵活运用的时候,我们就得学习调参技巧了,这里推荐魏秀参的大作《解析深度学习网络——深度学习实战手册》(当初看这本书的时候,感觉自己的很多想法都与大神在这本书中提到的结论一致,感觉能与大神想到一起,真是十分开心)。

实战演练,paper 复现

当自己的编程能力、使用深度学习框架的能力达到一定水平后,我们要进入实战演练阶段:复现经典论文。

刚开始可能会比较难,所以我们可以先从论文作者或者热心同行们开源的代码入手。具体步骤是:

  1. 浏览开源代码,比对代码与论文描述是否一致,代码是否对自己更进一步理解论文有所帮助
  2. 调试代码。建议初学者不要囫囵吞枣,只是“看”代码,还要一步步调试,看各个函数的用法,学习各种编程小技巧,验证每步的结果与自己在“大脑编译”的结果是否一致
  3. 动手复现。复现之前,可以先根据开源的代码画一个程序框图,然后根据框图逐次实现。然后将自己编写的代码调通,对比开源代码看看有哪些差距。一般差距主要体现在:代码的简洁性和功能的完整性。
  4. 重复第 2、3 步,直到自己能一目十行阅读开源代码,能掌握每个地方的编程技巧,复现出来的代码与开源代码基本一致,且能与论文对应的上的时候,这篇文章可以算是吃透了。

延伸

专注自己的东西

当自己复现的论文达到一定数量之后,编程水平会得到一个飞跃的提升。这时,我们要将自己从一个“学习者”的角色转换到“模仿者、改进者”的角色。

一方面,我们要整合自己已经吃透的论文(包括代码),另一方面,我们要与时俱进跟进前沿研究,跟着大佬们“分一杯羹”。

经典文章和新论文两手抓

到了这个阶段,我们就不仅仅只读经典的文章了,还要开始接触新领域,新文章。我们千辛万苦学这么多东西,最终就是要有产出。

对于很多年前的研究课题,它们只能帮助我们夯实基础,提升基本功,并不能有助于我们发表属于自己的论文或者专利。

因为这些经典主题,早就被前辈同行们嚼烂了,只剩下骨头渣了。

碎片化阅读

当我们对深度学习领域坚持学习到一段时间之后,总会收藏一些自己感兴趣的论坛、专栏,以及大牛们的个人主页,他们会分享一些最新的经验或者研究成果。

对于这些经验成果,我们可以选取自己感兴趣的或者与所研究领域相关的部分重点阅读(而不是全盘通读,这样太浪费时间)。

比如前一阵子吴恩达分享的《Machine Learning Yearning》里面有些实战经验就很值得学习。

学会辨别新出来的好论文

对于年代较为久远的论文,我们可以通过文章的索引量或者开源代码 star 数量的多少来判断其是否值得读。

对于新出炉的论文,我们可以去相关论坛看大神们的推荐(如关注一些知乎上的大 V 们,他们会经常在专栏里推荐一些新出炉的好文章)。

还有一些高质量的公众号(比如禅师特别推荐人工智能头条),论坛等。这里重点推荐 paperweekly。

将这些新文章里的 idea 与自己储备的基本知识相互碰撞,寻找一切可能产生的关联,或者找到新文章 idea 的不足,自己能加以改进。

发表属于自己的文章

当经典文献和新文章积累到一定程度时,我们一定会有一些自己的想法。这时候就需要我们扎实的代码功底,将我们自己的想法实现出来。

对于新手,我觉得有这样几种情况可以视为自己的成果发表成论文:新问题用老方法,老问题用新方法,改进他人的新方法。

然后将自己的 idea 及实验结果向导师汇报,让导师帮忙将自己的 idea“润色加工”,就可以愉快的发 paper 啦。

总结

本贴是对我个人学习深度学习历程的一个总结,更偏实际应用。

如果自己时间充裕,且导师愿意放人的话,可以去一些科研氛围浓厚的企业实习,如商汤科技、Face++、地平线、阿里达摩院、腾讯 AI Labs 等。

笔者曾有幸在商汤研究院实习过一段时间,当真是人才济济,被组内的小伙伴渊博的知识,敏捷的头脑所折服,对提升自己的见识水平大有裨益。

但如果找的企业太偏向业务,我个人认为还不如呆在实验室多做做科研,多发几篇论文来的实在。在大神们创造的理论框架下,千锤百炼、精益求精,就一定能有所收获。

我整理过的一些重要书籍,LeetCode 刷题代码,以及面试经验等,详见

https://github.com/computervisionlearner/Start_DeepLearning

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 入门
  • 进阶:从经典主流内容下手
  • 实操
  • 延伸
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档