深度学习入门课程导读#
对于初学者来说,“如何才能入门深度学习”、“先学原理还是先跑代码?”、“数学基础薄弱还能不能学?”这些都是初学者反复问起的问题。
如果你只是零星看过几篇博客、跑过几个 nn.Conv2d 的 Demo,却始终觉得深度学习像是隔着一层雾,那多半并不是因为你不够聪明,而是因为手上还缺少一条适合入门者的、可执行的路径。《跟我一起学深度学习》这门课,就是希望把这层雾一步步拨开,然你轻松入门深度学习。
下面,从整体上来介绍一下这门课该如何去学。
1. 为什么要学这门课?#
深度学习不是一夜之间出现的,因此对于绝大多数初学者来说,深度学习的门槛并不低,你可能:
-
一上来就被一堆抽象名词和公式淹没;
-
或者直接跳到一段冗长的 PyTorch 代码,看完不知道自己为什么写不出这样的代码;
-
又或者学到某个模型时,已经忘了前面那个模型为什么要那样设计。
这些感受并不全是你的问题,而是大量同类书籍或课程在创作时并没有把其中的关系梳理清楚。
2. 这门课有什么不同?#
这门课的内容并不是为了追赶热点而把一堆新名词堆在一起,而是抱着"为往圣继绝学"的态度,系统地把深度学习里那些经典的、值得反复回看的内容讲清楚。
在写法上,它严格遵循了以下原则,理解了这写原则,就能理解为什么这门课会"长得现在这个样子"。
“数无形时少直觉,形少数时难入微,数形结合百般好”。 在学习深度学习相关内容的过程中,如果只看论文那我们只能了解到算法模型的整体思想但无法精确刻画其中的细节之处;但如果只看代码又会发现均是各种矩阵之间的四则运算但并不知道其中的含义。 因此,更好的做法就是秉持着以数形结合的方式来介绍每一个算法模型,即先通过图示直观地来介绍模型的整体思想和原理,再通过实际的数学计算过程或代码来刻画其中的细节和模糊之处。用图形去形象化,用代码去唯一化,做到真正“数+形”的结合,让各位读者能够真正的做到看得懂、学得会、写得出。
为了直观感受卷积操作的计算过程,我们绘制了全部4种情况下的卷积计算示意图;为了厘清GoogLeNet中各个网络层的参数及输出信息,我们重新绘制了更加详细的网络结构图并进行了全方位的标记;为了讲清楚多头注意力中“多头”的概念,我们完整绘制了整个注意力机制的计算流程图;为了讲清楚BERT模型的预训练任务和4大经典下游任务的构建原理,我们对于每个任务模型和数据集构建流程都进行图例绘制;为了介绍百川大模型内部的原理机制,我们又根据官方开源的代码实现绘制了其网络结构图,以便让读者能够从第一眼就能把握其整体的技术架构;为了讲清楚大模型对话场景中的Key-Value缓存机制,我们根据Transformers框架中的实现代码绘制了对应原理图。这样的图示还有很多很多,因为我们始终相信,能够用眼睛看到的一定是最直观、最容易理解的。
“知其然,更要知其所以然”。 任何一个算法的提出都不会是凭空捏造或无中生有,它要么是为了解决新场景下的问题,要么是为了对已有算法模型的改进,因此明白一个算法模型背后的动机就显得格外重要。
一方面这样我们能更好地理解作者的想法以及与其它算法模型之间的联系,另一方面这也可以学习如何去讲好一个故事。所以我们不仅需要知道一项技术的原理,还需要知道为什么出现了这种技术、它的动机是什么、它需要解决什么样的问题。这样才更有利于我们了解整个技术的发展脉络并形成一个合理的思考方向。
因此,在行文过程中对于每一个算法模型的介绍都遵循了“动机+原理”的方式进行,即先梳理其提出时的背景动机,然后再介绍其具体的实现原理,而不是直愣愣地开始就某个算法模型进行介绍以至于前后衔接生硬。这也将使得各位读者不仅仅能够学会一个算法的原理和使用,同时还能知道它所提出的契机,养成这样的思维习惯对于一些读者后续的论文写作也是百利而无一害。
3. 怎么使用这门课?#
理解了上面的原则之后,再回到“怎么学”这个问题本身。
第一步,先整体后局部。
强烈建议在进入具体章节之前,先完整阅读一下 目录思维导图,对这门课的 10 章 90 个专题建立一个"先有森林、再去看树"的全局感。等到具体学习某一个模型时,你会知道它处在整个深度学习脉络中的哪个位置、它的上下游是什么。
第二步,按章节顺序、由浅入深地展开。
每一章内部也是"先讲动机,再讲原理,最后落到代码实现"的节奏,这与前言中的原则二是一脉相承的。建议尽量顺着章节学习,而不是直接跳到自己感兴趣的某一节,否则前面的"坑"很可能在后面的章节中一起爆发。
第三步,原理和代码并重。
这门课并不是"只讲理论不讲代码",也并不是"只贴代码不讲原理"。建议每学完一节,先在脑子里用自己的话复述一遍"它要解决的问题是什么、解决思路是什么、关键公式是什么",再去对照课程中的示意图和自己改写一遍示例代码。
4. 学到什么程度算入门?#
一个比较务实的入门目标是:能用自己的话讲清楚这门课中每一个主流模型要解决的问题、关键思想、主要公式,并且能基于 PyTorch 从零把它的最小实现版本复现一遍。如果实在写不出也没关系,但是能看懂和修改是底线。