跟我一起学深度学习(第一版前言)#
作为《跟我一起学机器学习》的姊妹篇,两年之后《跟我一起学深度学习》一书也终于出版了。北宋大家张载有言:“为天地立心,为生民立命,为往圣继绝学,为万世开太平”,这两部编著虽然没有这样的宏伟愿景,但在它们的编写过程中我们自始至终都秉持着”为往圣继绝学“的想法在进行。
作为机器学习方向的一个重要分支,深度学习在近年来的发展可谓是大放异彩。随着深度学习技术地不断发展,与之相关的技术应用已经深入渗透到了我们日常生活的方方面面,从医疗保健、金融服务到零售、交通再到智能助理、智能家居等等,尤其是在以GPT为代表的大语言模型出现以后,深度学习技术的影子更是无处不在。如今,利用ChatGPT来作为日常生产力工具更是成为了一种共识。例如在本书的成文过程过中ChatGPT就为我们提供了不少的灵感和启示,部分内容也是在ChatGPT的辅助下所完成,而这在10年乃至5年前都是难以想象的。也正因如此,对于这些热门应用背后技术的探索便逐渐成为了计算机行业及高校所追捧的对象。但对于绝大多数初学者来讲,想要跨入深度学习这一领域依旧存在着较高的门槛。所以,一本数形结合、动机原理并重、细致考究的入门书籍对于初学者来讲就显得十分必要了。
尽管目前市面上已经存在着大量类似书籍,并且每年还以数本的速度递增,但现有书籍的不足之处在于往往太过高估了学生们的学习能力。首先,这类书籍往往都只是罗列了一堆名词概念、抽象晦涩的数学公式或是枯燥冗长的代码,而这对于初学者或是数学基础比较薄弱的学生来说是极为糟糕的,作为过来人我们对此深有体会。其次,这类书籍在介绍各个算法时仅仅只是做到了知其然而不知其所以然,并没有介绍每个算法模型出现的背景和动机,仿佛它们都是一个个从天而降的独立个体彼此之间毫无前因后果的联系。最后,对于算法原理或实现的细节之处并没有充分把握,往往都是一笔带过,而这就导致了初学者总是有一种似是而非朦朦胧胧的感觉。
“数无形时少直觉,形少数时难入微,数形结合百般好”,这是本书在编写过程中所遵循的第一大原则。 在学习深度学习相关内容的过程中,如果只看论文那我们只能了解到算法模型的整体思想但无法精确刻画其中的细节之处;但如果只看代码又会发现均是各种矩阵之间的四则运算但并不知道其中的含义。因此,本书在写作之初就始终秉持着要以数形结合的方式来介绍每一个算法模型,即先通过图示直观地来介绍模型的整体思想和原理,再通过实际的数学计算过程或代码来刻画其中的细节和模糊之处。用图形去形象化,用代码去唯一化,做到真正“数+形”的结合,让各位读者能够真正的做到看得懂、学得会、写得出。为了将各个算法的建模原理表述清楚,本书使用近400余幅示意插图。
为了直观感受卷积操作的计算过程,我们绘制了全部4种情况下的卷积计算示意图;为了厘清GoogLeNet中各个网络层的参数及输出信息,我们重新绘制了更加详细的网络结构图并进行了全方位的标记;为了讲清楚多头注意力中”多头“的概念,我们完整绘制了整个注意力机制的计算流程图;为了讲清楚BERT模型的预训练任务和4大经典下游任务的构建原理,我们对于每个任务模型和数据集构建流程都进行图例绘制;为了介绍百川大模型内部的原理机制,我们又根据官方开源的代码实现绘制了其网络结构图,以便让读者能够从第一眼就能把握其整体的技术架构;为了讲清楚大模型对话场景中的Key-Value缓存机制,我们根据Transformers框架中的实现代码绘制了对应原理图。这样的图示还有很多很多,因为我们始终相信,能够用眼睛看到的一定是最直观、最容易理解的。
“知其然,更要知其所以然”,这是本书在编写过程中所遵循的第二大原则。 任何一个算法的提出都不会是凭空捏造或无中生有,它要么是为了解决新场景下的问题,要么是为了对已有算法模型的改进,因此明白一个算法模型背后的动机就显得格外重要。一方面这样我们能更好地理解作者的想法以及与其它算法模型之间的联系,另一方面这也可以学习如何去讲好一个故事。所以我们不仅需要知道一项技术的原理,还需要知道为什么出现了这种技术、它的动机是什么、它需要解决什么样的问题。这样才更有利于我们了解整个技术的发展脉络并形成一个合理的思考方向。
因此,本书在行文过程中对于每一个算法模型的介绍都遵循了“动机+原理”的方式进行,即先梳理其提出时的背景动机,然后再介绍其具体的实现原理,而不是直愣愣地开始就某个算法模型进行介绍以至于前后衔接生硬。这也将使得各位读者不仅仅能够学会一个算法的原理和使用,同时还能知道它所提出的契机,养成这样的思维习惯对于一些读者后续的论文写作也是百利而无一害。
“如履薄冰,有理有据”,这是本书在编写过程中所遵循的第三大原则。 在本书签订之初我们就预留了充分的时间,约定15个月交稿,计划12个月完稿,而实际14个月完成,目的就是为了能在一个轻松的氛围下完成写作。不过如果再算上之前在理解Transformer(2021年3月~2021年8月)和BERT(2021年8月~2022年4月)这两个模型所花费的13个月时间,整本书总共算是历经了27个月。所以我们也时常告诫自己切莫心急浮躁、切莫急功近利、切莫误人子弟,要为我们写下的每一句话、每一个字负责。同时,在本书的编写过程中对于每个重要细节的把握我们也会进行多方求证力争在理解上不会出现太大偏差。对于同一个模型的实现过程我们通常都会参考不同框架中的实现源码,TensorFlow、PyTorch、Transformers以及论文作者的实现等等,然后再根据这些代码整理出一份保留核心逻辑且适合初学者学习的示例代码。
例如在介绍BERT模型的实现过程时,我们先后阅读了GoogleResearch、PyTorch和Transformers框架中的相关实现过程;为了弄清楚fastText模型中关于中文$N$-gram的构建方式,我们在官方开源项目的dictionary.cc文件中找到了佐证;为了画出ELMo模型的真实结构图,我们在官方的Allennlp库中见到了答案;为了弄清楚大模型对话场景中模型在推理时的具体解码过程,我们几番周折终于在transformers库的generation/utils.py模块中找到了示例;甚至就连GPT这个简称的来历我们也都进行了细致的考究,而这些本都可以一笔带过。
对于“GPT”这个简称的来历,它到底应该是“Generative Pre-Training”的缩写,还是“Generative Pre-training Transformer”的缩写,我们也曾反复思考过很多次。此时有读者可能会说:这还用想?当然是后者,因为GPT使用到的是Transformer中解码器的部分。可当时我们并不这样认为。首先GPT表示生成式预训练模型“Generative Pre-Training”也并无不可,因为它的确是第一个大规模语料下的生成式预训练模型;其次GPT-1的论文中并没有明确交代“T”的代指,甚至全文中根本没有出现GPT这一缩写,反而从标题“Improving Language Understanding by Generative Pre-Training” 来看它更符合是“Generative Pre-Training”的缩写;最后,我们检索OpenAI 官网的所有论文和内容后,也并没有明确发现GPT的来由。但对于这件事的疑惑并没有停止。在我们写作GPT-2的相关内容时意外发现了论文第二作者 Jeffrey Wu 的 GitHub账户。在浏览他的所有项目时我们意外发现了一个名为名为minGPT的工程,其简介中赫然写到一句描述:“A minimal PyTorch re-implementation of the OpenAI GPT (Generative Pretrained Transformer) training” ,到这里总算是找到了官方对于GPT简称的认证。
当然,上面提到的细节之处本书中还有很多很多,各位读者可以在阅读学习的过程中自行慢慢体会。本书的目的只有一个,那就是所有的坑都让我们先来踩,所有的错都先让我们来犯,各位读者只需要跟随本书的足迹一步一步踏入深度学习的大门即可。不过遗憾的一方面是,这本书也只能刚好带领各位读者进入深度学习的大门,至于怎么将这些技术用得更好、用得更出色还需要各位读者在实际使用中进行反复锤炼。
2024年3月 于上海
章节导航
深度学习入门章节,介绍深度学习发展阶段、主流深度学习框架,以及学习路线与整体认知。
深度学习环境配置教程,讲解 CUDA 安装、PyTorch 环境搭建和常见开发环境配置方法。
深度学习基础教程,系统讲解 Softmax 回归、反向传播、激活函数、正则化与超参数基础。
卷积神经网络教程,介绍卷积和池化原理,以及 LeNet、AlexNet、VGG、GoogLeNet、ResNet 等经典模型。
深度学习实战章节,讲解模型保存与加载、迁移学习、TensorBoard 使用和多 GPU 训练方法。
模型优化教程,介绍学习率调度、BatchNorm、LayerNorm、GroupNorm 与 Adam 优化器原理。
循环神经网络教程,系统讲解 RNN、LSTM、GRU 的结构原理、训练方法与序列建模应用。
时序与融合模型教程,介绍 TextCNN、TextRNN、ConvLSTM、3DCNN 等网络的建模思路与应用。
自然语言处理教程,讲解词向量、Seq2Seq、神经机器翻译与注意力机制的核心原理和应用。
现代神经网络教程,系统介绍 Transformer、BERT、GPT、ChatGPT、提示词工程与大模型基础。
本页直达文章
目录思维导图
本节围绕学习思维导图展开,系统介绍其核心概念与相关内容。
《跟我一起学深度学习》第1版勘误
以下内容是书籍《跟我一起学深度学习》的勘误情况。