30 秒看懂
fast.ai 创始人 Jeremy Howard 与 Lex Fridman 聊了他喜欢的编程语言,促使他创办 Enlitic 的医生短缺问题,以及旧金山大学(USF)办公室里那四名学生如何在斯坦福的 DAWNBench 上击败谷歌和英特尔。他认为,迁移学习(transfer learning)、看数据和不轻言放弃,比博士学位、计算集群或又一篇理论论文更重要。贯穿全篇的主题是可及性:这周就把模型微调(fine-tuning)到你自己的问题上,然后继续往下做。
- 1Howard 多年教学后得出的直白结论是:不放弃的人几乎都能成功,天赋和出身背景并不是筛选条件。
- 2他建议初学者今天就打开 course.fast.ai:第一课用大约 5 分钟就能把模型微调好,缺少数学基础也不该成为等待的理由。
- 3别只是运行别人的模型抓取几百张你关心的事物的图片,清理之后微调一个分类器。Howard 的泰迪熊演示只用了 4 分钟。
- 4训练结束后,应当把送进模型的数据和它给出的结果逐条列出来,仔细看那些判错的样本。假如模型最倚重的特征是客户编号,那就先搞清楚编号是怎样分配的,然后才轮到调其他超参数。
- 5很多团队一味追求更多数据和更多算力(compute),却往往还没有试过迁移学习。Howard 说,这项技术能把数据需求降低好几个数量级。
- 6Leslie Smith 尚未发表的超收敛(super-convergence)成果,用高十倍的学习率让一些网络训练快十倍,在 Howard 看来是一个警示:深度学习仍然不太像一门讲求实验的科学。
按章节阅读完整文稿
第一个程序是在 Commodore 64 上搜索更好的音阶
Jeremy Howard 是 fast.ai 的创始人。fast.ai 是一个研究团队,目标是让深度学习能被那些没有谷歌级别计算集群、也没有三年研究生学位的人用上。Lex Fridman 介绍他时,称他是旧金山大学的杰出研究科学家,也是 Kaggle 的前总裁;别人问起该如何入门时,Fridman 首先会提到的人之一就是他。对话一开始讲的是一道高中作业,没有谈神经网络。
作业的题目是研究一个问题:有没有比常见的十二平均律更好的音阶?Howard 在 Commodore 64 上用 BASIC 写了一个程序,搜索其他音阶的划分方式,寻找和声更接近精确比例的调音方案。他希望纯五度应当是 3 比 2,而十二平均律得到的只是近似值。他说,这是他至今仍然记得的第一个程序:把搜索工作交给机器。
音乐贯穿了他的一生。他吹过萨克斯、单簧管,弹过钢琴和吉他,也打过鼓,什么都玩。最喜欢的是萨克斯,尤其是中音萨克斯;要是低音萨克斯没那么难搬,他会选低音的。后来手指得了重复性劳损(RSI),迫使他减少一切需要用手的活动。他说,有一天还想重新拿起乐器,语气里带着一点藏不住的遗憾。Fridman 喜欢音乐和代码这种组合:同一个大脑,用同样的创造力驱动两者。
他最喜欢的编程环境,是一款如今几乎没人怀念的产品
被问到最喜欢的语言时,Howard 先提到的是早期的 Microsoft Access,没有提 Python。他承认,Visual Basic for Applications 算不上好语言。但围绕它的环境是另一回事:表、关系、查询、窗体、事件处理程序和计算,都能用图形化的方式连接起来,面向的是实用的小应用,规模并不大。此后他再没见过同样完整的东西。他说,Airtable 只是这种理念的一小部分,它受欢迎是有道理的。
他关心的主线是数据本身,语法是次要的。他一直想拿来一些数据,用它做点什么,再把结果放回世界里。关系型数据库仍然让他感兴趣;如今在它之上编程,通常意味着要一台服务器、一个 ORM,外加一堆别扭的衔接。他提到 Don Syme 的 F# 工作,认为那是少数几次尝试之一,目标是让数据库出现在类型系统里,字段和表都能用 Tab 补全。早年的 AppleScript 也满足了他类似的需求:让机器彼此对话。
用过 Access 之后,他最喜欢的环境是 Delphi,即 Object Pascal,出自 Anders Hejlsberg 之手。Hejlsberg 做过 Turbo Pascal,后来又做了 .NET 和 TypeScript。Delphi 是一种编译型的快速语言,用起来和 Visual Basic 一样轻松。他不确定现在是否还有和它类似的东西。如果把 C# 或 Java 去掉虚拟机、编译成很小的二进制文件,就差不多了;他希望 Swift 配合 SwiftUI 和跨平台开发,能走到那一步。还有一个叫 Lazarus 的 Free Pascal 项目,正试图重新做出 Delphi。他补充说,Pascal 本身谈不上是门好语言。如果问他喜欢哪门语言,那答案是 J。
数组语言比日常用的 Python 强大得多,却几乎没人去碰
Howard 把编程语言分成三条线。一条从 Alonzo Church 的 lambda 演算出发,通向 Lisp 和 Scheme。另一条是命令式、面向对象的路线,经过 ALGOL、Simula、C 和 C++。第三条很少被提及,是数组导向的语言,起点是 Ken Iverson 的论文《Notation as a Tool for Thought》。那是一篇数学论文,不是编程论文。Iverson 想要一种比普通数学更灵活、更有表达力、定义也更严格的记号,而他认为普通数学的记号很糟糕。这套记号后来成了一门语言。1950 年代末,好名字还有得选,于是他把它叫作 APL,即 A Programming Language。
之后,Ken 和他的儿子基于从 APL 学到的一切,做出了 J。Howard 称它是他见过的表达力最强、最易组合、设计最漂亮的语言。通常不需要写循环。整门语言可以看作 NumPy 用户早已熟悉的广播机制的极端版本:一行代码就能完成大量工作,而且看起来像数学。因为一屏代码往往就能装下整个程序,你可以把它记在脑子里,也能讲清楚。APL 之后分化了。J 是开源的,只有一小群爱好者。K 就不算小众了:世界上一些最富有的对冲基金在用它。整个系统小到能放进 CPU 的 L3 缓存里,而 Howard 见过的每一项数据处理速度基准测试(benchmark)中,它都排第一。他说,授权费大约在每颗 CPU 十万美元的量级。
既然 J 和 K 这么强,为什么还用 Perl 和 Python?是出于务实。他想把事情做完,这意味着要去有现成库的地方。1990 年代末,他创办了电子邮件公司 FastMail,整个后端都用 Perl 写,包括一个监控系统和他自己写的 Web 框架,因为当时这些轮子还不存在。他说,Perl 当时已经赢了:到处都在用它。后来 Larry Wall 不再投入时间,一个起初由强有力的领导推动的项目,没了这份领导,就很难继续成功。Python 几乎在各方面都没有那么优雅,但它有数据科学的库,所以他用它。他明确表示,这是“我们手里最好的东西”,但还不够好。
Python 把研究人员真正需要修改的底层内核藏了起来
他想要的是一门按 Chris Lattner 的说法“无限可改造”(infinitely hackable)的语言:他、他的学生和合作者,应该能看懂并修改从最上层到硬件的每一个部分。Python 恰恰相反。它太慢了,所以在某一层以下全都是 C,到了那一层,调试器、性能分析器和构建系统也都得跟着换。这就谈不上可改造。他说,深度学习仍然很原始;大多数东西即便打败了别的方案,效果也不算好。他审视过的每个领域,包括语音、NLP、分类,都充满了明显愚蠢、等着修正的选择。语言决定了你能不能跳进去做实验,还是被挡在门外。
代价是具体的。对于循环网络和语言模型,逐词遍历的循环必须写在 CUDA C 里,所以最重要算法的核心,成了研究人员无法在上面创新的内核。卷积网络是该领域很多工作的默认架构,几乎可以肯定应该做成稀疏的;但或许只有两个人在用稀疏卷积,因为你得重写 CUDA C 那一层。Howard 说,这不怪任何人。只是没人顾得上,而且很难做。无论用哪种语言写 GPU 程序,仍然意味着要同步成千上万个线程,还要考虑 grid、block 和 warp。用这种方式优化单个算法,对专家来说可能就是一年的工作。
有可能解决这个问题的项目,都建立在编译器研究之上:Lattner 正在带领的 MLIR,以及 Tensor Comprehensions、TILE、TVM 和 Halide。Halide 把问题拆成两种领域专用语言:一种描述你想要的张量运算,另一种描述如何编译、分块并行化,并证明在不损失性能的前提下,可以把优化后的 GPU 代码量缩减约十倍。他期望的技术栈是:用像 J 一样紧凑的语言来写这些领域专用语言,其上是 Swift,最上层是 SwiftUI。眼下它最终仍然落在 CUDA 和英伟达上。如果 AMD 哪天把软件做好,或者 Graphcore 等公司的设备问世,MLIR 的后端就可以转到它们的硬件上。市场需要这种竞争:他说,英伟达对企业级显卡定价过高,是因为没有别人把软件做好。
TPU 更糟。Howard 说,谷歌明确选择让它们几乎无法编程,理由是里面包含太多知识产权。你无法直接编程控制内存,甚至看不到在 TPU 所在机器上运行的代码。一切都要经过虚拟机。剩下的只是千篇一律地拼装高层模块,繁琐又别扭,在他看来完全没有必要。
医疗要做的,是让现有的人手成倍发挥作用
fast.ai 的起源和 Enlitic 有关。Howard 把 Enlitic 描述为第一家专注于医疗深度学习的公司。让他行动起来的,是两个数字:医生的缺口大约是十倍,尤其是在发展中国家;以普通的培训速度估算,补上这个缺口大约要三百年。如果模型能承担一部分分析工作,比如诊断和治疗方案规划,那就不必让每个从业者都培养到当前的顶尖水平。他真正在意的机会,是在印度、中国、印度尼西亚或非洲的一台设备上做分诊,取代波士顿的放射科医生不在他的考虑之列。这样一来,经过一个月培训的卫生工作者,就能对疟疾或肺结核给出高质量的判读,并判断是否需要把病人转到医院。
短缺的情况很具体。他说,除南非之外,整个非洲大陆只有 5 名儿科放射科医生,大多数国家一个都没有。即便能拍出影像,看片的人充其量也只是护士。在印度和中国,几乎没有 X 光片是由受过培训的专业人员判读的,因为专业人员实在太少。如果有一套算法能把风险最高的 5% 标出来交给人工复核,那么在那些正在建医院、买设备、却要很久才能有专业人才的地方,医学能做的事就会改变。他不接受把人替换掉这种框架。短缺已经存在;让一个人的效率提高十倍,并不需要靠把人删掉来改善单位经济账,况且这样还会忽略人仍然比机器做得更好的那些事。分诊才是有用的版本:如果设备有 99% 的把握判定那里什么都没有,就让病人回家。
为什么进展这么慢?因为这东西还很新。他大约在 2014 年创办了 Enlitic。在全球最大的放射学会议 RSNA 上,他逢人便说自己在做深度学习,没人明白他在说什么,也没人感兴趣。监管框架、教育体系,以及对医生是什么的理解,都是为另一个世界建立的。同时是医生又懂深度学习的人,直到现在才有一小批,他们从波士顿和剑桥的博士项目里毕业。已经有医生学完了 fast.ai 的课程,发表了论文,还在 American College of Radiology 里发起了期刊读书会。这将是一个漫长的过程。往往成为瓶颈的是医院的律师,法律条文本身倒还在其次。他指出,HIPAA 的关键词是可携性(portability),并非隐私;法律当初留出灰色地带,是为了让数据能被审慎地使用。律师一看到灰色地带,就会拒绝任何可能让他们被起诉的事。公开十万份去标识化的记录,好处是抽象的:一篇论文,多出一千个诊断,却没有一位可以点名的获救病人。隐私泄露却会落到一个有名字的人身上。
他对隐私的回答是:用更少的数据做更多的事。供应商,尤其是谷歌和 IBM,有动机证明它们需要更多数据、更多算力和更多顶尖人才,所以你得相信它们。Jeff Dean 曾说,目标是多出一千倍的计算,同时减少人手。fast.ai 的目标正好相反:用你手头已有的人、数据和计算机。只要懂得迁移学习,很多机构其实已经具备做出最先进结果的条件。推荐系统的冷启动问题是真实存在的;过去音乐应用会问你喜欢哪些歌手。他认为,从中间商那里买来营销数据,只为省掉五分钟的提问,并不足以抵消对隐私造成的外部性。医疗则不同:医院持有你的影像和病历,而这些数据应当归你所有。他帮助过一家创业公司 doc.ai,其应用能把 Sutter Health、LabCorp 和 Walgreens 的数据拉到手机上,由患者决定分享哪些。
fast.ai 之所以存在,是因为 Howard 不可能在每个需要专家的领域里都成为专家
在创办 fast.ai 之前,他花了一年时间琢磨,深度学习短期内能摘到的最大果实在哪里。Kaggle 让他看到这个领域已经跨过了一道门槛:他看过的每个领域,深度学习都在迅速成为最先进的方法;他与神经网络打交道二十年,经验告诉他,一旦这种事情发生,几乎就会在各处发生。他选了医疗,也很高兴 Enlitic 打开了那扇门,但他一个人做不完所有事。即便是弄清临床医生要解决什么问题、手里有什么数据、数据又归谁掌握,也花了他很长时间。如果目标是产生影响,更好的做法是把工具交到那些已经掌握领域知识和数据的人手里。这些人大多不会写代码,也没有三年时间去读研究生。他的背景偏应用,曾在麦肯锡做了十年咨询,所以他很重视领域专家。这就是使命:让深度学习对他们来说快速、简单又有效。
Fridman 问起理论与实践的关系。Howard 说得很直接:这个领域的大部分研究都是浪费时间。科研界有一个发表上的问题。研究者做的是同行已经认可的事情,结果大家都在做同一件事,也没有动力去做实际有用的东西。最后的结果是,在已经被过度研究的问题上做出一些小进步。如果迁移学习能变得更好,将会改变世界:用更少的数据和更少的算力,让更多人做出世界级的工作,可几乎没有人在研究它。主动学习(active learning),即如何在有人参与的回路中获得更多收益,是他最喜欢的话题,同样也不时髦。在必须给数据打标签的公司里,每家公司都在重新发明它:他们注意到两个类别造成了所有错误,接着又发现模型能告诉他们哪些样本最难。学术界没有理由关心这个结果。
他真正写过的论文只有一篇,但执笔的并不是他。同事 Sebastian Ruder 执笔,Howard 负责研究。这篇论文把成功的迁移学习引入了 NLP,提出的算法叫 ULMFiT。这套方法是他为课程做的:他只想教实用的 NLP,他觉得这意味着要用迁移学习,可又找不到例子,于是自己动手做了。一个只花了几天的原型,就在一个他几乎一无所知的领域的重要数据集上刷新了最好成绩。Ruder 主动提出把它写成论文,最后被 ACL 录用。他说,一旦证明某件事可行,人们就会一拥而上:GPT、GPT-2 和 BERT 紧随其后。初级研究者仍然不得不选稳妥的路线,也就是在大家已经在做的事情上做一点改进。在他看来,选稳妥路线做不出什么有意思的东西。后来他还参与创办了 Platform.ai,专注于主动学习,并发现几乎找不到可以借鉴的文献。
四名学生、八块 GPU,18 分钟训完 ImageNet
Howard 每年在旧金山大学教两门课:面向程序员的实用深度学习,以及研究级别的前沿课程。在备课的同时,他保留了一间很大的办公室,能容纳大约三十人,并邀请任何想来坐坐的学生。办公室通常都坐满了:二三十个人,没有别的事情可做,只为学习深度学习。在其中一段时间里,有人提到了 DAWNBench,这是斯坦福办的一项比赛,要求在 CIFAR-10 和 ImageNet 上尽可能快、尽可能便宜地训练模型。当时只剩十天。他差点就跳过了,后来才意识到,比赛考的正是他已经在教的内容。他和大约四名学生租了一台配有八块 GPU 的 AWS 服务器。
他一直尽量避免多 GPU 的工作,因为所谓可及,指的是普通人负担得起的单块 GPU,数据中心不算在内。租用八块 GPU,他觉得可以算是一个合理的例外。几天之内,他们就把 CIFAR-10(32×32 像素的图片)的训练时间压到了大约十分钟,在时间榜和成本榜上都名列前茅,领先于谷歌和英特尔。接下来他们尝试 ImageNet,共 130 万张图片,目标是十二小时以内,最后做到了大约十小时。谷歌在 TPU 集群上公布的成绩大约是五小时。团队继续推进。有个简单的想法帮了大忙:为什么一定要从 224 或 256 像素开始?先用 64×64 训练,再让同一个模型在 224 像素上训练两个训练轮次(epoch)。这就像先给人看一张模糊的狗的照片,再给一张清晰的,他们本来就知道狗是什么。准确率的门槛是 93%,比当时标准的 ResNet-50 能达到的水平略高一点。两个月后,他们做了分布式版本,用 18 分钟登上了排行榜首位。
几年前,他的朋友 Pete Warden 把后院的一间小屋改成了 ImageNet 训练室,花了一年时间,才把训练压缩到大约十天。这个差距正是 fast.ai 的出发点。Howard 仍然认为,多 GPU、尤其是多机训练大多是在浪费时间,因为它们会拖慢迭代。ImageNet 本身也常常是浪费:大多数人并不需要用 130 万张图片去训练,较小的子集能给出相对一致的结论。他发布了 ImageNette,一个拼写带有法语风格的简单子集,还有 ImageWoof,一个由狗的品种组成的困难子集。两者都能在一块 GPU 上用大约十分钟完成训练,而且结果几乎总能推广到完整的 ImageNet 上。他时常遇到一些人,因为认为只有谷歌才能做出有用的东西,就决定不学深度学习。他说,过去二十年的重大突破都不需要多块 GPU,比如批归一化(batch norm)、Dropout,还有最初的生成对抗网络(GAN)。
他的实验室走得更远,证明了往往根本不需要 GAN:借助迁移学习,只用一块 GPU、几个小时,就能得到接近 GAN 的结果,而且所用的损失函数绕开了对抗博弈。学生 Jason Antic 用这套方法做了 DeOldify,在客厅里用一块家用 GPU 给老黑白电影上色,至今仍是世界上最好的结果之一。Fridman 好奇,能否像把多个手机镜头融合起来那样,把廉价麦克风融合起来。Howard 说,计算摄影已经证明了这一点,比如 Night Sight、伪造的虚化效果和多摄像头,同样的超分辨率方法应当也能用在音频上;但还没有人做,做起来大概要几个月。他们计划发布一个音频库,来推动这件事。
超收敛发表不了,因为没人接受 Leslie Smith 说自己不知道原因
DAWNBench 上用到的学习率技巧,来自 Leslie Smith。他和 Howard 一样,关心如何快速、准确地训练网络。Smith 发现了超收敛:在某些网络和某些设置下,把学习率调高十倍,训练就能快十倍。这篇论文没能进入常规的发表渠道。它不是时下流行的学术题目,深度学习也没有被当作一门实验科学来对待。Howard 说,在物理学里,你可以发表一个粒子表现出理论无法解释的行为,然后让六十年的人去研究其中的原因。而 Leslie 无法发表的是这样一句话:“这个模型训练得比应有的速度快了十倍,而我不知道为什么。”审稿人要的是解释。正因为如此,Howard 读过的未发表论文比已发表的还多。超收敛的泛化效果也更好:训练轮次更少,意味着模型看到数据的次数更少,准确率反而提高。
后来,Smith 弄清了机制的很大一部分,Howard 的团队则加了一些小改动。主要的技巧是:从非常低的学习率开始,然后慢慢调高,这样早期的步子很小,后期的步子则比任何人原先认为可行的都大。再配合其他一些技巧,就能稳定地得到超收敛。在 DAWNBench 上,他们用的学习率远高于人们原本认为可行的水平。他说,过去一年的优化器研究表明,权重衰减、学习率和 Adam 的 epsilon 之间会以奇怪的方式相互影响;而且模型的不同部分应当以不同的速率训练,也就是差异化学习率(discriminative learning rates),这对迁移学习尤为重要。使用单一学习率的想法正在消失。如果你理解梯度以及梯度如何变化,就可以为每个参数分别设定。旋钮越少,训练模型就越不需要深度学习专家,领域专家也就能承担更多工作。
谷歌的做法是动用成千上万倍的算力,让众多模型中碰巧有一个能用,Howard 认为这太疯狂。如果你理解模型如何学习,就能直接跳到那个好的模型。这样更便宜、更容易获得,还能把人的时间腾出来,用于理解模型、收集数据和找错误。看数据是课程的核心内容之一。训练之前先看。ImageNet 模型做完第一次微调(大约五分钟)之后,他们会研究分错类的图片、混淆矩阵,然后去搜索模型容易混淆的东西。模型会告诉你哪些特征重要、你在哪些群体上失败了,这会让你更快地成为领域专家。它还能发现数据泄露。如果最重要的特征是客户 ID,你就去问生成 ID 的人,结果得知:申请通过时会在 ID 后面加一个 1。他说,要用模型来调试数据。
从 Theano 到 PyTorch 的框架之路,关键在于能不能一步步走过计算图
在云端硬件上,谷歌的 TPU 和最好的英伟达 GPU 大致处在同一水平,TPU 或许快 30%,但 GPU 的可编程性强得多,所以他会把研究时间花在 GPU 上。现在获取 GPU 比以前容易多了:AWS、GCP 等平台都可以租给你。AWS 仍然要花太多工夫去找 AMI、安装环境。访谈时,GCP 提供了一个预装了 fast.ai 和 PyTorch 的镜像,课程和 Jupyter 都已经跑起来了。更方便的是一键式平台,比如他们自有的 Salamander,以及 Paperspace,它会直接弹出一个预装了课程材料的笔记本。课程刚开始时,流失最严重的是第一课,因为很多人连 AWS 服务器都跑不起来。GCP 提供的 300 美元免费额度有帮助,一键式平台的帮助更大。
他们的教学技术栈经历了几次变化:从 Theano 和 Keras,到 TensorFlow 和 Keras,再到 PyTorch,现在是 PyTorch 加上 fastai 库。Theano 和 TensorFlow 要求你先定义一个静态计算图:先把模型要做的所有事情声明好,之后再拿数据去运行。你没法调试它,没法单步跟踪,也没法在笔记本里随手探查。PyTorch 并非第一个放弃这种做法的,但它是第一个有力的挑战者:直接写普通的 Python 就行,库会自己处理 GPU。这一步对科研和教学都很重要,对 DAWNBench 那样需要快速尝试想法的比赛也必不可少。PyTorch 对新手仍然不友好,你得自己写训练循环、管理梯度,研究者也会把精力耗在样板代码上。于是他们做了一套分层的 API:最上层只需三行代码,就能训练一个最先进的网络,你也可以逐层往下,一直深入到底层。已经有人用它赢得比赛、发表论文。
在循环网络上,Python 仍然卡住了他们:如果真要改动那个慢的部分,在 Python 里就变得不切实际。最新的课程和一些研究已经开始使用 Swift。他认为,要到实用还得大约三年,但他愿意等。一个刚起步的 fastai 视觉库,已经能在 Swift for TensorFlow 上运行。在他看来,Python 版的 TensorFlow 不够用:它们借用了 PyTorch 那种大家喜欢的交互界面,包了一层叫 Eager 的语法糖,却没有改变运行时,所以单步可能慢十倍。他经常读 TensorFlow 的源码,对所见的并不满意。在他看来,tf.data 像是 TPU 约束造成的烂摊子,这笔技术债不推倒重来是还不清的。建立在 MLIR 和 LLVM 之上的 Swift for TensorFlow 可能会是另一种东西。如今的新学生仍应从 fastai 和 PyTorch 入手,因为这样最快能掌握概念和真正最先进的技术。只要懂得基础,之后换库只需要几天。Swift 在未来几年内都不会成为初学者的落脚点:它没有数据科学社区,而且在他看来,数值计算领域的文化曾在性能上做出过糟糕的选择。如今 Lattner 已经去了谷歌,这种情况正在改变。第一课的整本笔记本,已经能在 Swift 的 Python 模式下运行。
课堂上经得起考验的唯一筛选条件是韧性
学完 fast.ai 的两门课,少则两个月,多则两年。非常熟练的程序员大约每门课需要七十个小时。很多人会专门留出一年时间,参加 Kaggle 比赛,读 Ian Goodfellow 的书,最后觉得自己已经相当能干了。领域专家的编程功底往往很平常,所以这一年里有一部分时间只是用来多写代码。通常的瓶颈在编程,数学倒在其次。统计学背景很重的人,反而可能因为相反的原因而吃力:他们想要更少的参数,想盯着每个系数细看,这种直觉是错的。完全不懂统计的程序员往往做得最好。课程是免费的,没有任何收入。他们最近刚凭这门课获得了 COGx 的最佳 AI 课程奖。
他说,教学对他自己的熟练程度和对使命同样重要。看着来自各种背景的领域专家在自己的领域里做出最先进的成果,让他确信了一件他一直希望相信的事:人人都能做到。那种“只有特定的人才会写代码,或者只有特定的人才够聪明去做 AI”的势利看法,用他的话说,就是扯淡。成功与失败的人之间的区别,在于韧性。很多人会放弃。那些没有放弃的人,几乎都成功了,连他私下担心还没开窍的那些人也不例外。他现在手里有证据,而且是一次次看到的证据,不只是一种偏好。
给初学者的建议是:多训练模型。把输入和输出打印出来,改变输入,观察输出,做实验直到形成直觉。直接拿别人的模型做推理(inference),并不算起步;微调才是真正的起步,因为那样模型就进入了你的领域。在你真正关心的数据上,这大约只需五分钟。第二课教你写脚本去抓取 Google 图片搜索的结果,从零开始构建数据集,并把一个网页应用上线。课上他做了一个分辨泰迪熊、灰熊和棕熊的分类器,准确率基本达到 100%;抓取图片只花了四分钟。笔记本里的小部件可以帮助清理数据集、检查错误。“分享你的作品”那个帖子有一千多条回复。有一名学生在第一课之后,就打败了关于天城文(Devanagari)字符的最好的学术论文。另一名学生对特立尼达和多巴哥的蜂鸟做了分类,这是该国的国鸟。长期来看,要在你自己的领域里持续训练。世界不需要又一个人在拥挤的基准测试上做一点渐进式改进。它需要的是能诊断疟疾、研究语言中的媒体偏见、或找出渔业中问题区域的人。他说,即使是迁移学习的研究,也需要一个你真正理解的问题。他形容,该领域相当一部分机器人研究者,就像是没坐过车却在研究自动驾驶。
创业的建议和深度学习一样:不放弃,风投的钱尽量晚拿
要做成一家成功的创业公司,需要什么?和成为成功的从业者一样:不放弃。钱或时间都可能耗尽,所以要把成本压到极低,攒够一笔钱,留出足够的缓冲期(runway),并且做你理解、又在乎的事情。他在这个领域看到的典型失败,是深度学习博士试图把自己的论文商业化。这是浪费时间,因为这个课题当初是作为工程或数学练习选出来的,并非某个人确实有的问题。如果你真做过招聘,每天筛简历,清楚自己要找什么样的人,还能花几分钟试一个模型,看它是否符合你自己的判断,那你就走在一条真正的路上。
尽量晚拿风险投资,最好永远不拿。他的前两家公司都是自筹资金,他认为那种提心吊胆是对的。风投更让人提心吊胆:靠这个吃饭的人站在你身后大喊“增长”,而且他们不在乎你会不会失败,只在乎你增长得够不够快。和朋友们按照合理的节奏做事,做出的东西足够大,大到他们再也不必工作,又足够小,小到没有哪家风投会看上眼。这就够了。1999 年,他和两个不同的朋友同时创办了 FastMail 和 Optimal Decisions。FastMail 的服务器每月大约花 70 美元。磁盘空间用完时,他在首页放了一个付费按钮:超过 10 MB 的空间,每年收 10 美元。从那以后,公司开始赚钱。Optimal Decisions 做的是百万美元级别的活,所以他们先卖范围界定(scoping)项目,也就是并非免费的原型,每个收费 5 万到 10 万美元,既能覆盖成本,也让客户觉得这份工作很有价值。两家公司在六个月时都已经盈利。
和风投打交道时,他发现很难做到:只做公司需要的事,却不去讨投资人的欢心。他们总说不要为了他们的心情去优化,可你要是真不迎合,他们又会生气。为退出而优化本身可以,但在风投的规模下,要的是千倍增长。他认为,以一千万美元卖掉公司、过上生活方式型的日子,就算成功了。做一件你愿意永远做下去的事,是好结果;花三年做出来就卖掉,同样是好结果。
停了三年,一万八千张 Anki 卡片依然有效
Howard 大量使用 Anki。间隔重复可以追溯到大约一百五十年前的艾宾浩斯。他在卡片上写下随机的字母序列,然后测量一天或一周之后还记得多少。记忆随时间呈曲线下降。如果他在快要忘记的时候复习,下降就会变慢;之后再复习一次,又会再慢一些。他推导出一个大致最优的复习安排。Anki 把这件事自动化:它会问你记住了没有,如果没记住,就让这张卡片更早再次出现。你没法自欺欺人。如果你没有在学习,卡片堆就会越堆越高,所以必须好好对待自己的大脑,比如用记忆术、故事和语境。Piotr Wozniak 的 SuperMemo 是现代研究的源头;Michael Nielsen 不久前还写过用它来帮助记住论文内容。Howard 自己用 Anki,几乎只用来学中文。学中文是他有意做的决定:即使不在中国、没法练习,他也想保持住。编程语言和论文则是相反的处理方式。他尽量不去死记硬背。他会把重要的概念提取出来、弄懂它,然后要么把它融进库和日常习惯里,要么丢掉。他在乎什么,就用什么,所以他记得住。
二十五年来,他每天至少有一半的时间用于学习或练习新东西。同事一直很反感,因为看上去他没有在做应该做的工作。这也意味着他做任何事都更快,因为练得多。一年之内,当初和他一起学中文的人就都不学了;他十年后还在学。每张中文卡片都挂在一个故事上,这些故事都是刻意设计得好记的:有趣的、恶心的、性感的,或者和他在乎的某个人有关。他也允许自己失败。身体上的问题让卡片复习停了大约三年,中间还有几次停了几个月。重新面对一万八千张到期的卡片,你要么放弃,要么决定接下来两年每天都坚持。让他意外的是,三年之后,中文居然还留在脑子里。重新学起来比第一次快得多。Fridman 也有同样的体会:一把吉他闲置一年之后,就是这样。
被问到 AI 的下一个重大突破时,Howard 拒绝回答这个问题。他认为这种突破无法预测。现有的工具已经能解决很多尚未解决的社会问题,他希望更多人学会这套工具并用起来。新的技术突破并不是瓶颈。至于人类水平的智能,他不知道,也没有办法知道,并且不理解为什么有人在没有数据的情况下做出预测。有更紧迫的问题。劳动力被替代就是其中之一。那种“以前的技术没有造成大规模失业,所以这次也不会”的计量经济学式耸肩,他认为很轻率。他已经看到中产阶层正在被掏空,学生毕业时的经济前景也比父母那一代更差,他说这在过去几百年里都没有发生过。焦虑会变成绝望,甚至是暴力。Andrew Yang 曾以这一议题参选,Howard 则深感忧虑。他说,每一位使用深度学习的数据科学家,都握着一件高杠杆的工具。他们有责任考虑人在回路中的作用、失控的反馈,为被算法影响的人提供申诉流程,并向部署系统的人讲清系统的约束条件。数据科学家常常把这些当成别人的事。他认为这种想法是错的。Fridman 对他说,他正坐在能教大家改变这种看法的位置上,并且应该把他们引向文学和历史。
同频道的其他文章
3:36:56EN → 简体中文
5:15:51EN → 简体中文
3:12:58EN → 简体中文
3:46:18EN → 简体中文
3:51:47EN → 简体中文
2:53:42EN → 简体中文