【人工智能行业大师访谈6】吴恩达采访 Andrej Karpathy

来源:Coursera吴恩达深度学习课程

作为deeplearning.ai课程的一部分,Andrew希望除了教授技术理念之外,同时介绍一些深度学习的先驱给大家认识。在这个视频中,Andrew也希望问问这些先驱们,能不能给一些工作上的建议,关于如何入门深度学习,如何做课题研究或者如何在深度学习领域找一份工作。【人工智能行业大师访谈5】吴恩达采访林元庆。接下来,采访Andrej Karpathy,文章末尾有总结。

吴恩达:欢迎Andrej,今天你能来我很高兴。

Andrej:是的,谢谢你的采访邀请。

吴恩达:人们已经很熟悉你在深度学习领域中的工作了,但不是每个人都知道你的个人故事,不如你就告诉我们,你是怎么一步步完成深度学习的这些工作的?

Andrej是的,当然好,我第一次接触深度学习时,还是一个在多伦多大学的本科生,那时Geoff Hinton就在那里,他教一门深度学习课,那时候用的是受限玻尔兹曼机(restricted Boltzmann machines),在MNIST手写数字集上训练。但我真的很喜欢Geoff谈到训练网络的方式,他会用网络的智能,这些词,我那时想,这听起来,当我们训练这些数字时会发生奇迹。这是我第一次接触,不过那时候我没有了解很多细节,后来当我在不列颠哥伦比亚大学读硕士时,我上了一门Nato Defreiter(听不太清名字)教的课,还是机器学习,那时我第一次深入了解这些网络和相关知识,我觉得很有趣,当时我对人工智能非常感兴趣,所以我上了很多人工智能课,但是我看到的很多东西没那么令人满意,那时课程介绍了很多深度优先搜索(depth-first search),广度优先搜索(breadth-first search),Alpha-Beta剪枝(pruning)各种方法。我那时不太懂,我并不满意。当我第一次在机器学习课程中见到神经网络时,我觉得这个词更技术(more technical),而且知名度没那么高。人工智能大家都能说上一两句,但机器学习就更小众一点,可以这么说吧。我对人工智能不满意,当我看到机器学习,我就想这才是我要花时间研究的AI 这才是真正有趣的东西,就是这些原因让我开始走这条路,这几乎是全新的计算范式(computing paradigm),可以这么说。因为正常情况下是人类在编程(humans write code),但是在这种情况下是优化程序自己写代码(the optimization writes code)。所以当你建立了输入输出规范(input/output specification)之后,你只需要给它喂一大堆例子,优化程序就自动编程,有时候它写出的程序比人工的还好,所以我觉得这只是一种非常新颖的编程思路,这就是让我感兴趣的地方

吴恩达:然后通过你的工作,其中一件让你声名远扬的事是你是ImageNet分类竞赛的人类基准(human benchmark),这是怎么来的?

