深度学习如何入门?

本题已加入知乎圆桌 »「机器学习 · 学以致用 」,更多「机器学习」相关话题讨论欢迎关注。
关注者
48,234
被浏览
12,243,137
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

收藏是点赞的4倍多了!干货贴可以先点赞哦,笔芯~

——————以下原回答——————

本科时我没有任何深度学习基础,通过正确的学习方法,硕士期间我成功入门DL,最终秋招收获了8家大厂offe(4家SSP)。

我把深度学习入门分为理论学习、系统实践两个部分,可以帮助你规划一条清晰可行的DL上手路线,同时规避低效错误的学习方法,最终拿到大厂offer。

一、理论学习

基础不牢,地动山摇。无论是深度学习还是其他计算机方向,掌握扎实的基本功都是必不可少的一环。

具体而言,深度学习理论包括哪些内容呢?我把它拆分为3个部分。

1)模型,首先是深度学习领域最经典的模型,包括人工神经网络ANN,多层感知机MLP,卷积神经网络CNN,循环神经网络RNN/LSTM,注意力网络Attention,它们相当于深度学习的骨架,不管是NLP/CV/ASR,还是推荐广告搜索,都会用到。

2)优化,包括损失函数、优化器(SGD、RMSProp、AdaGrad、Adam、AdamW)、前向传播和反向传播算法等,保障模型尽可能朝着最优方向迭代,相当于深度学习的血液。

3)工具,包括硬件(CPU,GPU)和软件(Python,深度学习框架,编程环境IDE),灵活的开源工具帮助用户极大的提升了深度学习开发效率。

这里给大家推荐一本《动手学深度学习》,作者是亚马逊资深首席科学家李沐博士,进入链接可以直接在线学习。看完文字部分,还可以参考各章节的对应代码进行巩固:配套代码

代码有3个版本,分别是Pytorch、Tensorflow和MXNET。如果你刚开始入门深度学习,建议优先选择Pytorch,降低学习成本。在练习过程中,还能得到Python编程的提升。

如果觉得看书太慢,建议你同步观看李宏毅老师的深度学习视频课,内容十分通俗易懂。看完最好把视频课后的练习题做一遍,这样对算法的理解会更加深刻。

问题来了!看完上述资料,如何检验理论基础掌握的是否扎实呢?

我随机出几个题目,请你测试一下:

1)给一个两层的MLP和简单的二维向量,请推导出 forward propagation,再用 chain rule 推导出 back propagation;

2)介绍一下常见的激活函数和优化算法,比如 relu 相比 sigmoid 的优点在哪,Adam对于SGD做了哪些改进,交叉熵和KL散度的公式是什么;

3)请介绍一下缓解数据分布不均匀的方法,至少3个;

4)Attention相比CNN做了哪些改进,RNN为什么容易造成梯度消失&爆炸。

如果这些问题你都能快速准确的答上,说明到目前基础部分掌握的还不错。

之前我从面试官的角度,详细总结过面试中的高频深度学习考点。完整内容可以参考下面这篇高赞回答:

如果你是面试官,你怎么去判断一个面试者的深度学习水平?


还有很多同学私信我,除了深度学习,我是否应该同时学操作系统,数据结构,计算机网络,高数等内容呢?

答案是需要学,这些都属于和计算机紧密关联的学科,包括英语。但仔细掂量下你会发现,如果样样都学时间根本不够用。怎么办?

核心逻辑在于分清优先级!

如果你打算学深度学习,以后从事算法工程师相关岗位,那深度学习理论基础和项目经验才是真正的重点!同时面试中往往会考察数据结构手撕代码题,需要提前巩固练习。

而操作系统,计算机网络,高数微积分等学科,在面试中直接考察的比例极低,一般不会超过10%。

为了学习效率最大化,我们要有目的性地去学习。我建议你将学习战线拉长,在整个研究生阶段利用空闲时间弥补操作系统、网络、计组、高数等内容。

PS:最近我整理了研究生期间看过的100本AI算法书单,包含机器学习、深度学习、面试指南各个方面。在我的公众号【NLP情报局】后台回复【书单】即可领取!

二、系统实践

深度学习是一门需要实践的交叉学科,经过前边理论基础的积累,相当于一只脚已经迈进了深度学习的大门。如果想让另一只脚也顺利迈进来,还需要系统实践。

具体方法无外乎以下3种:做比赛练coding,找实习做项目,做科研发论文。下面我们一个一个来拆解。

1. 做比赛

算法竞赛往往和生活热点相关联,给定一个实际生活中遇到的真实问题,要求参赛者给出最优质的方案。

参加算法竞赛的好处正在这里!由于比赛结果需要是一个完整的解决方案,务必会涉及数据处理与分析、模型搭建与训练、参数调整、效果优化提升等各方面的任务,能系统地锻炼coding和解决问题的能力。

下面我分享3个从基础机器学习到NLP任务的权威比赛。

(1)Kaggle 泰坦尼克号

Kaggle 平台上非常经典的机器学习入门比赛,通过名字、年龄、性别、船舱等级等特征,预测泰坦尼克号上的乘客最终是否幸存。

