“远见者”特斯拉 AI 主管 Karpathy|深度学习崛起十年
来源|The Robot Brains Podcast
翻译|刘畅
如果你在网络上学习过深度学习,大概率绕不过斯坦福大学的 CS231n,这个发端于 2012 年的课程,最初的主讲人正是特斯拉 AI 主管 Andrej Karpathy。
当时,新一轮深度学习正迎来高潮,正在斯坦福大学读博的 Karpathy 收到其导师李飞飞的邀请,计划新开一门深度学习课程,他对教学很感兴趣,更重要的是,他能够解释深度学习方法,希望能让很多人用它来解决计算机视觉问题,于是欣然应允。
在天时地利人和兼具的情况下,这门课成为斯坦福大学最受欢迎的课程之一,并且在网络上爆火,成为最早、最具权威的深度学习课程。这也让他名声大噪,成为一名深度学习和计算机视觉领域的“网红”,不止于此,他还成长为一名 AI 领域顶尖的远见者和领导者。
Karpathy 出生于斯洛伐克,15 岁时随家人搬到多伦多,2009 年在多伦多大学完成了计算机科学/物理学本科学位,在那里,他听到 Geoffrey Hinton 讲授深度学习,并对这门技术产生极大兴趣。
后来,他在不列颠哥伦比亚大学完成了硕士学位。2011 年,他进入斯坦福大学攻读博士学位,师从李飞飞,主要研究深度学习和图像识别与理解。2016 年 9 月,他加入 OpenAI 成为创始成员,并担任研究科学家,致力于计算机视觉,模型搭建与强化学习等技术的开发,OpenAI 最初也是由特斯拉 CEO 马斯克支持的人工智能非营利性机构。
在 Karpathy 与特斯拉团队的数次技术交流后,他受到马斯克的赏识,2017 年 6 月,马斯克将他招募到特斯拉担任人工智能总监,负责 Autopilot 项目,并向他直接汇报。五个月后,他率先提出“软件2.0”的概念,分析和推测了神经网络将如何深刻地改变开发生态,如今“软件 2.0”的思想已经被越来越多的事实验证。
他对 AI 的远见从何而来?又如何看待 AI 的当下和未来?在 Pieter Abbeel 主持的 The Robot Brains Podcast 节目中,Karpathy 分享了自己的成名之路,关于神经网络的看法,并解释了由新编程范式软件 2.0,介绍了在马斯克手下的工作体验以及特斯拉的自动驾驶之路。
在本次访谈中,他主要表达了这些观点:
神经网络实现了一个完全随机的函数,做完全随机的事情,基本上是从零开始的。你必须告知它在每种情况下该做什么,收集的情景越多,就必须告知它更多,以便它在所有情况下都能做正确的事情。
泛化性对于人工智能的运行极其重要,一切都与数据集的管理有关。如果你在业界做 AI 应用,尤其做图像识别,数据集会迭代很多次,算法设计和建模的优先级更低一点。我在工作中做的很多事情就是整理数据集,而不是编写算法,这是现在所有工程的内容。
我们拥有一支高度专业、训练有素的员工来管理数据集,这是正确的方向,因为这是一种新的软件编程范式,他们是软件 2.0 领域的新程序员,当他们标注样本时,会告知系统如何解释场景,这实际上是在对自动驾驶进行编程。
在新的编程范式中,必须围绕数据集管理开发全新的工具,监控神经网络的部署、迭代、微调,新范式编程的一切都是未知领域。
如果能训练一个更大的网络,效果会更好,结果会更神奇。
归根结底,你需要一个非常健壮的流程来进行真正的测试,并对它进行大量评估,也可能是对所有的单个组件进行评估,确保检测本身正常工作。
马斯克可以把一个非常复杂的系统简化为系统的基本原理和系统中最重要的组成部分,然后对这些进行陈述。
以下为完整对话内容,OneFlow 社区做了不改变原意的编译。
1
从斯洛伐克少年到特斯拉 AI 总监
Pieter Abbeel:你是如何从一个 15 岁的斯洛伐克少年成为特斯拉的人工智能总监的?
Andrej Karpathy:说来话长。15 岁时,我在斯洛伐克过的不快乐,那不是一个能施展宏图的地方,我一直想离开,去加拿大或者美国做一些实质性的事情,所以我父母决定移民加拿大,当时我几乎不会说英语,幸运的是,我数学很好,所以能够进入一所高中的好班级并读完高中,并进入多伦多大学计算机科学专业学习。
Pieter Abbeel:这是一个很长的故事,但其中一些部分非常有趣,比如在多伦多大学时,Geoffrey Hinton 是第一个向你展示神经网络的人。
Andrej Karpathy:在多伦多大学,通过 Hinton 的课,我第一次接触了深度学习。当时他给全班学生展示了一个非常简单的原始深度学习,并试图识别一些数字,这些今天来看都是小儿科问题。但他阐述这些算法的方式让我着迷,他一直把它与人类大脑做类比,就像神经网络印在他头脑中一样,一直用拟人化的描述来阐述算法发生了什么。也就是从那时起,我对深度学习产生了极大兴趣,之后也一直从事深度学习领域。
Pieter Abbeel:在斯坦福大学读博士期间,你产出了大量相关研究内容和教学内容,那也让你真正成为深度学习领域的名人,你是怎么做的?
Andrej Karpathy:我想你指的是 CS231n(面向视觉识别的卷积神经网络),基本上是我独自一人设计了该门课,然后和李飞飞成为主讲,这也是斯坦福大学的第一门深度学习课,而且非常成功。
我一直热衷于教学,甚至在不列颠哥伦比亚大学读研期间,成为不同班级的助教一直是我履历中的亮点,我喜欢看人们学习新技能,并做一些很酷的事情。
2012 年,卷积神经网络 Alexnet 面世,并在 ImageNet 基准上有着惊人表现,很多人突然开始关注深度学习。碰巧这是我了解的技术,再加上我对教学充满热情,飞飞找到我,讨论可以开一门深度学习的课程,来教大家这方面的知识。我喜欢这个想法并立刻接受了。
那一年,我只专注于课程和教学设计,把整个博士学位的研究都搁置了。作为一名博士生,你的主要产出是研究成果,这并不是你必须要做的事情。但我觉得,这可能比写一两篇论文更有影响力,我真的喜欢上这门课,并且在努力做好,结果也很令人惊喜。在第一学期课程时,大概有 150 名学生上课,到我离开时,大约有 700 名学生,这门课成了斯坦福大学听课人数最多的课程之一。这可能是我博士学位的一大亮点。
Pieter Abbeel:实际上,这门课还被放在了 Youtube 上,有数十万甚至数百万人观看了你的课程。
Andrej Karpathy:它的影响力确实比我当时预期的要大很多。很多人在不同地方告诉我很喜欢这个课程。我虽然已经听过很多类似的赞誉了,但那总是给我带来同样的快乐。对我来说这是一个非常好的投资,让我非常自豪。
Pieter Abbeel:深度学习课程源于 2012 年 ImageNet 上的突破,当时发生了什么?
Andrej Karpathy:正如我提到的,当我第一次在 Hinton 的课堂上学习深度学习时,我们处理的是 28x28 的低分辨率图像。当我进入斯坦福大学的计算机视觉专业,主要处理更大、更高分辨率图像的领域,但当时没有人在计算机视觉中使用深度学习,传统观点是,人们认为这些方法无法扩展到高分辨率图像。
当时,Hinton 和他的学生 Alex Krizhevsky 和 Ilya Sutskever 发表了一篇关于 AlexNet 的论文,展示了神经网络的一个扩展版本,它不仅仅是一个有几千个神经元的小型网络,实际上是一个有几十万个神经元,连接着几百万个神经元和突触的更大的网络,它运行在 GPU 上。与当时的计算机视觉方法相比有非常好的性能,直接把这一领域颠覆了。
今天,研究者们不会想在没有深度学习的情况下做计算机视觉。所以,我凑巧处在正确的时间、正确的地点,对教学感兴趣,并且能够解释这些方法,希望能让很多人使用这种强大的技术来解决计算机视觉问题。
Pieter Abbeel:后来是什么时候决定加入特斯拉的?
Andrej Karpathy:从硕士时期算起,我差不多做了大约十年的研究,读写论文,训练神经网络,我觉得这些算法非常强大,可以解决一些极其重要的社会问题,我有点不满足于现状。想在这方面发挥更积极的作用。想到这些我更坐立不安,开始寻找不同机会,包括去创业公司工作。
在斯坦福大学获得博士学位后,我成为一名 OpenAI 的创始成员和研究科学家,我在那里工作了将近两年。OpenAI 当时是在马斯克等人的组织下运作,我们也和特斯拉的工作人进行了几次交流,我也询问了一些关于自动驾驶的问题,意识到他们基本上是用深度学习解决计算机视觉问题。
我对此很感兴趣,很想把技术应用到这个行业,马斯克就问我,“嘿,你就像特斯拉团队的顾问,想加入并领导计算机视觉团队吗?”他在我感到不安的时候伸出了手,我觉得很完美,我想我有能力在这里做出贡献,我喜欢这家公司,爱马斯克和他所做的一切。
这是上天再次眷顾我的时刻。我强烈地感觉到,那时所做的决定是正确的。所以,我离开了 OpenAI,在过去的四年里我一直在特斯拉工作。
Pieter Abbeel:我记得你要离开 OpenAI 的那一刻,一群人在谈论你的计划,你半开玩笑半认真地说,这是一份平均只有六个月时长的新工作,你想花点时间再让别人接手。而你现在几乎在特斯拉工作了四年时间,非常惊人。
Andrej Karpathy:没错,我知道特斯拉员工的平均工作任期,尤其是当你在马斯克旁从事非常重要的项目时就很清楚这一点,不过,我在特斯拉待了四年后仍然在这里。
Pieter Abbeel:与马斯克一起工作是什么体验?
Andrej Karpathy:我真的很喜欢和他一起工作,他在很多方面都让人感觉非常不可思议。我一直在试着勾画出他的超能力,他有着极其发达的直觉,在很多方面都做出了正确判断,有时候在我看来缺乏足够的信息,但他在没有完全了解所有事情细节的情况下,做出了难以置信的极好的判断。我现在还没有完全理解这一切是怎么发生的。
他有一种方法,可以把一个非常复杂的系统简化为系统的基本原理和系统中最重要的组成部分,然后对这些进行陈述。这是一种非常不同的有点迷人的思维方式。例如,有时,我会被某个系统搞得不知所措,需要全面了解该系统的细节才能做出正确决定,但他不是这样的,他有办法将系统提炼成一个更简单运行的系统。
当然,与他一起工作是一把双刃剑。如果他昨天就想要看到未来,就会推动别人去做,也会注入很多动力。他希望这件事尽快发生,而你也需要有某种态度,在很长一段时间内真正容忍这种情况。他有一种向系统注入动力的方法来驱动工作,他身边的人都能从中获得动力,他们也希望未来能更快发生。
这些人在特斯拉非常努力,我也想成为这样的人。事实上,我也很有动力,喜欢沉浸其中的能量,去更快地创造不同,产生影响。
Pieter Abbeel:你有没有像马斯克那样不得不睡在特斯拉总部的长凳或沙发上?
Andrej Karpathy:是的,我睡过几次。即使我住在公司附近,但肯定会发生一些突发状况。我在办公室里试图找到一个好地方,然后找到了一个小健身室,里面有几张瑜伽垫,所以就在那里睡了。我睡得很好,早上就可以马上恢复工作,这实际上是一次非常愉快的经历。
当你投入到一个非常沉迷的问题上,你不想做任何其他事。我喜欢有时被问题压倒,当你非常投入并且真的希望解决它时,睡眠阻碍着你,你只需要克服它,这样就可以重新投入其中。这样的事不会经常发生,但当它发生时,我真的很喜欢它。我喜欢解决问题的过程,我认为这对心灵是有好处的。
2
自动驾驶工程的重点是数据集管理
Pieter Abbeel:当人们谈到自动驾驶汽车,这可能是最直观实际的人工智能概念,但并不是每个人都真正意识到无人驾驶汽车和人工智能是如何联系在一起的,你能介绍下背景吗?
Andrej Karpathy:有些事情很容易想象,但很难实现,比如无人驾驶汽车。有些事情不是这样的,例如,比特币中的加密货币是很难想出的。所以,你不会看到可能会出现在很多科幻小说中的事物。但是无人驾驶汽车是人们梦寐以求的东西,也是人们长期努力的目标。
从根本上说,让它变得困难的是,你必须处理现实世界中的各种可变性(variability)情况,这对于当今的人工智能和技术来说,也是一样的,难度与你在应用程序中遇到的可变性成正比。所以,需要处理的场景越多,就越难应对,这也使得汽车很难做到自动驾驶,其中存在很多变量,在高速公路上,你只需要处理车道线,但你一旦从公路驶入旧金山的城市街道等等,能遇到很多情况,要设计它是非常困难的。这也是我们研究自动驾驶的动力所在。
Pieter Abbeel:为什么这种可变性让它变得困难?
Andrej Karpathy:就像我提到的,你创建的这些深度学习系统,给它们一些规范,让它们知道在不同环境中,不同的情况下应该如何表现。网络是从零开始的,它不像人脑,出生在一个三维的物理现实中,你可以理解很多物体,你拥有所有这些内置的“硬件”,而且还有非常强大的学习算法,所以你可以理解物体,以及这个世界是如何运转的。
神经网络是由像大脑一样的神经元组成的,但这不是一个完全正确的类比,这再次误解了这些神经网络。最好将其视为一个数学函数,它包含了大量的自由参数,必须设置 6000 万个参数才能获得正确的输出,而在一开始,这些参数的设置是完全随机的。因此,神经网络实现了一个完全随机的函数,它在做完全随机的事情,基本上是从零开始的。你必须告知它在每种情况下该做什么,收集的情景越多,就必须告知它更多,以便它在所有情况下都能做正确的事情。
Pieter Abbeel:所以,当处理所有这些可变性时,你希望神经网络将其内在化?解决办法是什么?
Andrej Karpathy:看起来现在几乎是通过蛮力的方式来实现的。如果我想让神经网络在数百万种情况下运行,我需要输入数百万个样本或者类似的东西。所以,神经网络确实显示出某种能力,它可以在给定的样例间进行插值。
神经网络不擅长推理,但只要你覆盖了所有的可能性,告诉神经网络在这些不同的场景中该做什么,他们就有能力在样本之间进行插值,但这是有限的,如果你真的有大量的可变性,且希望系统能很好地运行。你必须在很大程度上覆盖整个空间。
Pieter Abbeel:那么,如何获得覆盖该空间的数据?
Andrej Karpathy:正如我在新的编程范例中提到的,设计神经网络和神经元有一点难度,大量的工作是在管理数据集。基本上,从一些数据集开始训练神经网络,然后测试它的性能,看看它在哪里起作用,在哪里不起作用。
从根本上说,神经网络上迭代的方式是,你需要找到很多样本,而这些样本中,它没有做你想做的事情。你需要了解这些情况,并在所有这类情况下,正确地标注应该发生的事情。然后,你需要把它们并入神经网络的训练集中,所以现在的神经网络既在之前的数据集上训练,也在失败的数据集上训练,但现在有了正确的标签,就再次提升了性能。然后,你必须再次看看它现在失败的地方,越快地处理和管理数据集,神经网络就会变得越好。
幸运的是,我们所拥有的这些深度神经网络的提升与数据强相关,如果你有足够的计算和足够大的数据集,那么网络性能就没有真正的上界,它会找到正确的解决方式来适应标签。因此,大部分工程都是在数据集的管理上,特别是神经网络还没有很好地适应数据。
Pieter Abbeel:意思是当我开特斯拉的时候,就是在获取这些样本吗?
Andrej Karpathy:没错,这是个很好的问题。我在工作中做的很多事情就是整理这些数据集,正如我提到的,这就是现在所有工程的内容,不是编写算法,而是收集数据集。关于驾驶场景我们有很多想知道的事,想知道路线、边缘、红绿灯在哪里,其他车辆在哪里,如果左转是否有东西挡着,车门是否打开。大致来说,大概有 30 个高级任务,但其中很多任务都有很多子任务,比如对于一辆车,你可能想知道很多属性,它是什么类型的车?车门开着吗?因此,神经网络必须对真实世界做出大量预测,现在这些神经网络应用在汽车上,它们正在运行并做出预测。
然后,我们必须想出很多方法来找出不准确的来源。有很多方法可以做到这一点,一个非常简单的例子是,你对自动驾驶进行了干预,因为自动驾驶没有做正确的事情,你会大量介入与神经网络错误预测有关的情况。
所以,人为干预是一个触发点,我们可以收集一些图像,然后看这些预测是否正确,来帮助我们进行分类,这个例子应该在什么样的数据集中,应该用什么样的标签,这就是我们在系统上迭代的方式。
但有许多触发点在任何时间点都处于活动状态。再举个例子,如果你检测到一个停车标志或类似的东西,计算机就会把边界框放在停车标志周围,如果停车标志检测开始闪烁,那么就是真的有。随着时间的推移,你与神经网络的预测出现分歧,这也是一个非常好的数据来源,我们有很多不同方法来收集神经网络预测错误的样本。对我们来说,这是一个如何快速将这些样本输入到训练集中的练习,这是团队正在做的很大一部分工作内容。
Pieter Abbeel:想用所有数据来训练自动驾驶,把所有的数据喂给新的神经网络并训练它,需要多大的计算量?训练自动驾驶需要花多长时间?
Andrej Karpathy:从数百万张图像和一个典型的神经网络开始训练,这非常昂贵。通常你会在行业中看到的是,大多数神经网络训练大约需要两到三周的时间,这个周期更像是心理作用,因为这是一个人愿意等待网络优化并衡量其性能的时间。
但神经网络必须看很多样本,必须做出大量预测,必须根据他们在训练循环中做出的预测进行修正,这需要很长时间。随着可用计算量的增加,你可以使用更大的网络,那几乎总是更有效,但它需要更多的训练时间。
顺便说一句,我们不再像过去在计算机视觉中那样受制于人类的创造力和算法,因为我们有一类稳定的操作方法,然后人类的创造力就成为了限制,但现在的限制在于数据集的大小和可用的计算量。算法现在都是已知的,我们只需要大规模运行它们,只需扩大网络规模,创建更大的网络和数据集,就能获得更好的性能,这是美妙之处,因为你有一个可以取得进步的模板,只是被集群规模这样非常具体的东西所限制,但这可以改善。
Pieter Abbeel:看起来你在数据集上花了很多时间,而在改变算法上花的时间却少得多。
Andrej Karpathy:如果说算法完全被理解和了解了是不公平的,不同领域有不同的可用技术成熟度,我们只是在算法上大概花了 25%的时间。
我通常指出并强调这一点的唯一原因是,通常来自学术界的人都有一个期望,当你使用神经网络时,数据集是固定的,因为你有一些想去提高的基准,你的任务是迭代算法,然后设计和构建神经网络,去提升指标。当你在业界,尤其做图像识别的话,数据集会迭代很多次,我认为算法设计和建模的优先级低一些。当然,每个领域的情况也不尽相同。
3
数据标注、“操作假期”和算力限制
Pieter Abbeel:通常来说,当人们想到神经网络时,至少在早期很难理解它在做什么。把神经网络作为自动驾驶决策系统的一部分,一旦出错,这是一件非常危险的事情。那如何建立对该系统的信心?你们是如何决定是否愿意尝试?
Andrej Karpathy:也许直接设计的代码控制了很多堆栈,但它可以提供对整个系统的全面理解,因为最终这可能是数十万行代码。你可以分析单个函数,但这是一个非常复杂的动力学系统,我认为,你可能会有一个错误的印象认为你已经理解了这个系统,尽管你理解的是单个组件。
归根结底,你需要一个非常健壮的流程来进行真正的测试,并对它进行大量评估,可能是对所有的单个组件进行评估,确保检测本身正常工作。神经网络的部分单独进行,但也要进行端到端的集成测试,无论是否由神经网络负责都要这样做,要对它进行大量的模拟,以确保它按预期工作,并进行驾驶来实现。
因此,我们有一个大型的质量保障团队来驾驶汽车,并验证一切是否正常,我们有很多机制来测试这些系统。
另一个对我们来说很重要的是影子模式(Shadow Mode)的发布,你可以部署功能,但它没有连接到控制。它只是在那里默默观察和预测,然后我们在没有实际驾驶汽车的情况下测试。在某些情况下,你也可以这样做。
Pieter Abbeel:在这些评估中,你是否经历了一些感到非常惊讶的事情,比如“哇,这辆车比我想象的要聪明”。
Andrej Karpathy:基本上每次都是在最新的驾驶测试版中经历过,有时只是它处理不同情况的紧急特性,比如有一个骑自行车的人迎面而来,如果你对它进行了正确的编程且正常工作,你会得到这些做了正确反应的紧急行为。
Pieter Abbeel:那一定很刺激。我想象得到你仍然把手放在方向盘上,用脚踩着刹车踏板,以防万一。
Andrej Karpathy:是的,我每天开着的是当前的全自动驾驶系统测试版。它实际上非常有能力,我想人们应该理解自动驾驶在高速公路上可以运行得很好,很多人都使用它,它可以在公路上保持在一条车道行进,在全自动驾驶系统中的最新版本,即使是在城市街道的公路上,也相当有竞争力,这是零干预的驾驶。对我们来说,这是一个相对常规的过程,虽然它不是一个完美的系统,但真的正在实现它。但我肯定还是会把手放在方向盘上,因为汽车仍然偶尔会做一些不太聪明的事情,所以我们肯定还有更多的工作要做。
Pieter Abbeel:当然,在某种意义上,只要它犯了错误,就很有价值。假设这个人正确地接管了车,这会为你提供最有价值的数据,帮助你找到训练集中缺失的部分。
Andrej Karpathy:没错。因此,干预措施对我们来说是非常有用的数据来源。正如我所提到的,我们还可以通过很多其他方式获取数据,例如,在网络不正常的地方,与司机之间存在很多分歧时。
Pieter Abbeel:我听说还有“操作假期(Operation Vacation,免干预处理)”功能,听起来很有趣。
Andrej Karpathy:在所有这些预测的迭代过程中,我们注意到越来越多的组件可以自动化。所以,在我描述这个过程时,你的神经网络做出预测,需要在一定范围内找出预测失误,并正确地标注它们,然后将它们放入训练集中,并重新训练网络。这就是个循环。
我们注意到,通过大量的自动化,你可以让工程师越来越少地参与到这个循环中,也并不是所有的工程师最终都能在我们把整个过程自动化后去“度假”。有一个庞大的数据标注团队必须坚守岗位,监控你的触发器,并对数据进行标注。但是,编写代码的实际软件工程师原则上可以休假,因为他们已经自动化了这个循环的所有部分。
半开玩笑地说,一旦这些神经网络自身变得更好,中间有许多人都去度假,而自动驾驶原则上可以自动提升。
Pieter Abbeel:你是否担心你们会让自己余生都在度假?
Andrej Karpathy:也许能度假一段时间,我不确定。
Pieter Abbeel:回看整个过程,你花了所有的时间在数据标注上,而数据标注结果产生了非常多的价值,这是一些学术界的人永远不会注意的事情。 但“免干预处理”听起来正是这样,那些仍在工作的人就是那些正在处理数据的人,其他人可能都在海滩度假。
Andrej Karpathy:是的,这是半开玩笑的说法。事实上,正如我所描述的系统,仍然有大量的设计和工程可以深入到基本原理中。举个例子,系统现在做出了所有这些中间预测,而且在它上面还有很多人编写代码。这种人工编写的代码很难编写,而且很脆弱,如果你真的想要 99.99%的准确度和舒适度,它根本无法扩展到我们需要的地方。
所以我认为,在建模方面,还有一些挑战。最基本的是,如果你只是谈论感知系统本身,我认为它的提升是可以在原始检测本身上去自动改进。但是,正如你提到的,作为一名深度学习工程师,你可能不会去做数据标注,而我们在这上面花了很多时间。
实际上,我在特斯拉内部建立了一个完整的数据标注组织,这是我们工作的基础。一种典型的方法是将其外包给第三方,但我们不这么做。我们拥有一支高度专业、训练有素的员工来管理数据集,我们认为这是正确的方向,因为这只是一种新的软件编程范式,那是软件 2.0 领域的新程序员,当他们标注样本时,他们会“告知”系统如何解释场景,实际上是在对自动驾驶进行编程。所以我们在该团队上投入了相当多的资金,让他们与工程师密切合作。
Pieter Abbeel:说到数据标注,我马上想到自监督学习,在过去的两三年里,它在人工智能方面取得了很多进展,包括在计算机视觉和自然语言处理。你怎么看自我监督学习的作用?
Andrej Karpathy:现在技术的问题是,我可以在这一点上得到几乎任意的推论,那需要做一些数据工作来填补数据集,然后使用神经网络技术。 但有很多你想识别的东西,重复做这项工作让你感觉会很傻,比如对人来说,给他们看一个消防栓,他们马上就明白那是路边的黄色东西,但 AI 可能需要包含所有可能的旋转和亮度条件的消防栓的图片数据才行,它需要一个非常全的消防栓形态。
现在,很多人正在试图找到不需要如此大量标注数据的方法,也许只需要很少的消防栓例子,就能让神经网络能像人脑一样识别消防栓,使用这个数据集时也会变得更加高效。
自监督学习的意义在于,如何使用大量不需要经过人工标注过的样本来训练。也就是有大量的数据,其中一些数据中有数百个特征。除了人类标注的目标之外,也许还有其他目标可以用来预训练这些网络,因此可以利用这些表征。人们试图通过多种方式来使用它,其中似乎工作的相对较好的例子是,你可以尝试预测未来。
所以并不是说我们不使用标记数据,而是我们使用的是免费标注数据,因为当你拥有一个世界上正发生事情的视频时,你已经能预测一半的未来,它在数据流中免费出现。所以你在训练一个网络来预测某种东西时,就像正常的监督学习一样,但碰巧它是免费的。
因此,自监督学习是一类试图利用数据自身结构的方法,并试图利用我们在原始数据流中的免费“监督”,而不是让神经网络自己定义它理解的世界,因此每个标签都可以更有效地训练其他内容。
消防栓可能不是最好的例子,但是,作为一个预测未来的例子,如果你想真正了解整个场景的结构,以及人和汽车如何移动和互动,这个预测问题迫使神经网络来理解“嘿,这儿有汽车,他们正在四处走动。那里有人,他们正在走动来避开这些区域。”所以当我需要预测未来时,我需要实际解析场景以正确地做到这一点。
我确实发现在这些非常有价值的应用程序中,为数据标注买单通常是一种正确的方法,而不是付费给研究人员。但我基本同意,这还并不够理想。正如你所提到的,有些技术受到了很大的关注,我们已经在特斯拉内部对其中一些进行了尝试。
Pieter Abbeel:一旦采用自监督方法,你就可以使用无限的数据,因为所有的数据都是有效的,对吗?
Andrej Karpathy:但你必须注意,并不是数据越多越好。如果你把无聊的数据添加到数据集中,实际上可能在稀释你的数据集。因为你的神经网络会像我提到的那样,即使训练三周,如果很多样本都很无用的话,它也不会学到很多东西。
所以你实际上需要非常小心,这就是为什么我要谈论数据集的整理。这是一个经常添加困难样本和减少简单样本的过程,这是一个非常简单的方法。当然,如果我的海量数据集中只有一张图像,那是没有帮助的,所以你真的想消除可变性,这就是为什么我在谈论数据集时使用像监管(curation)这样主动的(active)术语。管理数据集是一个主动的过程。
Pieter Abbeel:特斯拉还宣布为人工智能计算制造芯片,这意味着什么?
Andrej Karpathy:我觉得,很大程度上,马斯克认为人工智能只是一个基础,就像许多这项技术的其它支柱,他想投资开发了这项技术和可以协同设计一切的内部团队。
特斯拉肯定是在进行垂直整合,并从中榨取大量利润,因此在很大程度上,我们在工厂拥有整个汽车制造产业。然后,我们拥有很多硬件、集群、数据标注团队,还拥有推理硬件,在汽车上实际运行神经网络的芯片。
对我们来说,这只是另一个为自动驾驶目的协同设计一切的机会。因此,芯片的设计考虑了我们想要运行的神经网络,而硬件本身只瞄准我们需要它高效运行的操作。所以,这只是特斯拉的一个方向,它允许我们协同设计组件,协同实现完全自动驾驶的目标。
Pieter Abbeel:更强的计算能力是人工智能成功的唯一途径吗?
Andrej Karpathy:在很多领域,我认为更强的计算力是根本限制之一。OpenAI 现在专注于自然语言处理,比如他们最近在 GPT 上的工作,神经网络采用 Transformer 的形式,在一种非常标准的状态下训练它,算法不是它们的瓶颈,数据集也不是这类问题的瓶颈,因为互联网上有大量文本。
在这种情况下,算力的限制影响了实际使用的模型大小。我们有幸拥有可以运行得越来越好的算法,只要让它们变得更大,就能工作得更好。所以 OpenAI 主要是由算力控制的,如果他们能训练一个更大的网络,效果会更好,结果会更神奇。
Pieter Abbeel:特斯拉也是这样吗?
Andrej Karpathy:是的,我会这么说。神经网络一般都具有这种特性。在极限范围内,你可以使用模型集成,可以使用 dropout 和其他技术,确保在扩大这些模型时工作得更好。我们在很大程度上也受到算力的限制,必须非常有创造性地榨干汽车上所有的算力。
4
软件 2.0:基于神经网络的新编程范式
Pieter Abbeel:你不久前创造了术语“软件 2.0”,那将会是一番怎样的局面?
Andrej Karpathy:我几年前发表的一篇博客介绍过软件2.0,我们有很多软件在推动社会的大部分和信息空间的自动化等等,现在很多软件都是由人编写,算法原则上是由人以某种可被理解和编排的方式开发。
在我看来,随着深度学习的进步,你可以把神经网络想象成一个软件,但这个软件不是由人写的,这个软件是由一个优化程序写的,这有点像一种新的编程范式。我们不直接编写算法,而是对数据集进行编程,而算法实际上是训练过程或编译的结果,这与传统软件差不多,所以,你可以把源代码编译成二进制代码,这里的源代码是数据集,编译是训练神经网络,二进制是最终的神经网络权重。
对我来说,现在社会上正在发生的事情是,首先很多以前无法编写的软件现在可以编写了,比如图像识别系统,但也有很多系统很多软件过去是按照指令编写的,软件 1.0 的风格,现在可以移植到软件 2.0 这种更强大的范式下,编程方式看起来有点不同。
我写这篇文章的原因是对洛杉矶所有工程师的一个小小的号召:我们已经在软件 1.0 模式下编程四五十年了,有大量的基础设施来帮助我们在这个模式下编程,有 IDE 来帮你编写代码,它能指出错误,能做语法高亮显示。但这种新的编程范式中,情况还不是这样,我们必须围绕数据集管理开发全新的工具,监控这些神经网络的部署、迭代、微调,新范式编程的一切都是未知领域。目前我们迭代这些数据集的工具还非常原始,可以改进很多。
这篇文章实际上是要指出,这不仅是机器学习中的某种分类器,实际上还是对我们编写软件方式的一次重组,我们必须认真对待,借鉴在软件 1.0 基础设施上所做的很多工作,来帮助我们编程。我们必须将对应的工作移植到神经网络中,因为许多软件将开始看起来像神经网络中的权重。但它不会是 Python 之类的东西。
Pieter Abbeel:当你谈到神经网络会成为自动驾驶汽车上有效的程序时,它只是一个用大量数据训练过的神经网络,还是仍然有其他内容?
Andrej Karpathy:这是个很好的问题。在自动驾驶中,图像的像素能从根本上告诉我们外面的世界是什么样,然后神经网络再进行目标识别,但你还不能直接驾驶。你必须写下一些逻辑,关于如何进行这些中间的某种预测和决策,比如想要避开行人,在停车标志处停车。因此,在神经网络上仍然有很多软件 1.0 代码,这些代码基本上是对预测做出反应的,比如加减速、转动车轮等等。
自从我四年前加入特斯拉团队以来,我认为我们一直在将软件 1.0 的很多功能移植到神经网络中。最初,神经网络只会对一幅图像进行预测,比如它会告诉你,这有一段道路边缘,但我们实际上可能有八幅图像,它们来自车辆周围的八个不同摄像头。因此,每幅图像都能独立预测道路边缘和弯道,但上面需要有某种东西将其拼接成车辆周围发生的三维鸟瞰图。
这一切都是在人类开发的软件中完成的,你从摄像头获取道路边缘,从所有的摄像机中提取并把它们投影出来,把边界连起来。随着时间的推移,你也需要把它们连起来并进行跟踪。所有这些都是由人编写。
从那时起,我们所做的是用神经网络“吞噬”工程的很多部分。现在汽车上的神经网络不会对每张图像进行预测,他们将直接从鸟瞰的角度进行预测,从中“看到”汽车旁边的道路边缘等等。
因此,软件 1.0 的代码片段被神经网络替代,它在堆栈中承担着越来越多的责任。也许在某一天,这一切都可能只是一个神经网络,也许人工编写代码的空间很小。这说起来容易,做起来难,但这就是我对这种转变的最终结论,也是我想说的终极梦想:很少有软件由人来编写,只是用一个神经网络就完成了整个过程。
Pieter Abbeel:你怎么看人工智能未来的发展?
Andrej Karpathy:我认为,当你把注意力集中到日常工作和每周发表的不同论文上时,进展会非常快。但当你拉长时间维度来看,也许有时候会感觉有点慢。真正开始深度学习革命是在 2012 年的 AlexNet,到现在差不多是十年,人工智能已经发生了彻底的转变。
我还想活四十年。所以,如果要在未来四个十年里见证几个这样数量级的事情,想想都令人难以置信。从根本上说,我们有了这些算法,它们似乎是受数据和计算力的限制,但我们将获得更多的计算力,将把所有硬件专门用于神经网络,这些都在进行中。
我们目前的处理器实际上并不是专门用来运行神经网络的,已经有了很多长期的成果。这个领域的规模正在逐步扩大,会有更多的人力用于提升这一切。在硬件和软件上的所有投资都有指数级的回报,所以你应该期望某种指数级的提升,这让它变得更加令人难以置信。
我认为,在短期内绝对会看到更多的自动化,像自动驾驶汽车或无人机等等,这很容易可以预见。但从长远来看,这就是它开始变得更加危险的地方。我曾经加入 OpenAI,那基本上是要做通用人工智能,从根本上开发一个像人类一样有思考、需求、行动和功能的大脑,我们当然没有完全理解整个大脑如何完成决策。但我们可能会在未来十年或两三年内会看到一些关于人工智能的非常令人兴奋的事情,这项技术在任何方面都没有真正的上限,这有点令人担忧,但也有点令人兴奋。所以,我们看看会发生什么。
5
马斯克与特斯拉的愿景
Pieter Abbeel:特斯拉并不是唯一一家试图制造自动驾驶汽车的公司,至少在媒体上,这个行业被描绘成一场竞赛,在你看来,特斯拉的努力与其他厂商的努力有何不同?
Andrej Karpathy:这是一个非常好的问题,尤其对于旁观者而言,它们之间非常不同但又并不明显。不过,在引擎盖下的系统非常不同。在业内,我们将看到两个路径,一个类似 Waymo 的,另一个是类似 Tesla 的。
我猜,在 Waymo 式的路径中,你将首先为汽车配备更多传感器,特别是使用非常昂贵的顶部激光雷达传感器,它们可以让你对周围进行距离感测,你也有高清地图。这与特斯拉汽车所做的非常不同,首先,我们没有非常昂贵的传感器,只有几个摄像头可以提供环绕视野,让你从相机中获得大量信息,成本非常低。我们不使用高清地图,但有低清晰度的地图,但在厘米级精确度上,我们知道弯道在哪里,一切都要靠当时的视觉系统,这在设计上要困难得多,但它也更便宜,因为传感器套件只有摄像头,不需要预先绘制地图中指定的位置,而且可以在任何地方都有效运作。这让你可以能适应更多环境,所以 Waymo 可能有几百辆类似的汽车,但我们有数百万辆。
正如我所提到的,泛化性对于人工智能的运行极其重要,因为一切都与数据集的管理有关。我想象不到在没有泛化的情况下,如何从根本上让一个系统正常工作,所以我宁愿放弃一些感知信息,以换取人工智能的使用范围。
Pieter Abbeel:当你决定去特斯拉的时候,你一定看到了这种技术分歧,当时你有思考过未来自动驾驶技术路线的事情吗?
Andrej Karpathy:我确实看到了分歧,但我觉得特斯拉从根本上采取了正确的方法。我非常相信深度神经网络及其力量,并且认为图像提供了大量信息,问题在于如何处理这些信息。我所知道的这些深度神经网络能够完成我们需要的功能。
对我来说,这实际上是马斯克的一个绝妙的战略决策, 而且我完全赞成仅使用视觉方法,并且我确实相信可以使用该系统来处理所有这些信息并进行实际行驶。
Pieter Abbeel:特斯拉的使命宣言是关于向可再生能源的过渡,第一眼看过去,它似乎与自动驾驶没有直接联系,而是向可再生能源过渡到一部分。你能说说自动驾驶和可再生能源是如何结合在一起的?
Andrej Karpathy:这是个好问题。马斯克有很多公司,下了很多赌注,但都是围绕着让未来变得美好,增加未来变得美好可能性的更高层次的目标,当然,也有很多其他方面的愿景。
他聚焦于特斯拉的使命,从根本上加快向可持续能源的过渡,其中很大一部分是让人们转向电动汽车。我们需要大规模生产电动汽车,希望它们看起来像是未来的东西。所以,整个产品本身有非常干净的设计,它是从社会进步中获得的灵感,并且正在积极发展中,看起来就像是有未来感。
我认为,这其中很大一部分也是因为汽车在某种程度上变成了生活中某种神奇的东西,可以带你在这个美好的世界四处转转。所以,自动驾驶真的只是未来更广阔愿景的一部分。这个社会在很大程度上是自动化的,在交通方面存在大量问题,让人们陷入发生很多事故的循环中。实际上,人类驾驶汽车不仅不安全,而且开车并不是人类大脑最好的用途,我们还希望大脑可以做一些不同的事情,现在我们有技术来解决这个问题,这就是为什么我们要研究它。
(本文已获得编译授权,原文:
https://www.youtube.com/watch?v=PlLmdTcsAWU&list=PLwrcw5ryumgCddlba4_sf0E9l36BSi04o&index=22)
题图源自 FelixMittermeier, Pixabay
其他人都在看
OneFlow v0.7.0 最新版本已发布,欢迎下载体验:
http://github.com/Oneflow-Inc/oneflow
版权声明: 本文为 InfoQ 作者【OneFlow】的原创文章。
原文链接:【http://xie.infoq.cn/article/c0fdc439aa400a254704cfd00】。文章转载请联系作者。
评论