Andrej所以基本上,他们的ImageNet比赛可以说成是计算机视觉领域的世界杯(world cup),不管人们是否注意这个基准和数字,我们的错误率也会随时间下降。对我来说,人类在这个评分标准上的位置并不清楚。我之前在CIFAR-10数据集上做了类似的小规模实验,我在CIFAR-10数据集中做的是,我观察了这些32x32的图像,我试图自己对他们进行分类,那时候只有十大类,所以很容易构造一个界面去人工分类。那是我自己的错误率大概是6%,然后根据我实际见到的东西,一个具体任务有多难,我预测出最低能达到的错误率大概会是多少。好吧,我不记得具体数字是多少,我想大概是10%,现在算法做到了3%或2%,或者某个变态的数值。那是我第一次做人类基准实验(experiment of human baseline),非常有趣。我认为这是非常重要的,做这个基线的目的和你的视频里介绍的一样。我的意思是你真的希望这个数字能够表示人类的水平(that number to understand how well humans are doing it),这样我们就可以和机器学习算法比较。而对于ImageNet似乎存在一些分歧,这个基准到底有多重要,应该花多少精力去尽量得到较低的数字,我们甚至不了解人类自己在这个评分系统中的位置,所以我写了这个JavaScript界面,我给自己看图。然后ImageNet的问题在于,你不只有10个分类,你有1000个分类,这几乎就像一个用户界面挑战。显然我自己记不住1000多个分类,所以我应该怎么设计这个界面,让比赛公平一点,所以我把全部分类列表处理,然后给我自己看看各个分类的例子,所以对于每张图像,我大概浏览了1000多个类别。只是想看看,根据我在每个类别里看到的例子判断这个图像可能是什么,而且我认为这个练习本身就是非常有启发性的。我的意思是,我不明白为什么ImageNet有三分之一类别都是狗,狗的品种,所以我兴致勃勃地看着那个网络花了大量时间去处理狗,我想它的三分之一性能用来处理狗。我这个小实验做了一两个星期(a week or two),我把其他所有任务都搁置了,我那时想这练习非常有趣。我最后得到了一个数字,我觉得一个人是不够的,我需要更多人参与到这个实验中来,我试图在实验室内组织人员做同样的事情。我想那时大家都不怎么愿意贡献,花上一两周时间来做这么痛苦的工作(pretty painstaking work),就是坐五个小时,尝试分辨出这只狗的品种是什么,所以在这方面,我无法得到足够多的数据。我们大概估计了一下人类的表现,我觉得很有趣。然后就传开了,那时我还没觉得很明显,我只是想知道这个数字,但这很快变成了一个概念。大家都很喜欢这个事实,然后就这样了,大家都开玩笑地说,我是那个作为基准的人,当然,我都笑死了。

吴恩达:DeepNet软件超越了你的表现时,你有没有很惊讶?

Andrej绝对,是的,绝对的。我的意思是,有时一张图真的很难看出是什么,那图就是小块黑白色,还有一些黑点,到处都是,我没看出来是什么,我只能猜测这属于20个类别之间,但网络就直接懂了,我不明白是怎么一回事。所以这里有点点超人类的意思了(So there’s some super-humanness to it.)。但还有,我想网络非常擅长识别这些地砖图案和纹理的统计规律(statistics of floor tiles and textures)。我想在这方面,网络比人类表现优秀毫不奇怪,它可以从大量图像中提取精细的统计特征。而在许多情况下,我很惊讶,因为有些图像需要识字,图片有时就是一个瓶子,你看不出来是什么,但它上面有文本,告诉你它是什么,作为人类,我可以阅读文字,这没问题,但网络必须自己学习读取信息来识别物体,因为单看图像并不明显。

吴恩达:还有一件事让你声名远扬,深度学习社区一直很感激你的贡献,就是你教了CS231n课程,并把它放到网上,可以告诉我具体的经过吗?

Andrej是的,当然了,所以我有个强烈的感觉,这种技术是革命性的(transformative),很多人都希望能用上。这几乎像一把锤子(hammer),我想做的是,我那时能够随意把这把锤子交给很多人,我觉得这种工作很有吸引力。从博士生的角度来看,不太建议做这种事,因为你会把你的研究搁置一边,我的意思是说,这占用了我120%时间,我必须将所有研究放一边。我是说,这门课我带过两次,每次都要4个月时间,所以时间基本上是花在课上,所以从这个角度来看不太建议,但这基本上是我的博士阶段的亮点,这与研究甚至没有关系。我认为教一门课绝对是我博士生的亮点,只要看到学生,看到他们真的很兴奋,这门课和一般的不同,通常,课程里讲的内容是19世纪发现的,这些经典知识,但这样一门课,我可以介绍一周前刚发表的论文,甚至昨天刚发表的,这些都是前沿研究。我想本科生,还有其他学生,真的很喜欢这门课贴近前沿的特点,他们发现他们是可以理解到前沿的。这不是核物理(nuclear physics)或火箭科学(rocket science),你只需要会微积分(calculus),代数(algebra),你实际上就能理解所有背后的原理。我想这个事实如此强大,事实上这个领域日新月异,学生们就会觉得每天都处于时代浪潮的前端,我想这就是大家那么喜欢这门课的原因。

吴恩达:而且你真的帮助了很多人,送出去了很多锤子hhhh。