讨论区有很多参赛达人分享自己的解题心得。

解决方案参考:Titanic - Machine Learning from Disaster

(2)天池0基础NLP新闻文本分类

NLP领域经典的分类问题,根据新闻文本对新闻类别进行分类,通过比赛可以系统练习NLP的预处理、模型构建和训练等知识点。

解决方案参考:【详细注释+流程讲解】基于深度学习的文本分类 TextCNN

(3)天池新冠疫情相似句对判断大赛

NLP领域经典的文本相似匹配问题,以疫情知识问答为背景,选手需要判断不同患者的提问是否为相似问题。

这个比赛我当时也参与了,最终在941支参赛队伍中获得了第6名。

解决方案:我将比赛的完整代码和原始数据集做了整理,放在这个仓库中。这套代码我做过多次迭代优化,非常值得你学习,掌握后还能快速迁移到其他任务中。

看到这儿,证明你也是一个热爱学习和思考的人,不妨花1秒钟给这篇回答点个赞,再慢慢阅读,谢谢你哟!

2. 找实习

除了做比赛,最值得投入的就是去实习,在实际项目中提升深度学习认知和能力。

实习过程中,能享受公司各方面的福利,而且通过转正拿到offer的概率,比直接硬刚秋招要容易很多。

我的亲身经历告诉我,实习能很好地培养发现问题和解决问题的能力。它们也是从事深度学习工作最核心的两个能力。

从研一开始,我在导师的创业公司里实习了将近两年。当时创业公司人手不足,我在实习过程中,独立负责过数据标注、数据清洗、模型训练、模型部署、并发调优整个流程。

这样做有利有弊。一方面一个人可能同时干了AI训练师、数据分析师、算法工程师、后端开发等几个人的活,碰到项目上线会比较累;另一方面,由于参与了算法开发到落地的全过程,对整套pipeline有清晰的认知,也明白了深度学习技术在实际产品中如何发力。

这段实习经历成为我简历中最大的亮点之一,很多面试官都对我的项目经验很感兴趣,从动机、目的、亮点、困难、最终解决方案等角度刨根问底问了很多问题。

由于这些项目都是自己实打实做出来的,所以回答得都还不错,最终帮助我在秋招中拿到了8家大厂offer。

3. 做科研

做科研也是很多人上手深度学习的路线之一,但它有一定运气成分,四分靠实力,三分靠努力,还有三分天注定。

下面我们分别来看看做科研的优劣。先说缺点,主要有2个。

1)门槛高;真正搞科研需要扎实的理论水平,敏锐的学术嗅觉,懂得挖掘idea;英语阅读、写作过关,用词地道,知道怎样写paper容易中稿;同时编程强悍,能快速迭代实验,验证结果。

2)付出与产出不一定成正比;即便上面的条件你全都具备,paper能否中稿还和评审人的口味等“随机因素”相关,有一定运气成分。如果忙活2年没发出一篇顶会,又错过了实习,研究生产出几乎等于 nothing。

之前听一位985的师兄说,他们实验室有50多个深度学习方向的博士,每当夜深人静之际,经常能听到博士宿舍楼传来哭声(科研压力太大,没有达标数量的paper毕不了业)。

甚至还有博士生在实验室做实验,做着做着就哭了。。

当然如果你确实有实力发出了论文,优势也很明显:

1)冲击上不封顶的offer;除了常规白菜-SSP offer,包括阿里星、腾讯大咖、华为天才少年、美团北斗在内的顶级offer基本只面向有大量科研成果的同学,薪资高的吓人。

2)有可能对整个领域产生影响;一篇有影响力、高引用的论文,有可能直接让作者“青史留名”,例如Attention、Transformer、BERE的出现就颠覆了NLP界的游戏规则。深度学习领域想要有更长远的发展,需要不断涌现这样硬核的paper。

3)简历亮点;简历上有顶会论文(一般需要一作)能帮助你的面试降低不少难度。

所以“做科研”这条路线建议你谨慎选择,除非自身能力强、基础好,或者有靠谱的导师/师兄师姐带着,否则不要把宝都押在这上面。

相比之下,做比赛和找实习的门槛与难度就要低很多,适合90%的人。

三、总结

理论学习+项目实战是最适合大部分同学入门的路线,而且从大方向上来看,包括深度学习在内的计算机专业依然是普通人获得高薪的最优选择

今年腾讯校招给算法开出的最低档offer总包是42W,我身边还有一个学妹拿到了68W的ssp offer。

但也正因为福利太诱人,深度学习门槛水涨船高,只入门是远远不够的。说白了,想拿到大厂offer,需要你在入门基础上做出亮点。可以是知名比赛的SOTA,丰富的实习经历,顶会中稿等等,亮点越多,package越大。

相信你通过努力,能在深度学习方向做出成果,获得心仪的offer!


最后和你正式介绍一下自己哈:

我是让算法变得更简单的叶琛,一个爱旅行的算法工程师兼干货答主,也是个喜欢用接地气的文风为年轻朋友分享职场经验和算法知识的人。希望我的文字可以为你提供帮助!

总结不易,觉得有帮助请给 @Giant点个赞哟,谢谢啦!