【编者按】在开源与人工智能的灿烂星河里,贾扬清的名字都格外地耀眼。因为导师 Trevor Darrell 教授的一句“你是想多花时间写一篇大家估计不是很在意的毕业论文,还是写一个将来大家都会用的框架?”,学生贾扬清一头扎进了创 Caffe 的世界。Caffe 成了贾扬清的代表作,而贾扬清的开源与 AI 征途还将走得更远。
采访 | 刘韧,云算科技董事长、《知识英雄》作者、DoNews 创始人
作者 | 李欣欣 刘韧 周扬 责编 | 唐小引
出品 | 《新程序员》编辑部
2013 年 6 月,伯克利大学。28 岁的贾扬清(见图 1)正在写 Decaf(Caffe 的前身)。3 个月后,贾扬清博士毕业,此刻,他在和伯克利心理学系的 Thomas Griffith 教授合作,研究一个心理学课题──人类在个人成长过程中是如何形成“类别”概念的。研究中,贾扬清用一个概率框架来表达人的行为,但从图像中提取到的人的行为特征较弱,很难推导出完整的结论。
图 1 伯克利时期的贾扬清
一天,贾扬清看到,一篇获得 2012 年 ILSVRC 比赛第一名的论文“Advances in neural information processing systems”,提到深度学习 AlexNet 模型,用 Convolutional Neural Network(卷积神经网络,简称 CNN)技术,击败了其它非神经网络的算法,只用两块 GPU 即可替代此前 Google 1 万 CPU 方案。一台机器顶一万台机器,且错误率从 25%降到 15%。这篇论文,一石击水,震惊行业。此前,神经网络一直不被业内人看好。
贾扬清受到启发,思考着将论文里的 CNN 提取特征技术,运用到他手头的心理学项目研究上。于是,贾扬清找到 Alex Krizhevsky(AlexNet 模型的作者之一),问他是否可以分享 AlexNet 的源代码?Alex 这样回复:抱歉,我开了公司,正在创业,因知识产权问题,无法直接给代码,但你在研究过程中,遇到问题时,可随时问我。
恰在此时,贾扬清得到 NVIDIA 的学术捐赠计划,收到了一块 K20 的 GPU(见图 2),对学生来说,“GPU 是很贵的!”于是,正在写毕业论文的贾扬清,动手攒了一台机器,利用空闲时间,复现 AlexNet 框架,用以提取图像中的特征。
图 2 最早做框架的 GPU
此时的贾扬清每日搭乘地铁,去 Google 公司实习。坐在地铁座位上,贾扬清打开电脑,摊在双腿上,见缝插针地继续写框架。作为 GPU 的初学者,万事开头难,但贾扬清沉迷其中,“写代码可能和玩游戏上瘾差不多。”“我花在编程上的时间从 20%、40%、80%……逐渐递增。”在 Google,贾扬清每天都要喝数杯咖啡,“这样不好”,贾扬清把正写着的框架命名为 Decaf,是想警醒自己,戒咖啡。
此时,贾扬清的任务清单里有:⒈博士毕业论文;⒉心理学研究课题;⒊找工作;⒋复现 AlexNet 框架。比起前三项任务,贾扬清把更多的时间花在了最后一项,写论文的时间被严重挤压。他找导师 Trevor Darrell(计算机科学家、伯克利教授)寻求建议,导师只问了一个问题:“你是想多花时间写一篇大家估计不是很在意的毕业论文呢?还是多花时间写一个将来大家都会用的框架?”
导师的话鼓舞了贾扬清,他把论文搁在了一边,一头扎进 Decaf。“导师总能教会我,分清主次。”
贾扬清写好了脚手架,小规模“跑起来”后,他把 Decaf 放到了伯克利的小组里,让同学们试用,大家都觉得“还挺好用的”。Evan Shelhamer、Jonathan Long、Jeff Donahue、Sergio Guadarrama 和贾扬清一拍即合,决定组成一个“核心小团伙”,在日常科研和工程工作以外,一起开发 Decaf。很快,“小团伙”复现出 AlexNet 模型。
Decaf 需要基于 cuda-convnet 来训练,但是通过 Decaf 验证,深度学习特征能够利用学习范例进行深入实验,大家觉得,干脆二次开发,做成一个完整的深度学习框架,让它成为通用又干净的 AI 框架工具。
因为 GPU 飞快的速度,贾扬清忖思着把 Decaf 改为 Caffe,伯克利小组的同学们更喜欢 Caffe 的叫法。于是,Decaf 更名为 Caffe。两个月后,Caffe 写完了。贾扬清特意跟导师申请了一笔费用,买来一台冰滴式咖啡机,放在研究室。此后,Evan Shelhamer 经常给大家做咖啡喝,这导致本想戒掉咖啡的贾扬清“最终也没能戒掉咖啡”,大家索性把对外接洽咨询工作的邮箱也改为了 caffe-coldpress。
图 3 贾扬清最早用来开发 Caffe 的电脑主机
贾扬清面临一个难题:该用哪种方式公布 Caffe?是像 Alex Krizhevsky 一样成立创业公司,商业化运作?还是作为程序库,纯粹支持科研?还是开源?贾扬清举棋不定,而其他 Caffe 开发者的意见也各有倾向,莫衷一是。
贾扬清有心开源 Caffe。他想到过去几个月,若是有一个公开的深度学习框架,能获取代码和算法的细节,自己就不必再浪费精力复现。而且,“当学生时,我内心深处就有‘做出一个东西,放到开源上’的愿望”,“我在伯克利所用到的代码,绝大多数都是开源的”,“只有把市场做大,大家才可能都有蛋糕吃”,“开源,并不会抹灭个人的技术能力”,“反正,买咖啡喝,我还是买得起的!夫复何求呢。”
该如何让大家同意呢?“这可比写 Caffe 难多了”。贾扬清决定,挨个找核心开发的同学们谈。有的同学好谈,有的则难辩,贾扬清急了,脱口说出气话“这是我写的框架,所以我应该有决定权!”的时候也有,前后谈了 7 天,最后,所幸同学们都同意 Caffe 开源。
2013 年 12 月,Caffe 放到 GitHub 上,正式开源。得知消息的 Alex Krizhevsky 也很开心。贾扬清的导师建议把伯克利大学写在 Caffe 的说明上,贾扬清也很乐意,“Caffe 以伯克利大学的名义开源,大家很骄傲,觉得为母校争光了。”
在 Google 实习时,贾扬清拿到了 Google 的正式 Offer,只等毕业后入职。不再想找工作的贾扬清完全放飞,索性毕业论文也不写了,最初研究的心理学课题,也不了了之。
Caffe 开始吸引用户和开发人员,借由 Caffe 光环,贾扬清结识了许多业内人士。两个月后,贾扬清意外收到英伟达公司的邮件,英伟达提出,将为伯克利研究所提供计算的资源,派工程师和贾扬清他们一起做框架优化,提升 Caffe 的应用稳定性。贾扬清同意合作,他看中英伟达在系统侧的优势。接下来的一年,汲取各方的力量的 Caffe,走在加速发展的路上。
Google 工作之余,贾扬清继续和伯克利的同事们一起维护 Caffe。贾扬清开始重新设计 Caffe 的一些结构,使它更模块化,更能适配各种环境下部署。有开源社区经验的 Evan Shelhamer 主导和各方进行合作;Jeff Donahue 帮助 Pinterest 建立了一个深度学习系统;Jonathan Long 给 Caffe 提供了包括 Python 接口在内的诸多新特性……在社区建设上,由 GitHub 和 caffe-users 邮件组一起组成了松散、自由的组织,依靠 Caffe 的使用者们自发管理。
做 Caffe,贾扬清经历了从 0~1 的完整项目经验积累,“Caffe 应该算是我第一个 C++ 的项目。”整体上“对我的锻炼很大,从组团开发、到如何推广、如何获取反馈、如何改进流程,我亲历了每个环节。”离开伯克利的第二年 5 月,贾扬清才终于完成了博士毕业论文。
1984 年,贾扬清生在绍兴上虞县。父母都是中学语文老师。1 岁时,贾扬清最爱听故事,妈妈常拿着图画书给他讲故事。3 岁时,贾扬清已识两三百个字,常常捧着一本书,读得入迷。5 岁,父母带他去新华书店,贾扬清挑了《安徒生童话》,妈妈惊讶地问:书里的字,你能看懂吗?贾扬清点了点头。
贾扬清一家人住在校园,安宁平静,生活规律。6 点,父母起床,去守早自习,贾扬清也跟着起来了。小学六年级,贾扬清从父母所在的学校插班到上虞市中心学校,新环境,贾扬清感到好奇之余也有点自卑感,他更加努力学习,想通过成绩来证明自己。中考,贾扬清以上虞区第三名的成绩考进春晖中学。
初二,流行学计算机,尽管学校有机房,贾扬清父母还是花 7000 多元,给他买了台奔腾Ⅱ。贾扬清凭感觉在机器上捣鼓,试装各种软件、玩扫雷游戏……有一次,贾扬清去同学家玩,看到同学用鼠标在计算机屏幕上的图形界面上点来点去,并向他演示自己在学编程,贾扬清觉得好玩。回家后,他摸索着用 BASIC 写出一个小程序──在方框里输入一个年份数字,屏幕上显示出年份所对应的生肖。
计算机让贾扬清觉得“可以创造出一个新东西。”“很开心。”但贾扬清听父母话,为高考的目标,仍把精力放在学习上。初中,语文老师教同学们写文学评论,贾扬清把《论<西厢记>里诗歌的描写和艺术》当选题,老师很诧异,跟贾扬清的妈妈说:让孩子看《西厢记》是否太早了?妈妈则说“看吧,没关系。”父母教语文,贾扬清家里文学类书多,他常随意从父母的书架上抽出一本书,翻看。拿下一本钱钟书的《谈艺录》,翻了翻,当然“看不懂,又放了回去。”贾扬清看《西方文学史》《荷马史诗》,感觉“外面的世界和我生活的小城是不一样的。”贾扬清看《十四行诗》发现,西方的诗歌讲究韵脚,类似中国古代诗歌平仄。“居然可以相互印证,很有意思……”贾扬清一直对文学感兴趣,但他选了理科。“比起文科,理科可以靠自己的努力,走得更远一点。”又或许,受当时人人都说“学好数理化,走遍天下都不怕”的大环境影响。
高中,贾扬清拿到了全国物理和化学竞赛两个一等奖,英语也获得了综合能力二等奖。数学不突出,父母给他买了“洪恩在线”光盘,大量刷题。“不会做的题,也会买一整本练习题来做,直到熟悉运用为止。”贾扬清数学成绩逐渐好起来,获得了全国数学联赛二等奖。
2002 年,高考,物理试卷的最后一题,贾扬清失误了,痛失 27 分!结果,考了 686 分。贾扬清心之所向是清华计算机系,在跟清华招生办老师讨论后,稳妥起见,第一志愿上,填写了“清华大学自动化系”。当贾扬清打开通知书,看到封面写着“清华是你一生的骄傲”这句话时,很开心。
清华图书馆早上 8 点开门,7 点多,贾扬清已和几位要好的同学站在门前排队等待自习。班里 27 个同学,贾扬清成绩很快又排到了前几名。本科四年,除了学习,贾扬清的生活还是学习。课余,贾扬清把微积分当作研究课题,做《吉米多维奇数学分析习题集》。
清华信息学院由自动化系、计算机系和电子系组成,三个系所学基础科目相同,计算机系偏理论和软件。“自动化系本质上就干两件事——烧锅炉和开电梯。烧锅炉,要让温度迅速升高,到达一定高温后,要让温度维持稳定,这就是控制理论要解决的问题。开电梯也同理。”
⼤三,贾扬清选修了张长⽔教授的《模式识别和智能系统》课,贾扬清忽然意识到,人工智能最让他着迷的是——从固有经验里突破出去,为可能性去探路。“这就有事儿可以干了!”而且“人工智能的算法,我们只能说以多少正确率、大概去做某些东西的识别,很多问题既无知也无解。”贾扬清对“机器学习”产生了浓厚的兴趣。“让机器自动帮人做事,把人从低级、重复的劳动中解放出来,是一件有趣、有意义的事。”论⽂阅读课,贾扬清找到《科学》杂志(Science),朗读了 Geoffrey Hinton 的《基于神经网络的数据降维》(Reducing the Dimensionality of Data with Neural Networks)文章。课后,贾扬清找“神经⽹络”相关的资料,自学,他去了解“玻尔兹曼机”等概念……尽管当时,在人工智能领域,“神经⽹络”处在低潮期。
毕业前夕,贾扬清凭兴趣做了一个课程设计——在交通拥挤的情况下识别单辆汽车。若能识别出有多少辆单辆汽车,便能判定当前路段的拥堵情况。贾扬清和同学们站在四环路上的每一个天桥上,用相机拍了许多经过桥下车辆的照片,手工在照片上做标识。“当时还没深度学习,我用了计算机视觉的经典方法,看识别车辆能到什么程度。”“我觉得这个问题好玩,有挑战,就去探索,也不是上来就能解决掉,若是已经有一个正确方法,就没意思了。”
2006 年 7 月,“好学生”贾扬清本科毕业,免试升入本校读硕士研究生。贾扬清跟随张长⽔教授,攻读模式识别和智能系统专业,正式走上人工智能研究之路。
2008 年 7 月,芝加哥,计算机国际学术会议。天气炎热,穿短袖的贾扬清,被会议厅巨冷的空调吹得瑟瑟发抖。贾扬清心里也忐忑不安,他要反复上台,用英文讲 5 篇国际论文,其中 4 篇都是他陌生的领域,而台下都是来自世界各地的专业人士。
实验室 5 位同学论文入围,但只有贾扬清拿到了美国签证。无奈之下,贾扬清只好“依葫芦画瓢”代讲。导师鼓励他:“你放心,讲得烂,别人都不会记得,你没那么重要。放心讲就行了。”“搞砸了,人家记不住你;搞好了,人家会说,这个人还不错哦!” 学术会议上,欧美同行乐于主动展示自己的风气,对贾扬清冲击很大。国内实验室,大家普遍闷头做自己的科研,欧美人则非常希望自己的科研让更多人看见,他们主动找人攀谈,在讲台旁边支起易拉宝,努力宣传自己的项目。他们讲起自己正做的事,便眉飞色舞,眼里放光,浑身洋溢着自豪感。贾扬清被深深感染。“我学会了跟别人沟通自己做科研背后的想法。当时,我们普遍欠缺这种能力。”
2009 年夏天,25 岁的贾扬清从清华研究生毕业,一口气申请了十几所国外大学的博士生,其中加州大学伯克利分校计算机系提供全奖,学校在加州也甚合贾扬清的心意。那时,人工智能的研究处于摸索场景应用的初级阶段,语音识别、机器翻译、物体识别……就业方向局限在算法领域,从事数据科学家、数据挖掘等工作,还未单独成为招聘门类。
伯克利研讨会上,一位大厂同行主动找到贾扬清说:“我们很喜欢 Caffe。代码里,居然有单元测试!很多时候,搞科研的人写出来的代码真是没法看啊,但你们写的还不错!”这得益于贾扬清在 Google 实习,学写代码时养成了好习惯。
每年的 5 月下旬到 8 月,伯克利放暑假,学生们为培养工业实践经验,多数都会去大厂实习。2011 年,夏天,贾扬清在 NEC 实验室实习,第⼀次接触到稀疏编码(Sparse Coding),贾扬清做了⼀个⾃动学习每个特征的感知域算法,在 CIFAR 数据集上获得了当时最好的准确率。
博士二年级暑假,Google 邀请贾扬清到公司面试,随即便留下实习。Google 的实习,分产品工程和研究院两个方向。贾扬清在研究院,导师是华人韩玫(现任平安科技硅谷研究院院长)。贾扬清做图像识别和视觉图像上视频理解的研究,和图像搜索的团队一起,做精准识别模型,致力提升识别的正确率。后来,他所参与的工作,被集成到 Google Photos 的个人相册里。
置身 Google,贾扬清感受到,几万名工程师分布式协同工作的极致高效。Google 的工程实践流程体系健全,写代码的过程用规范固定下来:要求写程序时,要把单元测试方式写到旁边,方便他人修改后测试;要求用标准的格式写文档。短时间内,贾扬清写代码的能力,被迅速提升。“这一方面,得益于我从众多开源软件中学习;另一方面,我觉得好奇心是衡量学习的普世标准。看到好的代码,自己动手试一试,多写几次,不断改进。”“每个人都有好奇心,就像儿童敢吃任何东西,是因为儿童没有吃的经验,尝试吃新东西的边际收益大,世界真美味的欢乐大于偶尔吃到泥巴的苦。”“上了年纪,可借鉴的经验数据越来越多,就需要用哲学代替经济学,用信仰强行将自己置于探索行动中,而非总是科学理性地在经验中深度学习,选优。”
在 Google 实习,贾扬清“一边学东西,一边改善生活”。Google 食堂饭菜丰盛,有款名为“十磅”的甜点小蛋糕,寓意在 Google 待上一年,体重会涨 10 斤!贾扬清用 Google 的实习工资,换了一辆新车。在 Google 养成的良好工作习惯留痕在 Caffe 的代码里。
2013 年,贾扬清从伯克利毕业,获计算机博士学位。
贾扬清到西班牙开会,患重感冒,深夜去药店买药,不懂西班牙语,打开 Google 翻译的照相机翻译,顺着货架一排排扫描过去,居然找到了布洛芬。
紧急情况下,用自己开发的功能,解决了问题,“感觉很奇妙”。Google 收购而来的 OCR 算法本来较简单,无法识别复杂的字体和文字,在云上识别,速度慢,贾扬清和作者一起,第一次将深度学习 OCR 模型做到了手机上。
2013 年,贾扬清入职 Google Brain(2023 年 4 月,Google Brain 与 DeepMind 合并为 Google DeepMind),两年后,贾扬清成为 TensorFlow 的创始团队一员。“TensorFlow 第⼀代框架的作者大多还在 Google,二代框架做得深入又完备。被 Google 的产品广泛采用。”TensorFlow 被 Google 公司开源,一度成为 GitHub 上 Star 数超高的项目。在 Google,贾扬清找到了个人的”比较“优势。“我先从 AI 的科研开始,和科学家们有共同语言;做工程,工程师们觉得我写代码不错。”“我能够让两边沟通协作。”
2016 年,贾扬清加入 Facebook 公司(现 Meta)。Facebook 需要搭建一个支持广告、Feed、搜索推荐、图像识别、自然语言处理、混合现实等所有产品的 AI 底座平台。贾扬清的 4 人团队,小而高效。在 Caffe 的基础上,开发 Caffe2。Caffe2 发布时,“增强现实和虚拟现实”突然流行,Caffe2 仅用了 2 个月的时间就嵌入了手机端。扎克伯格非常开心,亲自发了条动态,官宣了艺术家风格转换功能(见图 3)。这是深度学习⽹络首次在超过 10 亿台手机应用。
图 3 扎克伯格亲自官宣艺术家风格转换的功能
就在贾扬清做 Caffe2 的同时,纽约的 Facebook 人工智能研究院主导的 PyTorch 获得成功。2018 年,在贾扬清的主导下,Caffe2 的后端、PyTorch 的前端、ONNX 的标准合成⼀个完整的框架,命名为 PyTorch1.0。“如果说 TensorFlow 像一个庞大又复杂的联合收割机,PyTorch 则更像是一辆灵活又便捷的单车。”
刘韧:机器翻译靠什么突破?
贾扬清:以往,机器翻译依赖建立语法规则实现,但两种语言间的句法差异巨大,很难用手写的方式,穷尽定义语法规则。现在,用神经网络,再借助互联网收集数据,训练神经网络,逐步优化、提升其精准度。
刘韧:规则方式和神经网络方式,不同在哪?
贾扬清:程序员写规则,就会陷入到无尽的规则中,进入规则沼泽,例外之外还有例外,是一个无穷尽的问题。用神经网络,用模糊的方式模糊地解决问题,再通过数据训练逐步提高预测准确率。
刘韧:深度学习和强化深度学习有什么不同?
贾扬清:强化深度学习意思是,如何把将来获得的收益或惩罚回归到现在。
刘韧:人工智能会在哪个方向上和人争工作?
贾扬清:简单重复的人类劳动被替换是个好事,人解放出来的时间,可以想更多的可能性。达芬奇有幅非常著名的画叫《岩间圣母》(Virgin of the Rocks),圣母的主体是达芬奇画的,背景的花草石头是达芬奇的助手画的,达芬奇也需要助手。今天很多画家,他画主体,再找助手把背景填上去。他也可以让 AI 来填背景。就像达·芬奇的助手一样,AI 能提升画家的效率。
刘韧:中美的技术差距体现在哪方面?
贾扬清:好奇心。我们最优秀的人才在追求执行力,解决具体问题。欧美人更喜欢搞新东西。不得不承认,美国人已经解决温饱很长时间,因此他们玩得更多,玩得多,总能玩出一些新东西。我们在很多方面要追,这事急不来。
关于《开源英雄》
《开源英雄》是由 CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛发起,中国著名 IT 记者、DoNews 创始人刘韧领衔,CSDN、《新程序员》联合出品的专访栏目。通过开源开放的 CSDN 写作班,深入访谈全球顶尖开源人物,为广大开发者传递更多、更高质量的信息,透过他们的人生及成长寻找共鸣、共舞开源世界。
自栏目推出至今,我们专访了 Vue 作者尤雨溪、LVS 创始人章文嵩、Linux 内核守护者吴峰光、中国 Linux 第一人宫敏、小米开源奠基者崔宝秋、Caffe 作者贾扬清,如果你有想让我们报道的开源人物,欢迎在 GitCode 上提交 Issues 或 PR。
地址:https://gitcode.net/programmer_editor/Open-Source-Heroes
推荐阅读: