看起来,不仅人类经验已成废柴,连我们膜拜的大数据也将一无是处?正好相反,Alpha Zero的胜利,恰恰说明了数据在AI领域的唯一神性。现在,请把所有异端踩在脚下,来跟我一起念:
万物非主,唯有数据;
深度学习,数据使者!
什么是数据?其实就是一个二元组(x, y):其中x是一次观测值,也就是“看到了什么”;而y是观测的标签,也就是“看到的是什么”。这两个要素,凑在一起才叫一条数据,缺一不可。举个例子,在语音识别中,x就是一段声音信号,y就是对应的文本;而在人脸识别中,x就是一副图片,y就是这个人的编号。
人们对数据唯一神性的认识,并非一帆风顺。在原始AI时代,由于计算能力的限制,纵有数据也无法处理,于是多神崇拜盛行:有人信算法,有人信专家,有人信穷举,也有人只信人品。直到本世纪,采用GPU的深度学习方案实用以后,我们才恍然大悟:原来数据里蕴藏着那么多的宝藏,只是过去我们无力挖掘罢了。现在看来,有充足(x, y)这样的数据是AI必要的物质基础。既然数据如此关键,聪明人肯定会问——能不能自动获得数据呢?对此,Alpha Zero给了我们一个并不意外的漂亮答案。
在围棋问题里,x是某局棋,而y就是这局棋的输赢。由于围棋的规则确定,任给一个x很容易算出y,于是机器就可以自动生产数据了。这揭示了无监督训练的一个本质要求:由观察x能够显著降低y的不确定性。对于围棋,x定了y也就定了,这简直太美妙了,三千万棋谱又算什么?我这儿要多少给你编多少!
自动生成的棋谱当然还得靠谱才行。就算你算力超过奥特曼,可是天天冥思苦想下图《环珠格格》中紫薇下出的弱智局面,也不过是浪费电罢了。这提出了自动生成数据的另一个要求:生成的数据p(x)分布,要跟真实分布尽量接近。对此,Alpha Zero是否考虑了,怎么解决的,我还没有仔细研究过。
AlphaZero的胜利,一靠数据至上的信仰,二靠围棋自生数据的特点。不过,不要以为在其他领域,也会被这样的馅饼砸到,因为能自生数据的任务并不常见。那么,有没有可能通过方法上的改进,大幅降低对数据的依赖性呢?有可能。对比一下人与AI视觉,会发现两者对数据的利用效率大为不同:有宝宝的可以留意,他们在画上见过一张卡通长颈鹿,到了动物园就能认出真的长颈鹿;而目前的AI要认长颈鹿,怎么也得看个几万张高清无码长颈鹿写真才行。
其实,从动物到人的上亿年进化中,视觉系统不断地被外界景象所刺激,也就在不断吸收数据和加强能力。妙就妙在,人类的视觉能力一则可以遗传,二则可以在不同任务上复用。想想也是,辨别纹理、线条,与认长颈鹿还是河马并无关系。那一张卡通图片的作用,只是告诉小孩子怎么拼出轮廓罢了。
这与“强AI“可能有些关系:深度神经网络的下面若干层,往往表达的是类似“线条、纹理”这样的初级信息,与高级语义的关系较弱。如果我们能把这些初级单元复用起来,AI就能够充分利用类似任务的数据,而不是撂爪就忘。这样一来,缺少数据的问题就大大缓解了。
人类的感知系统还有另一点令人困惑:别忘了在进化过程中,从来没人告诉一只猴子,眼前的哪个物体是鳄鱼。也就是说,人类的感知进化很可能是无监督的,这给了我们无限的希望,也让我们后背发凉。
先不扯那么远,仅就目前的AI来看,判断某项工作是不是会被机器替代,有一个大前提,和一个小前提:大前提,是可以获得足够的有效数据(能自动生成数据则无敌),也就是说机器有快速进化的基础;小前提,是人本身的进化过程没有见过大量的数据,也就是说人的起点并不高。
速记、客服这些与语音视觉相关的工作,满足大前提,不满足小前提。AI从这里起兵却遭遇劲旅——人类的视听系统可是上亿年的数据喂出来的啊!反而是股票操盘手、互联网数据分析师这些工作,迟早是AI的菜,人类并无还手之力——不信去测测基因,您有祖上遗传下来的炒股本能么?
还有什么工作容易被AI颠覆呢?考虑到“自动生成数据”这个关键,我冥思苦想以后,无奈地告诉大家,还真没准是编程。
机器自动写代码并不是个新问题,这叫做“归纳程序综合”(Inductive Program Synthesis,IPS)。IPS问题可以描述为:给定一组<输入,输出>数据对,自动产生一段代码,将这些给定的输入转换为给定的输出。传统的IPS方法,有点类似只能在4路小棋盘上的暴力搜索;可实际的编程任务,好比是19路大棋盘上的对局,还得靠万物灵长的程序猿来人肉搞定。
可如今天下大变,机器在19路围棋上已经碾压人类,凭什么编程就不行呢?机器人下棋,靠的是统计的方法和大量数据;而机器人编程,当然也要用机器学习替代暴力搜索。这里的关键,还是数据从哪里来。在这点上,Alpha Zero给了我们极大的启发。
如果在某些问题中,编程需求可以像围棋规则那样形式化表达。此时,给定一种输入,输出很容易确定,这就可以自动生成大量的测试数据。有了这些数据,后面无非就是算法进化的问题了。
所以,真正的难点,还在那个形式化的需求表达。目前这离我们有多远,我也说不清。设想一下,应该是在不同领域各个突破,分别制定表达方案。不过,编程领域的基础准备相当充分:那个叫Gitbub的网站,将是机器颠覆人类程序猿的大本营!从Github上的海量项目出发,分领域定义需求表达模式的话,后面的数据生成和编程模型训练,其进展恐怕比我们想象得要快得多。
现有的码农工作流程,可以分为沟通、设计、实现、调试、测试这几个步骤。某典型程序员随着年资变化,这几个步骤的时间占比大致是上图的样子。如果形式化脚本+自动编程成为现实,上图中的实现、测试、调试逐步骤就可以交给机器了。而沟通这一步,也将大大简化。
由于可能自动地生成数据,机器人编程解决复杂的任务恐怕是迟早的事儿。到了那一天,程序猿就要大幅减少,产品狗势力会进一步扩张:就算是不懂什么堆排序、B+树、CNN,只要用脚本把需求表达出来,一样能做出产品。不过,那时对产品狗的要求可高多了,得有真正的逻辑提炼和任务分解能力,就会吵个架、抢个功是远远不够的。
“遍身绮罗者,不是养蚕人。”亲爱的程序猿们,不要天真地以为你们创造了未来,未来就属于你们。狡兔死,走狗烹未必是机器自发的愿望,无奈编程这样高度形式化、数据可自生的任务,可能正是AI铁蹄首先要踏过的沃土。除了少量的高端码皇,广大码农码畜们只有尽早皈依大数据教,向高级产品狗快速进化,才能避免被淘汰的命运。