Lec 1.1 Why study deep learning systems?

Intro

本讲将是本课程主题的基础介绍,同时也会涵盖一些课程的组织细节。因此,它会与其他讲座有些不同,其他讲座会详细介绍方法、数学、代码等等。

本讲实际上有两个部分。

  • 第一部分是关于为什么您应该学习深度学习系统,为什么你可能想要学习本课程。

  • 第二部分将更多地涉及课程信息和组织细节。

所以让我们开始谈论为什么你可能想要学习深度学习系统


Aim of this course

本课程的目标是向你介绍现代深度学习系统的运作方式。也就是说, 你将学习这些系统内部的工作原理。 你将学习到许多方法,如

  • 自动微分

  • 一些基本的神经网络结构、优化

  • 在GPU等系统上进行高效操作的方法。

这就是现代深度学习系统如何在现代硬件上高效运行的方式,为了加强您的理解,您将通过作业开发 Needle 库,Needle 代表深度学习的必要元素。它是一个类似于 PyTorch 的深度学习库。你将逐步通过作业实现许多常见的架构和该库的许多方面。

那么,为什么要这样做呢?为什么你可能想要学习深度学习?为什么您可能想要学习深度学习系统?

首先,让我们先回答比较简单的问题:为什么你想要学习深度学习?如果您正在参加这门课程,那么很可能你已经喜欢深度学习或者至少对深度学习有所了解,并且你很可能已经对为什么要学习深度学习有一个很好的想法。


Why study deep learning?

不过,我还是会给你们举一些例子,很多你们可能已经见过了。但如果我们在第一堂深度学习课中没有展示一些深度学习目前所能做到的很酷的事情,那这也不算一门深度学习课程。

  • 也许你们听说过著名的 AlexNet 架构,它是在2012年开发的,在 ImageNet 图像分类挑战中表现非常出色。我需要强调的是,这不是一部深度学习的历史,也不是要归功于任何深度学习的第一元素或第一架构的分配,这是一场我不想卷入的争论。但是这是一种非常著名的架构,它至少在公众视野中真正打开了深度学习作为一个领域和一种技术的可用性和能力,通过构建一个可以将图像分类为1000个类别的架构,比当时的标准计算机视觉技术要好得多。

  • 你们可能也听说过 2016 年开发的 AlphaGo 系统,它击败了围棋世界冠军,虽然不是真正的世界冠军或第一名,但是在实际上击败了一个非常高排名的围棋选手,可以说是世界上最好的选手之一。围棋在很长一段时间内被视为电脑博弈的一项巨大挑战,因为每个位置可能的走法数量非常大,而像在国际象棋中使用的标准技术在这里并不适用。但是使用深度学习的技术,DeepMind 团队能够建立一个系统,能够在当时击败世界上最好的选手之一,而且很快地击败了所有世界上最好的人类选手,这一点比领域内任何人都预期的要快得多。

  • 也许你们还听说过或见过像这样的图片,这些是 StyleGAN 系统生成的人脸图像。我知道现在我们都习惯看到这些图片了,我们现在已经很习惯看到不真实的人脸,我们到处都能看到它们。但我还记得当这篇推文第一次在 Twitter 上发布时,人们在 Twitter 上宣传这篇论文,我以为人们在开玩笑。我认为这实际上只是一组训练集的图片,人们在开玩笑,并且说这些图片是由对抗网络生成的。但是,不,它们真的是由这个网络生成的假图像。我认为我们现在几乎已经认为,生成假人脸的图像有多容易了,而这是我们四五年前所没有的能力。

现在稍微说一些更近期的历史

  • 你们可能已经听说过 GPT-3 系统。这是由 OpenAI 建立的一个可以生成文本的系统,它生成文本的方式是它基本上一个词或一个标记一个词地写下文本。因此,在给定句子中的所有先前标记的情况下,它预测下一个标记,然后将其添加到文本中,并预测下一个标记。从这个看起来非常简单的过程中,我们仍然能够生成非常复杂和连贯的文本,只需要一个旨在预测文本中下一个可能标记的深度学习系统即可。实际上,在这里视频中,我要求 GPT-3 概括本课程,并生成了一份非常合理的深度学习课程概述。实际上,这是本课程的一个非常糟糕的总结,因为它说,我们将讨论理论和数学,然后涵盖无监督学习和强化学习。但它将是一个很好的涵盖了许多大学开设的深度学习课程的概述。

  • 你们可能也听说过 AlphaFold 和 AlphaFold 2 系统。这是一种系统,它可以从DNA序列中预测蛋白质的三维结构。这在很长一段时间内一直是生物学上的一个巨大挑战,了解DNA序列如何形成体内执行任务的蛋白质的三维结构。在很长一段时间内,在这项蛋白质折叠预测的任务上,这是一张在这个任务上的知名竞赛的进展和准确性的图表。经过四年的努力,DeepMind 建立的 AlphaFold 系统能够真正取得惊人的突破,在预测的质量和准确性方面产生惊人的科学突破,直到在某些限制情况下,你可以认为这个问题已经有效地被解决了。

  • 最后,如果我不在2022年包含一张由深度学习系统生成的图片,那就不完整了。这是 Stable Diffusion 系统生成的一张图片,它实际上是在一个半个月前发布的。实际上,它是在我们公布这门公共课程的同一天发布的,所以他们真的抢了我们的风头。当然,这也与 DALLE-2 系统的工作相关,还有之前许多论文的工作。但这些系统非常惊人,因为它们可以从一个文本提示中生成一张在许多情况下看起来非常逼真的油画或图像。在这里,我写了一个文本提示,即一只穿着学术袍的狗在上课前紧张地准备着他的第一堂课,距离课堂开始还有10分钟。我不知道为什么我会想到这样的事情,你可以自己想象一下。这是一幅油画,你可以看到系统生成了一个看起来像一只穿着学术袍的狗正在准备讲座,可能是在课前十分钟,他的表情看起来很紧张,看起来像一幅油画。这太惊人了,我们在这些系统中拥有的能力。

现在你可能注意到所有这些例子,除了第一个例子以外,它们都是在公司实现的。因此,如果你有点担心所有这些东西都是在大公司中完成的,一个人或一个小团队真的可以做些什么来影响这个领域吗?首先,我想指出第一个论文和 Stable Diffusion 论文实际上是一个小团队在正确的方法和正确的聪明才智的帮助下所能做到的两个例子。


Not(just)for the "big player"

但是我也想强调一些例子,这些例子由一些小型的团队完成,但仍然在塑造深度学习领域方面表现出惊人的能力。

  • DeOldify 是由两个人完成的工作,这个技术实现了将黑白老照片转换为彩色版本的最先进方法。虽然图像上色作为一个研究课题已经被研究了很长时间,但这个系统真正是几个人的努力,最终实现了我所见过的这种任务的最佳视觉效果。

  • 如果你现在从事计算机视觉工作,你可能已经听说了 PyTorch 图像模型或 timm 库。这实际上是一个人的工作,Ross Wightman 想要实现许多来自多篇论文的深度学习图像分类模型,并在基准数据上对它们进行测试。在许多情况下,他们使用那些论文中的预训练权重或从头开始进行训练。这始于一个人的相对较小的努力,但现在已经成为我们在构建这些视觉系统时学术界所使用的主要图像分类库。

  • 最后,我不会再强调这些其他的例子,因为这些实际上是社区努力的成果,而且有很多其他的库和框架也是社区驱动的,并且它们对于推动该领域向前发展起到了非常重要的作用。

到目前为止,我所讲的所有内容可能对你来说并不新鲜。如果你正在观看这个视频,你可能会说,“我明白了,深度学习很棒,这就是我为什么要学习这门课程,这就是为什么我一直在看这个视频,如果你还没有跳过去的话。”

但是你为什么要学习深度学习系统?为什么你真正想学习深度学习系统呢?不仅仅是深度学习本身,还有支撑这些系统的实际架构。


Why study deep learning systems?

我将展示一张Google Trends图表,显示过去15年左右(14年)对深度学习这个词的测量兴趣。我将在这张图表上注释几个事件。

  • 在2000年代晚期,深度学习从学术上开始蓬勃发展。我当时参加了一些会议,比如NeurIPS,深度学习成为一个领域,每年都会有很多相关论文。但是,或许这就是学术工作一直以来的情况。与当今相比,Google Trends测量结果表明对深度学习的兴趣并不高,它只是像许多其他学术趋势一样,你可能从未听说过它们,因为它们已经15年了,现在没有人再使用它们。

  • 在2012年,就像我之前提到的那样,AlexNet网络被发布,这并不是深度学习领域的历史,我当然也应该提到,深度学习和神经网络的实际数学可以追溯到80年代,甚至可能追溯到70年代,这只是近代史而已。再次强调,我只注释了一些事件,不想争辩谁是先行者等等,这不是我想玩的游戏。AlexNet是一种非常流行的架构,但是仍然并没有引起深度学习的高度关注,尽管有了图像分类的最新技术。

    那么,什么时候开始真正起飞呢?接下来几年发生了一些其他的事情。

  • 2015年和2016年,一些库,如Keras、TensorFlow和PyTorch被发布。如果你实际看看深度学习真正受欢迎的时间,你会发现它与这些库的发布更加吻合,而不是我们认为的某些领域中的重要论文或事件。因此,我想提出一个有争议但可能并不那么有争议的说法:深度学习广泛应用的最大驱动因素是创建易于使用的自动微分库。当然,这有点太简单了。我们将在本课程中讨论的实际深度学习系统远远超出了自动微分的范畴。但是,这个核心技术,可以追溯到70年代,不是新技术,但是其广泛应用和之前的框架不同。因此,在PyTorch之前,有Torch,只是没有太多人使用,因为你必须学习一种叫做Lua的全新语言来在那里实现你的模型。Python库的可用性让你能够快速地原型化新的架构、新的模型。我认为这是深度学习兴起的最大驱动力。

    现在,你可能会从这张图中看到另一件事情:最近我们可能处于糟糕的领域,或者最近有些事情正在发生。我认为并不是这样,因为Google趋势中的最新数据通常存在问题。但更重要的是,我认为可能正在发生的是很多这些事情现在都落入了“人工智能”这一大伞下,而我将尽可能避免使用这个词,我会尽可能明确地讨论深度学习。但可能正在发生的是,人们正常常地使用“人工智能”这个词来谈论许多这些事情,而不总是使用“深度学习”这个词。

因此,另一种强调这个完全相同的观点的方式,我要引用Tianqi工作中的一个故事。


Tianqi在2012年时就开始研究深度学习,当时许多架构正在开发中。

事实上,他作为博士生的第一个项目之一,就是编写ConvNets代码,以加速它们在GPU上的开发,这正是AlexNet等模型正在开发的同时。

如果要在当时的ImageNet数据集上实现一个适用于图像分类的有效卷积架构,需要大约44000行代码和约6个月的编程时间。

我会稍后再强调这一点,Tianqi是一位非常优秀的编码人员,他编写一个工作的深度学习架构还需要这么长的时间。

而现在,如果你想要实现同样的功能,你可能只需要编写大约100行代码,几个小时即可完成。


我认为我们经常没有完全意识到快速迭代的能力是多么的重要,能够快速迭代是这些深度学习系统所赋予的重要因素之一。我们通常认为深度学习模型的训练和开发速度都很慢,尤其是大型模型。但是这是惊人的快速,这个快速迭代时间是由这些深度学习系统实现的。

但这仍然没有回答我所提出的问题,即为什么要学习这门课程?或许现在你同意深度学习系统很好用,为什么不直接使用呢?你可以使用PyTorch、TensorFlow和JAX等深度学习系统,那么为什么要学习这些系统的工作原理呢?

在这里,我认为有三个原因可以让你了解深度学习的人选择这门课程。


Three Reasons

第一个原因,也是最明显的原因,就是如果你想要构建深度学习系统,那么你必须要理解它们

虽然现在深度学习库的现状是TensorFlow和PyTorch已经成为了标准,但实际上情况并非如此简单。深度学习系统的领域非常流动,比如最近几年JAX的出现在深度学习研究中成为了主流框架之一,这是一个相对较新的事情。我认为我们还没有达到最终的深度学习系统状态,还有很多工作要做,比如开发新的系统,或者专门针对某些不同的深度学习领域或范式的系统。如果你想要开发自己的框架或者基于现有框架进行开发,而且现有的所有框架基本上都是开源的,所以你可以下载它们的源码并开始贡献,那么你就需要理解它们。如果你想要做这些事情,那么这门课程和一些练习就能为你做好准备。这也许是你想要学习本课程的最明显原因,如果你想要构建和贡献到这些库中。但这不是唯一的原因。


第二个理由是我认为对于实践者而言最为重要的一个。深度学习系统内部的工作原理,能让你更加高效和有效地使用它们

如果你想构建可扩展的模型、高效的模型、在GPU上充分利用的模型,你真的需要了解这些系统底层的工作原理。理解网络结构的高级描述如何转化为在硬件上真正执行、训练、差分和调整参数的东西。了解这些,将使你编写的代码更加高效、更加有效。如果你从事深度学习的研究工作,这一点尤其重要,特别是如果你正在开发新类型的层、新的网络结构、新的深度学习框架等等。如果你理解这些系统的逻辑和机制,将大大提高你的研究效率。我经常把理解深度学习系统比作一种超能力,即使你的研究目标并不是系统构建,它也能让你更高效地完成研究任务。这可能是大多数人应该学习这门课程的主要原因,但如果我不再加上一个原因,我会感到遗憾,那就是深度学习系统非常酷。


这些系统之所以如此有趣的原因非常简单。尽管这些库,如PyTorch和TensorFlow,似乎很复杂,它们已经有数百万行代码。但是,深度学习系统背后的核心算法实际上非常简单。实际上,每个深度学习架构背后的核心算法,以数学的角度来看,本质上都是基于自动微分和基于梯度的优化算法。从实现的角度来看,它们基本上是建立在高效的线性代数上,特别是GPU系统上高效的矩阵乘法上。因此,您可以在几乎没有代码的情况下编写一个合理的深度学习库,该库将在GPU上运行,并具有自动微分、卷积和循环网络、转换器等操作。

这些系统也有一点“神奇”,虽然我是以轻松的口吻说这句话的。在我开始深度学习之前,我在传统的机器学习领域接受过训练,当时我们手动计算所有梯度,手动推导出所有新模型的梯度是很费力的。我记得第一次构建自动微分库的时候,我意识到我可以从一些复杂的表达式中计算出梯度,然后形成一个更加复杂的表达式,并通过那个表达式计算所有东西,尽管我手动推导这些梯度可能会很困难。我可能可以做到,但我需要花费很长时间手动推导。这是非常酷的一件事。我认为每个在深度学习领域工作的人都应该有这种体验。

Last updated