Andrej是啊。

吴恩达:作为一个研究深度学习,有些时日的研究员,这个领域还在迅速发展,我想知道,你自己的想法是怎样的,这么多年来你对深度学习的理解有何改变?

Andrej是的,基本上当年我见到的是受限玻尔兹曼机处理这些手写数字数据,那时我还不知道这种技术会被大规模应用,不知道这个领域有多重要。还有,当我开始研究计算机视觉(computer vision),卷积网络(convolutional networks)时,这些概念都已经存在。但它们并不像是计算机视觉界马上就会使用的东西,那时人们的看法是,这些处理小案例不错,但无法推广到更大的图像,这种认识错到极端了。[笑]所以基本上,我很惊讶现在这个技术到处都在用,结果非常好,我说这是最大的惊喜,而且还不仅如此,它在一个地方表现很好,比如ImageNet,但另一方面,没有人预计到它的趋势,至少我自己没预计到。就是你可以把这些预先训练好的网络迁移(transfer)到其他领域,你可以在任意其他任务中微调网络(fine tune),因为现在你不只解决了ImageNet问题,而且你需要数百万个例子,网络变成了非常普适的特征提取器(very general feature extractor),而且这是我的第二个想法,我觉得更少人预计到了这个发展,还有这些论文,它们就在这里,人们在计算机视觉里的一切努力,场景分类(scene classification),动作识别(action recognition),目标检测(object recognition),基本属性(base attribytes)等等,人们只需要通过微调网络就把每个任务都解决了,所以对我来说是非常意外的。

吴恩达:是的,我想监督学习在媒体上很热门,但是,然而预先训练微调或迁移学习,其实都效果拔群,但这些领域媒体报道更少一些。

Andrej对的,就是这样,是的,我觉得其中一个进展不大的方向是无监督学习(unsupervised learning),被寄予了太多希望,我认为这才是真正(在2007年左右)吸引很多研究人员进入了这个领域的概念。但我觉得那个梦想还没被实现,还有令我意外的一方面是,监督学习竟然效果这么好(supervised learning part worked so well),而无监督学习还是处于很原始的状态(unsupervised learning is still in a state of …yeah),怎么利用它,或者怎么让它达到实用,还不太明显,即使很多人还是对它的未来深信不疑,我说在这个领域,可以用这个词。

吴恩达:所以我知道你是其中一个,一直在思考AI远期未来的研究员,你想分享你的想法吗?

