不知道大家看没看《冰雪奇缘2》,反正我看完之后的感觉,就是看两个公主玩了一百分钟的塞尔达...没有任何别的想法...
但有一位清华姚班毕业的大佬——胡渊鸣,在看完之后,试着用99行代码实现了冰雪奇缘里的特效场景:
是不是很炫酷?
代码虽然很短,但背后的故事却很长。今天我们就来看一下,这99行代码背后,横跨了20多年的故事。
胡渊鸣其人
胡渊鸣是一个不折不扣的少年天才,读高一的时候就已经被保送了清华。
胡渊鸣第一次尝试编程,大概是小学三年级。当时他的一个堂姐喜欢在家玩《仙剑奇侠传》,觉得特别有意思。当时他就想,也要做出一个这样的游戏来。然后就开始有意识地接触这方面的书籍。刚好他的父亲就是大学信息学教师,帮我买了不少计算机方面的书。
小时候他的父母经常要上课,就把年幼的小胡一个人放在大学研究生工作室里,里面都是计算机,一放就是大半天,他就跟着那些研究生一起,看着他们写程序,一开始看不懂,就是玩。
至于快不快乐,他自己也说不上来。
年胡渊鸣保送进入清华姚班。本科期间,胡渊鸣先后前往东京大学、斯坦福大学访学,并曾于微软亚洲研究院实习,从事深度学习和计算机图形学研究。本科便有多篇论文中选CVPR、SIGGRAPH等国际顶会。
年,胡渊鸣进入MIT读博。入学13个月后,完成硕士论文ChainQueen,拿到MIT硕士学位。博一期间,共发表6篇顶会论文。
技术向:99行代码的《冰雪奇缘》
做CG特效一直都是一个烧钱的事情,不然我们看动画片时也不会总是刷“五毛特效”、“经费在燃烧”这些关键词。
背后的原因一是门槛高,二是对性能有着极高的要求。自己渲染过视频的人都知道,随便一个小视频,哪怕是高配笔记本也要渲染半天。
然而,胡渊鸣开发的这种新的CG特效编程语言Taichi(太极),大大降低了门槛。就像开头我们提到的,在我们的笔记本上,仅需几分钟就能渲染完成一个简单的物理场景。
Taichi中的可微分编程,可以通过蛮力的梯度下降有效地优化神经网络控制器,而不必使用强化学习。10种可微分模拟器中的大多数模型可以在2-3小时内实现,而且大部分不需要GPU。这些示例中,弹性体、刚体、流体、光线的折射、弹性碰撞,常见物理环境应有尽有。
虽然语法看起来是Python,其计算部分却会被一整套编译系统接管,最后输出可执行的x86_64或者PTXinstructions,能够在CPU/GPU上高效运行。
这么说大家可能对这个项目的优秀程度没概念,作者的论文里帮我们做一个比较:借助Taichi的渲染速度,比TensorFlow快多倍、比PyTorch快10倍。
代码背后的故事
据胡渊鸣说,他是为了解决计算机图形学研究对性能的追求以及生产力低下的问题,才决定重新设计编程语言。
本来胡渊鸣想把Taichi做成一种单独的编程语言,但是为了方便大家使用,他用了一句importtaichiasti把Taichi语言假装成了Python。这样做不仅能使用很多现成的PythonIDE,与Numpy、MatPlotlib等工具库无缝衔接,还降低了学习的门槛。
在他的概念里,计算机图形学,和其他科学一样,应该把简单性作为追求之一。就像如果MLS-MPM不能被88行代码实现,求它的导数可能也就不能“只”用个公式完成,可能也就不会有ChainQueen(可微物理引擎),更不会有ChainQueen启发的工作(比如DiffTaichi)。
而化繁为简本身就是科研的意义之一。
但做这件事对胡渊鸣来说,也是一个大胆的决定,因为虽然他之前花了很多时间做low-levelperformanceengineering,但是真动手写个编译器还从没干过。
从年1月起,他便一直在做Taichiprogramminglanguage,这个结果最终发表在SIGGRAPHAsia上。
毫无疑问,Taichi编程语言的工作量是非常大的。这是一个全新的系统,项目早期要做的设计决策非常多。这给他带来一正一反两个结果:
1.设计决策可以只在脑子里进行,而不需要盯着屏幕。这意味着这个项目总体还是比较“健康”的:代码写累了就可以闭眼甚至躺床上想想别的地方怎么设计。
据胡渊鸣在知乎里说的,Taichiprogramminglanguage的1/3是在床上、公交车上完成的。这样的时间分配一定程度上避免了Taichi编译器的开发损伤他的颈椎和视力。
2.早期设计决策需要随机应变,决策的交流是非常低效的。人与人之间同语言交流的带宽比脑内带宽低好几个数量级,就像networkbandwidth和L1-d$bandwidth的差异一样,于是他只好一路从底层的代码生成(codegen),到中间表示(IR)和优化(opt),到前端语法,最后到图标设计,都自己干了。
但面对这么大的工作量,有时会“累觉不爱”,但胡渊鸣只要睡一觉起来之后就又会重燃斗志。这可能就是我们和大之间的差距了——我睡一觉之后,只想再睡个回笼觉...
我们只看到了牛逼闪闪的结果,但背后的艰辛可能只有这些所谓的“天才”自己才知道了。
据胡渊鸣自己说,他有一次连续在家写了5天代码没出门,学长都说他身上“长蘑菇”了。
彩蛋花絮
再牛的人,也逃不过真香定律。不知道胡渊鸣还记不记得高一参加完竞赛后扬州晚报对他的采访:
扬州晚报记者:对自己的未来有什么想法?大学会学什么专业?胡渊鸣:我父母和我交流过,大学肯定会学计算机相关专业。摆在我面前的其实有两条路,要么做研究,要么做管理。虽然我对编程感兴趣,但我不甘心一辈子就做一个程序员,包括想在做班长的经理,其实还是想做管理。不过现在当务之急还是把眼前的事情做好。
不知道胡渊鸣老师在体验到技术的「创世」魅力后,现在还这么想么?
胡渊鸣知乎原文: