1. 框架选择开发AI的第一步,是选择合适的开发框架。所谓框架(Framework),是指整个或部分系统的可重用设计。好比别人搭好了舞台,而我们只用关注节目本身。有无框架,做起事情来完全是两个概念。在编程领域,有一句广为流传的名言:“不要重复发明轮子(Reinventing the wheel)”。这句话的意思是,如果某个领域已经有成熟的解决方案了,那么除非特殊情况(知识产权、KPI、学习研究等等),我们不妨在别人已经搭好的框架上创作内容。众所周知,编程领域是一个节奏极快,竞争极其激烈的领域。当你在重新发明轮子的时候,别人可能已经用现有的轮子造出跑车了。对于AI开发而言,现在也有了一系列开发框架可供选择,它们来自学者、巨头厂商和开源社区。比方说最著名的几种:Google的TensorFlow、微软的CNTK、加州大学伯克利分校研发的Caffe,Facebook的PyTorch和Caffe2、Skymind公司维护的Deeplearning4j等等。有成熟的框架是一件造福大众的好事儿,但问题来了:众多框架纷繁复杂,你该如何选择?这些框架支持的语言不同,它们的速度也不同,可拓展性和易用性也不同。目前,关于各种框架的对比在维基百科上居然有了专属的页面,与之相关的文章更是可以搜出一大筐。如此琳琅满目的轮子,你选哪一家?
3. 训练场地选好了合适的开发框架,完成了环境部署,还剩下最重要的一环就是AI的训练。无论是微软的小冰,还是苹果的Siri,程序员往往喜欢给AI起一个名字。这种明显的拟人化特征并不完全是一种商业需要,还由于AI的开发过程和训练一个人类的过程极其相似。你需要提供合适的场地(计算平台)、充足的食物(数据),在亿万次的试错、修正之后,才会有真正有价值的AI。而这个过程中,最显著的特征便是:“计算密集型”。这种密集包括数据和算力两个层面。首先是数据。AI需要庞大的数据作为支撑,特别是自然语言处理、图像识别等领域,一个拥有充足数据量的资料库是AI训练的基础。然而这样的数据库可能未必有现成的,即使有,也需要根据自己的需求对数据进行整理,俗称“数据清洗”。例如微软的小冰,其研发团队大概花了三个月左右时间来补充小冰的整个语料库——差不多几亿条。早在十几年前,Google为了提升自己的验证码识别技术,就从全球各地截取了无数的街道路牌和门牌号码,用于建立自己的训练库。而DeepMind在训练初代“AlphaGo”的时候,也用了几千盘人类棋手的对局棋谱。数据好比AI的食物,在某种层面上,“You are what you eat”这句话对AI来说同样成立。其次要考虑算力。算法决定了AI的上限,但算力决定了AI能不能达到上限。AI对于算力的需求不仅巨大,而且增速极猛。OpenAI 今年5月发表的文章表明,自2012年以来,AI训练任务中使用的算力以指数形式增长,其目前速度为每3.5个月翻一番(相比之下,摩尔定律都还要18个月才翻一番)。并且自2012年以来,这一需求增长了超过300,000倍。对于AI开发者而言,数据和算力,则是两件不仅头痛(麻烦)、而且肉痛(昂贵)的事情。综上所述,假设我们都是替父编程的花木兰,那么,在框架选择时,我们就会被劝退一批(所以什么是最好的语言?手动doge);到了环境部署,又会难倒一批(我曾经以为游戏开发是一件很爽的事情,直到我发现测试小姐姐要买多少台手机,你们可以了解一下);等到最后的训练场地,基本上对于我这种穷人来说,就只能打出GG了。