河套 IT TALK 72:(原创)解读老黄与 Ilya 的炉边谈话系列之一——故事要从 AlexNet 说起(万字长文)
一个月前,就在GPT 4发布的第二天,同时也是英伟达(NVIDIA)线上大会的契机,英伟达的创始人兼CEO黄仁勋(”Jensen” Huang)与OpenAI的联合创始人兼首席科学家伊尔亚-苏茨克维(Ilya Sutskever )展开了一次信息量巨大的长达一个小时的“炉边谈话”(Fireside Chats)。期间谈到了从伊尔亚-苏茨克维早期介入神经网络、深度学习,基于压缩的无监督学习、强化学习、GPT的发展路径,以及对未来的展望。相信很多人都已经看过了这次谈话节目。我相信,因为其中掺杂的各种专业术语和未经展开的背景,使得无专业背景的同仁很难彻底消化理解他们谈话的内容。本系列尝试将他们完整的对话进行深度地解读,以便大家更好地理解ChatGPT到底给我们带来了什么样的变革。今天,就是这个系列的第一篇:故事要从AlexNet说起。
对话译文(01):
黄仁勋:Ilya,难以置信,今天居然是 GPT-4 发布后的第二天,很高兴在这里见到你,与你一起聊天。我们认识很久了,从我认识你以来,你做了很多开创性的工作,从多伦多大学就开始了。你与 Alex Krizhevsky 和 Jeff Hinton 共同发明了AlexNet,这带来了现代 AI 的大爆炸。你的职业生涯也把你带到了美国湾区,OpenAI 的创立,GPT-1、2、3。当然了,还有让 AI 风靡全球的 ChatGPT。这真是年轻计算机科学家的卓越履历,让整个业界都对你的成就由衷的敬佩。我们还是回到开始吧,让来问问你关于深度学习的一些问题。你对深度学习(Deep Learning)的认识是什么样的?为什么你知道它会发挥作用?你心中就一定认为深度学习会取得如此成就吗?
伊尔亚-苏茨克维:好吧,首先,非常感谢你的盛赞。是的,深度学习的强大能力确实改变了世界。我觉得我个人的出发点在于,我对 AI 感兴趣的原因有很多,出发点是对 AI 巨大影响力的直觉。同时,我也对究竟什么是意识充满了好奇,以及究竟什么是人类体验。我觉得 AI 的发展能帮我去理解这些问题。当我在2002 – 2003年刚开始的时候,学习(Learning)看起来是一件只有人类能做到的事情,计算机完全办不到。在2002 – 2003年,计算机还不会学习任何东西,甚至在理论上是否可行都不太清楚。所以我想,如果能在智能学习或者机器学习方面做出一些成果,将很有可能成为 AI 领域最大的进步。于是从那时候起,我开始在这个领域做一些探索。一开始还没有那么乐观,但幸运的是,Jeff Hinton 是我所在大学的一名教授,我找到了他。他的工作方向就是神经网络(Neural Networks),这就是我想要的。因为神经网络的特性就在于能够学习,能够自动为并行计算机编程。那个时候,并行计算机还很小。但是希望在于,如果你弄明白学习和神经网络的工作原理,你就可以通过数据为小型并行计算机编写程序。它与大脑的工作原理是相似的。所以,就好像有了几个理由可以支撑你继续走下去。虽然还不太清楚如何让它起作用,但基于已有的所有东西,似乎表明它的前景是最光明的。
黄仁勋:在你首次开始使用深度学习和神经网络时,网络的规模是多少?当时的计算规模是多少?
伊尔亚-苏茨克维:有意思的是,当时没有人意识到规模的重要性。人们训练的神经网络只有50个或者100个,几百个神经元已经是一个很大的神经网络了。100万的参数会被认为是很庞大的。我们一般在没有优化过的CPU 上跑我们的模型。因为我们都是研究者,我们不了解 BLAS(Basic Linear Algebra Subprograms)。我们使用优化过的 Matlab。我们会做一些实验,诸如用什么样的问题来提问比较好。我们试着去发现有趣的现象,有趣的观察结果。试试这个,试试那个,都是小的尝试。Jeff Hinton 当时对训练神经网络用于小数字感到很兴奋,还有分类任务。同时,他对于如何生成那些数字也很感兴趣。所以生成模型的源头,就从那里开始。但是问题在于,你做的那些很酷的东西都很零散,什么才能真正将它们串联起来?当时并不是很清晰。这就是关键问题。事实证明,也确实是这样。
黄仁勋:AlexNet 是在2012年。在2012年之前,你和 Alex Krizhevsky 为 AlexNet 工作了一段时间。你是在什么时候明确想要去构建面向计算机视觉的神经网络?
伊尔亚-苏茨克维:我先介绍一些背景,我记得大概是2010年,我意识到有监督学习是解决问题的关键。我可以准确地解释为什么是有监督学习。这不仅仅是一种直觉,我能够明确说出一个无可辩驳的论点。如果你的神经网络有足够的深度,并且足够大,那就可以用它去解决一项有难度的任务。关键词是“深(Deep)”和“大(Large)”。那个时候人们还没有去关注大型神经网络,人们可能正在研究神经网络的一点点深度。但是,大部分机器学习的领域根本没有去研究神经网络。他们正在研究各种贝叶斯模型(Bayesian Model)和核方法(Kernel Methods)。这些方法虽然有优雅的理论基础,但并不意味着就是一个好的解决方案,不管你怎么配置它们。但是大型深度神经网络却能在面对问题求解时,给出一个好的答案。为了找到一个好的解决方案,你需要一个合适的大数据集,以及大量的计算来完成这项工作。我们也做了一些高级的工作,在优化方面做了一些工作。很明显,优化是一个瓶颈。Jeff Hinton 实验室的另一位研究生 James Martens 取得了突破,他提出了一种与我们所做的不同的优化方法,他使用了一些二阶法(Second-order Method)。这件事的关键在于,它证明我们可以训练这些神经元。因为我们之前不知道是否可以训练它们。如果你能训练神经网络,你就把它变大一些,然后去找一些数据,这样你就能成功。所以接下来的问题是,去找什么样的数据?答案就是 ImageNet 数据集。在当时看来,ImageNet 是一个难度极高的数据集。但很明显,如果你要训练一个大型卷积神经网络(Convolutional Neural Networks),在这个数据集上它必须成功,假设你有足够的算力。
黄仁勋:正好在那个时候,你和我,我们开始同行。你是怎么发现能用GPU的?那时我们开发了几个版本的 CUDA GPU,我记得应该是 GTX 580。你发现 GPU 实际上对于训练你的神经网络模型是非常有帮助的。这个到底是怎么发生的?从什么时候开始的?你可以给我讲一讲吗?你之前从来没有给我讲过。
伊尔亚-苏茨克维:你知道 GPU 出现在我们多伦多的实验室,这个要感谢 Jeff,他说我们应该试试 GPU。我们开始尝试和试验它们,这个过程很有意思。但是我们也没有完全搞懂,它们真正的用途在哪里,你怎么样才能让它们发挥作用。不过接下来我们发现,随着 ImageNet 数据集的出现,卷积神经网络是非常适合 GPU 的模型。它有可能让训练变得非常快,因此就能做规模远超以前的训练。所以,就是这么发生的。
非常幸运的是 Alex Krizhevsky,真的很喜欢 GPU 编程。他可以给GPU编写程序,而且为卷积核(Convolution Kernels)编写程序的速度非常快。然后在 ImageNet数据集上,去训练神经网络,并且最终得到了结果。
黄仁勋:结果震惊了世界,它大幅打破了计算机视觉的纪录,这是非常明显的突破性进展。
伊尔亚-苏茨克维:对,我是想说它并不是之前方法的延续,它并不是像常规那样的打破纪录。我想换一种说法来表达,关键点在于这个数据集其实是很难的,它是超出正常范围的。其他人会用经典的方法取得一点进展,但是这件事取得的进展是如此之大。不仅如此,这个比赛在当时不是一个普通的比赛,它是非常困难的,是遥不可及的。如果你做得很好,那将是非常惊人的。
智愿君:老黄和Ilya第一段对话,信息量已经非常巨大了。让我一一解读其中牵扯的重要背景信息:
AlexNet
AlexNet 是Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton (简写为Jeff Hinton)于 2012 年在多伦多大学计算机科学系和加拿大高级研究所 (CIFAR) 开发的卷积神经网络(CNN)。2012 年 12 月在神经信息处理系统 (NIPS) 会议上发表了描述 AlexNet 的研究论文,标题为“ImageNet Classification with Deep Convolutional Neural Networks”。AlexNet 被认为是计算机视觉领域最有影响力的论文之一,催生了更多使用 CNN 和 GPU 加速深度学习的论文。根据谷歌学术搜索,截至 2023 年初,AlexNet 论文已被引用超过 120,000 次。
ImageNet
之所以AlexNet如此著名,还要感谢ImageNet,这是李飞飞在2006年发起的一个项目,后来推进了2010年后整个计算机视觉的发展。ImageNet项目是一个用于视觉目标识别软件研究的大型视觉数据库。该项目通过众包的方式邀请志愿者手动注释了1400多万张图像,并包含了2万多个典型的类别。从2010年开始,ImageNet项目每年举办一次软件竞赛,即ImageNet大规模视觉识别挑战赛(ILSVRC)。挑战赛使用1000个“整理”后的非重叠类,软件程序比赛正确分类和检测目标及场景。
2012年 9 月 30 日,AlexNet力拔头筹,获得了冠军,比亚军低了10.8%个百分点的错误率。为什么老黄开篇就提到这个,因为AlexNet的训练是通过英伟达的GPU来实现的。这也是老黄引以为傲的一点。这一纪录直到2015年才被微软的超过100层的卷积神经网络算法超越。
神经网络
人工神经网络(英语:Artificial Neural Network,ANN),简称神经网络(Neural Network,NN)。神经网络是一种模仿人类神经系统的计算模型,它由大量的人工神经元(或节点)组成,通过连接这些神经元来实现信息传递和处理。这些神经元通常按照层次结构排列,每层神经元对输入进行处理,并将其传递到下一层。通过多层神经元的组合,神经网络可以学习复杂的特征和模式,从而实现各种任务,例如图像和语音识别、自然语言处理和机器翻译等。
神经网络可以根据不同的结构和学习方式进行分类。按照结构分类,神经网络可以分为前馈网络、循环网络和卷积网络等。前馈网络是最基本的神经网络模型,它仅允许信息在网络中单向传输。循环网络允许信息在网络中进行循环传递,使得网络可以处理具有时序关系的数据,例如语音和文本。卷积网络则是专门用于处理图像和视频等空间数据的神经网络,它通过卷积操作来提取图像中的特征。
按照学习方式分类,神经网络可以分为监督学习、无监督学习和强化学习等。监督学习是指通过给定输入和输出数据来训练神经网络,使其能够从输入中学习到正确的输出。无监督学习则是指训练神经网络来自动发现数据中的结构和模式,例如聚类和降维等。强化学习则是一种通过试错来学习最优策略的学习方式,例如训练机器人在复杂环境下完成特定任务。
深度学习教父Jeff Hinton
Jeff Hinton是多伦多大学的认知心理学家和计算机科学家。也是Alex Krizhevsky和Ilya Sutskever的导师。
尽管Jeff Hinton早在1986年就发表过一篇用于训练多层神经网络的反向传播算法,并一直持之以恒地研究使用神经网络进行机器学习、记忆、感知和符号处理的方法。但真正让Jeff Hinton出名的,恰恰是2012年,和他学生一起搞出来的AlexNet。也正是在这之后,他和这两位学生成立了一家初创公司,叫DNN Research Inc.,2013年3月份,谷歌收购了这家初创公司。
2018年,他与Yoshua Bengio和Yann LeCun一起获得了 2018 年图灵奖,以表彰他们在深度学习方面的工作。这几个人也一直被称为“人工智能教父”和“深度学习教父”。
Alex Krizhevsky
Alex Krizhevsky(亚历克斯·克里热夫斯基)是AlexNet的核心代码贡献者。自从DNN Research Inc.被谷歌收购后,他一直给谷歌大脑工作到2017年,并对工作失去热情离开。Alex的高光时刻,目前仍定格在AlexNet。除了 AlexNet 之外,Krizhevsky 还为深度学习领域做出了其他重大贡献,例如 CUDA-ConvNet 的开发,这是一种基于 GPU 的卷积神经网络实现,大大加快了训练时间。他还发表了多篇深度学习和计算机视觉论文,并因其对该领域的贡献获得了多个奖项,包括 2019 年的 IEEE 神经网络先驱奖。尽管聚光灯目前都照在Ilya Sutskever身上,但我们应该记住Alex Krizhevsky。
深度学习
深度学习是一种基于人工神经网络的机器学习方法,它利用多层神经网络来学习输入数据的抽象特征表示,从而实现各种任务,例如图像和语音识别、自然语言处理和机器翻译等。
与传统的机器学习方法相比,深度学习的主要优势在于它可以自动学习数据中的复杂特征,而不需要手动进行特征工程。这是因为深度学习模型通常由多个层次的神经元组成,每层神经元可以学习到不同的特征表示,从而形成复杂的特征层次结构。
深度学习并没有明确的层数界定。一般来说,深度学习中的神经网络需要包含多个隐层才能被称为“深度神经网络”。但是,不同的领域和任务可能对“深度”有不同的定义。
在图像和语音识别等领域,通常将包含多个卷积层和全连接层的神经网络称为深度神经网络,其中卷积层用于提取图像或语音的特征,全连接层用于将这些特征映射到输出类别。这些神经网络通常包含几十甚至上百层,被认为是深度学习的代表模型。
在自然语言处理领域,由于文本数据的特殊性,通常将包含多个循环层的神经网络称为深度神经网络。这些循环层可以处理文本的时序信息,例如文本的上下文和语法结构。这些神经网络通常包含几十层,被认为是深度学习在自然语言处理领域的代表模型。
给大家一个更为直观的例子,OpenAI的GPT-3有96层。
有监督学习、无监督学习和强化学习的区别
首先,这三个都是机器学习的方法。有监督学习是人为先要打标签,人为先构建一个模型或者范式,然后让机器进行训练,然后等新的数据进来,就会按照这个范式进行照葫芦画瓢。在人类感知中,这个也被称为概念学习。无监督学习,就是人不再事先打标签,由机器自己来寻找规律,聚类,寻找隐秘的逻辑,然后构建范式,最后按照机器构建的范式,再有新的数据进来,照葫芦画瓢。强化学习,和前两者相比,应该是目的性更强,不求简单的照葫芦画瓢,而是要寻求最大化收益,也就是最优解。这个我们要给出明确的目标要求,再通过决策过程,激励系统,动态规划动作,目的是:赢。
举个例子,假设我们要训练一个模型来玩电子游戏“打砖块”,可以使用以下三种不同的学习方法:
有监督学习:我们可以准备一批包含输入状态和相应输出动作的训练数据,例如每个状态下应该向左移动还是向右移动,然后使用这些数据来训练一个分类器或回归器,以预测在给定状态下应该采取的正确动作。在这种情况下,我们已经提供了正确的输出标签,模型的目标是最小化预测输出与真实标签之间的差距,从而学习到输入状态和输出动作之间的映射关系。
无监督学习:我们可以让模型自己探索游戏环境,观察游戏中的状态和相应的反馈信号,例如得分和游戏结束。在这种情况下,我们没有提供正确的输出标签,模型的目标是通过自我组织学习来发现输入数据的内在结构和规律,例如学习到游戏中不同状态之间的相似性和差异性,以及如何通过不同的动作来获得更高的得分。
强化学习:我们可以让模型在游戏中进行交互,并根据得分和游戏结束等反馈信号来调整其行为。在这种情况下,模型需要通过试错学习来寻找最优策略,即在给定状态下采取最优动作的策略。模型可以使用基于价值函数的方法来评估不同状态和动作的好坏,从而选择最优的动作,并通过反馈信号来更新其价值函数和策略。
卷积神经网络
卷积神经网络(英语:Convolutional Neural Network,缩写:CNN)是一种前馈神经网络。Ilya和老黄聊到的AlexNet就是典型的卷积神经网络。
CNN中的“卷积”指的是卷积操作,这是一种数学运算。卷积操作是指将一个滤波器(也称为卷积核)应用于输入数据的像素值上,从而提取出图像中的特征。CNN中的卷积操作类似于人类视觉系统中的感受野机制,即人类视觉系统通过局部感知来分析图像,从而识别物体和场景。
具体来说,卷积操作将输入数据和卷积核进行逐元素相乘,然后将结果相加得到一个新的值。这个新值被放置在输出图像的对应位置上,从而生成一个新的图像,其中包含了输入图像中的局部特征。通过反复应用卷积操作,CNN可以逐渐提取出图像的更高级别的特征,例如边缘、纹理、形状和物体等。
CNN在图像处理和计算机视觉中得到了广泛应用,例如图像分类、目标检测、图像分割和人脸识别等。
CNN在许多计算机视觉任务中,如图像分类、目标检测和分割等方面表现出比贝叶斯模型和核方法更优的性能。主要由于以下几个原因:
- CNN可以学习分层表示:CNN被设计成以分层的方式从原始数据中学习越来越复杂的特征和模式。网络的较低层学习简单的特征,如边缘和角落,而较高层学习更抽象和复杂的特征,如形状和物体。这种分层学习使CNN能够捕捉图像的基本结构,并对未见过的数据进行很好的泛化。
- CNN是平移不变的:CNN被设计成平移不变的,意味着它们可以识别图像中的物体而不受其位置的影响。这是通过使用卷积滤波器实现的,它们可以滑动整个图像并提取特征,而不考虑它们的空间位置。这种属性使CNN非常适合目标检测和分割等任务。
- CNN可以进行端到端的训练:CNN可以使用反向传播进行端到端的训练,使整个网络可以针对特定任务进行优化,例如图像分类。这与贝叶斯模型和核方法不同,它们需要为模型的每个组件进行单独的培训和优化步骤。
- CNN可以处理大型数据集:CNN能够处理大型数据集,这对许多计算机视觉任务非常重要。这是因为CNN可以使用数据增强等技术在大量数据上进行训练,从而使网络能够很好地泛化到未见过的数据。
GPU
GPU是图形处理器(Graphics Processing Unit)的英文缩写。GPU也是NVIDIA公司在1999年8月发表NVIDIA GeForce 256(GeForce 256)绘图处理芯片时首先提出的概念。在此之前,电脑中处理影像输出的显示芯片,通常很少被视为是一个独立的运算单元。GPU的出现,减少对中央处理器(CPU)的依赖,并分担部分原本是由中央处理器所担当的工作,尤其是在进行三维绘图运算时,功效更加明显。GPU所采用的核心技术有硬件坐标转换与光源、立体环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等。
GPU不同于传统的CPU,专为通用计算而设计。具有数百或数千个内核,经过优化,可并行运行大量计算。虽然GPU在游戏中以3D渲染而闻名,但它们对运行分析、深度学习和机器学习算法尤其有用。GPU允许某些计算比传统CPU上运行相同的计算速度快10倍至100倍。
在老黄和Ilya的对话中,我们也看到,正是因为GPU的运用,才成就了AlexNet在ImageNet上的大放异彩。GPU 旨在处理大量并行计算,非常适合 CNN 所需的矩阵乘法和卷积。Alex Krizhevsky 和他的团队能够利用 GPU 的并行性将 AlexNet 的训练速度提高 10 倍,从而使他们能够试验更大的模型和更复杂的架构。AlexNet 是使用分布式计算框架进行训练的,该框架使用了两个 NVIDIA GTX 580 GPU。与以前依赖传统 CPU 的最先进方法相比,这使团队能够更快地训练网络并使用更多数据。这也为使用 GPU 进行训练和推理的深度学习和计算机视觉的后续发展铺平了道路。
BLAS
BLAS是基础线性代数程序集(Basic Linear Algebra Subprograms)的英文缩写。是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,在高性能计算领域,BLAS被广泛使用。尽管 BLAS 规范是通用的,但 BLAS 实现通常需要针对特定机器上的速度进行了优化,才能让其带来可观的性能优势。在对话中为什么聊到BLAS,因为英伟达的NVIDIA CUDA SDK就是在BLAS基础上开发的统一计算架构集成技术。
CUDA
CUDA是统一计算架构(Compute Unified Device Architecture)的英文缩写。是由英伟达NVIDIA所推出的一种集成技术。
透过这个技术,用户可利用NVIDIA的GPU进行图像处理之外的运算。目前,全系列的GeForce 显示核心都支持CUDA。CUDA 是一个软件层,可以直接访问 GPU 的虚拟指令集和并行计算元素,以执行计算内核。CUDA 旨在与C、C++和Fortran等编程语言一起使用。这种可访问性使并行编程专家更容易使用 GPU 资源,这与之前的Direct3D和OpenGL等 API 形成鲜明对比,后者需要高级图形编程技能。毕竟这是英伟达的主场,老黄刻意强化CUDA的好处,就不难理解了。
贝叶斯模型
贝叶斯统计是统计学领域的一种理论,基于托马斯·贝叶斯 (Thomas Bayes)在1763年对概率的解释。但该术语直到 1950 年代才普遍用于描述此类方法。许多贝叶斯方法需要大量的计算才能完成,随着功能强大的计算机和新算法的出现,贝叶斯方法在 21 世纪的统计学中得到了越来越多的使用。对待预测样本进行预测,贝叶斯方法过程简单速度快。对于多分类问题也同样很有效,复杂度也不会有大程度上升。但必须要基于在分布独立这个假设成立的情况下。遗憾的是现实状况下,几乎不存在分布独立的假设。所以贝叶斯模型在复杂的机器学习中往往玩不起来。
核方法
核方法是一类用于模式分析的机器学习算法。使用线性分类器来解决非线性问题。核方法可以使用核函数将数据映射到高维特征空间中,从而避免了维度灾难的影响。在高维空间中,样本之间的距离更加明显,模型的分类性能也更好。与其他复杂的机器学习方法相比,核方法更容易理解和解释。但是缺点同样也很明显:核方法需要计算核函数矩阵,这样的计算复杂度随着样本数量的增加而增加。这使得核方法在处理大规模数据集时变得非常缓慢,甚至不可行。核方法在特征空间中的维度很高,样本之间的距离会变得更加明显,从而可能导致过拟合问题。这一问题可以通过正则化等技术进行缓解,但这增加了模型的计算复杂度。在上述对话中,Ilya提到,在深度机器学习领域,贝叶斯模型(Bayesian Model)和核方法(Kernel Methods)算法虽然有优雅的理论基础,但是却无法和深度神经网络相媲美。
二阶法
二阶法,可以通过在训练过程中对网络的权重提供更准确和有效的更新来帮助训练卷积神经网络 (CNN) 中的人工神经元。
在传统的一阶优化方法中,例如随机梯度下降 (SGD),权重更新基于损失函数相对于权重的梯度。然而,这种方法可能很慢,并且可能不会在合理的时间内收敛到最优解。
二阶方法考虑了损失函数的曲率,可以为权重提供更准确和高效的更新。具体来说,这些方法使用 Hessian 矩阵或 Hessian 矩阵的近似值来更新权重。Hessian 矩阵表示损失函数关于权重的二阶偏导数,并提供有关损失函数曲率的信息。
通过使用 Hessian 矩阵,二阶方法可以提供更准确的权重更新,从而可以提高优化过程的收敛速度。这在 CNN 中特别有用,因为损失函数在权重之间可能具有复杂的非线性相互作用。
然而,二阶方法在计算上也可能很昂贵,因为它们需要 Hessian 矩阵的求逆或 Hessian 矩阵的近似值。因此,这些方法需要在GPU等适合的硬件设备上才能更好发挥作用。
Ilya在对话中提到,是Jeff Hinton 实验室的另一位研究生 James Martens 通过二阶法,帮助了他们。James Martens在Google的资助下,于2015年在多伦多大学博士毕业。目前是DeepMind的研究科学家。
好了,今天我们先解读到这里。下次,我们会继续针对黄仁勋与Ilya Sutskever的“炉边谈话”的其他部分进行解读,敬请期待。