Andrej所以我最后花了差不多一年半,在OpenAI思考这些话题。在我看来,这个领域会分成两条轨迹(the field will split into two trajectories一边是应用AI(applied AI),就是搭建这些神经网络,训练它们,主要用监督学习,有可能用无监督学习,然后慢慢提升性能,比如说提高图像识别率之类的;另一个方向是,更一般的人工智能方向(artificial general intelligence directions),就是如何让神经网络变成一个完全动态的系统,可以思考,有语言能力,可以做人类能做的所有事情,并以这种方式获得智能。我认为一直到很有趣的地方是,例如在计算机视觉中,我们一开始研究的方向,我想是错误的,那时我们试图把它分解成不同的部分。我们就像是,人可以识别人(people),可以识别场景(scenes),人可以识别物体(objects),所以我们就开始研究人类能做的各种事情,一旦做出来了,就分成各种不同的子领域了,一旦我们有了这些独立的系统,我们再开始把它们组装起来,我觉得这种做法是错误的,我们已经见到历史上这么做的结果如何。我想这里还有其他类似的事情正在发展,很可能是更高水平的AI,所以人类会问问题,会做计划,会做实验来了解世界运作的规律,或者和其他人交谈,我们就发明了语言(language)。人们试图通过功能来区分各种能力,然后复制每一种能力,把它们放到一起组成某种机械大脑,我觉得这个方法论是错的。我更感兴趣的领域,不是这种分解的,还原论的手段,而是希望构建一种全面动态的神经网络系统(neural network that is the complete dynamical system),这样你一直是完整的代理人(a full agent。那么问题在于,你如何构思目标去优化权重,优化构成大脑的各种权重,才能得到真正的智能行为?所以这是OpenAI里我一直在想的很多东西,我认为有很多不同的方式,人们在这个问题上也有很多思考,例如,在监督学习方向,我在网上发了这篇文章(http://karpathy.github.io/2015/11/14/ai/),这不是一篇文章,而是我写的一个小故事,这个小故事尝试构想出一个虚拟的世界,如果我们只通过扩大监督学习规模来逼近这个AGI,我们知道这是可行的。然后得到像这样的东西,比如亚马逊土耳其机器人(Amazon Mechanical Turk(补充:这是一个Web服务应用程序接口),人们可以接触不同机器人,让它们完成各种任务,然后我们在这个基础上训练,把它看成是模仿人类的监督学习数据集,这样的东西会具体是什么样的。所以这里还有其他方向,比如基于算法信息理论的无监督学习,如AIXI,或者构成人工生命,看起来更像人工进化的东西,所以这就是我花时间思考很多的事情,我已经得到正确答案了,但我不愿意在这里说。

吴恩达:至少我们可以通过阅读你的博文来了解更多信息。

Andrej是的,当然了。

吴恩达:你今天已经提出了很多建议,还有很多人想进入AI和深度学习领域,对于这些人来说,你有什么建议呢?

Andrej是的,当然了,我想人们在讨论CS231n的时候,为什么他们认为这是一个非常有用的课程,我听到最多的是,人们很喜欢我会一直讲到最底层的技术细节(low-level details)。他们要调用的不是一个库,而是可以看到底层代码(they were not working with the library, they saw the real code)。看到一切是怎么实现的(they saw how everything was implemented),然后,他们自己去实现各大部分。所以你必须接触到最底层,知道一切程序背后的原理,不要随便抽象化,你必须充分了解全栈(the whole stack),了解整个流程。当我学习这些内容时,我发现这样学,学到的东西最多,就是你自己从零开始去实现,这是很重要的,就是这部分学习性价比最高。从理解领域知识方面来看,所以我自己写库,这个库叫ConvNetJS,它是用Javascript写的,可以实现卷积神经网络,那是我学习后向传播的方法。我一直建议别人不要一开始就用TensorFlow之类的东西,一旦你自己写出了最底层的代码之后,你可以用,因为你知道所有背后的原理,这样你就很放心,现在就可以使用这样的框架,可以帮你省去一点细节功夫,但你自己必须知道背后的所有原理,所以这是帮助我最多的东西。这是人们在上CS231n课程时最感兴趣的东西,所以我建议很多人这么做。

吴恩达:不是直接跑神经网络,让一切自然发生。

Andrej是的,在某些层的序列中,我知道当我加入一些dropout层,可以让它表现更好,但这不是你想要的在这种情况下,你会无法有效调试,你不能有效地改进模型。

吴恩达:是的,这个答案让我想起我们的deeplearning.ai课程,一开始先用几周介绍Python编程,然后再..。

Andrej是的,这样很好。

吴恩达:非常感谢你来到这里分享你的见解和建议,在深度学习世界中,你已经是很多人的偶像了。我真的很高兴,非常感谢你今天可以接受采访。

Andrej是的,谢谢你邀请我。

总结很多人想进入AI和深度学习领域,对于这些人来说,你有什么建议呢?  他们要调用的不是一个库,而是可以看到底层代码(they were not working with the library, they saw the real code)。看到一切是怎么实现的(they saw how everything was implemented),然后自己去实现各大部分,必须接触到最底层,知道一切程序背后的原理,不要随便抽象化,你必须充分了解全栈(the whole stack),了解整个流程。这样学到的东西最多。自己从零开始去实现,这是很重要的,就是这部分学习性价比最高建议不要一开始就用TensorFlow之类的东西,一旦你自己写出了最底层的代码之后,你再去用,因为你知道所有背后的原理,这样你就很放心,现在就可以使用这样的框架

说明:记录学习笔记,如果错误欢迎指正!写文章不易,转载请联系我。

猜你喜欢

转载自blog.csdn.net/csdn_xmj/article/details/119933538