本来想写“为什么选择深度学习”。
向同事推荐Edward,这个工具建在Tensorflow之上,Tensorflow又和深度学习有些关联,同事问:“其他更简单的工具一样解决问题,为什么用这么复杂的工具?”。
或者就写"为什么选择Edward"。
今年年初,哥伦比亚大学、Adobe Research、Google 联合发表了 “DEEP PROBABILISTIC PROGRAMMING”,深度概率编程,即Edward。
国内媒体机器之心很快翻译了这篇文章。
实际上,我在去年就开始试用Edward,至于为什么会使用Edward,现在梳理一下,是很有意思的事情。说起来有点长。首先,从“DEEP PROBABILISTIC PROGRAMMING” 第六作者David M.Blei 讲起。
我电脑上也有个文件夹叫 David M.Blei ,我已经不记得在什么样的情况下建这个文件夹,查了下维基百科,David M.Blei 是LDA(Latent Dirichlet Allocation)最早期的开发者之一,2015年,为奖励其在概率话题模型和贝叶斯机器学习的理论和实践上的贡献,美国计算机协会授予其 ACM FOLLOW。全球有五百多位 ACM FOLLOW ,其中有二十位华人,去年南京大学周志华老师也获得了 ACM FOLLOW(以后再也不讨论周志华《机器学习》是不是本好书这个话题了)。讲这么多FOLLOW的事,是想说,在信息“爆棚”的今天,大家很容易忽略一篇文章某个角落里的一些关键信息,例如,如果我们意识到 David M.Blei 在学术和工业上的贡献,把新闻标题改为 “ LDA大佬携手谷歌推出深度概率编程,贝叶斯与频率学派再起军备竞赛 ”,好不好啊?
还是回到为什么使用Edward这条线上,“DEEP PROBABILISTIC PROGRAMMING” 的摘要上有一些线索。例如,“ Turing-complete " ,图灵完备,我和同事开玩笑时,会说:我这个方法是图灵完备的(潜台词是:别问为什么,我解释不清)。“ MCMC ”,马尔可夫链蒙特卡洛仿真,这是求贝叶斯后验概率分布的常用方法,我去年刚好用MCMC解决了某个问题(的一部分),有段时间我很想再拓展一下。“ 35X faster than Stan ",Stan是一个很好的概率编程语言,老板给我推荐的是 Winbugs,可是我觉着 Winbugs 2012年之后,就停止版本更新了,不放心就跳到了Stan,也许某个原因我又发现了 David M.Blei,而他的学生 Dustin Tran又恰好是Edward的主要开发者。
这大概解释了我为什么使用Edward的原因。我刚好用MCMC,需要有一定的拓展,于是找到了Stan,Stan作为一种贝叶斯编程语言,我一定会找到 David M.Blei,而我也一定会找到他学生主导的Edward。我那时选择Edward,很大原因是Stan的文档太厚了,我一时啃不下来,而Edward刚刚出来,要轻很多,就自然而然地选了Edward。不过,当我真想用Edward时,我又发现它太轻了,我还得回头啃Stan,多么痛的选择啊!
“ 35X faster than Stan ",这个要多说几句。在“DEEP PROBABILISTIC PROGRAMMING” 里,有下面这个比较。Stan用一个CPU算了171秒,Edward用GPU算了4.9秒,Edward比Stan快了35倍,一个用GPU算,一个用CPU算,这好比开汽车的甲和骑自行车的乙比赛,甲赢了,然后甲说:我比乙厉害。这么比好像不那么公平。不过,我又查了下Stan文档,发现Stan也是哥伦比亚大学开发的,而在开发者里有两个成员也是Edward的开发成员,就是“DEEP PROBABILISTIC PROGRAMMING” 的第一、第二作者,不过,最新一版Stan文档里,第二作者已经被“除名”了(也不能说除名,是退出)。挺好玩的一个细节。
其实,Edward和Stan,连起名字,都有一拼。Edward是为了纪念统计学家George Edward Pelham Box。这位老先生提出了统计建模的若干思想。
George Edward Pelham Box 老先生很有意思,他在1974年写了一篇纪念更有名统计学家R.A.Fisher的文章“Science and Statistics”(科学与统计学),下图是他在文章中的注释。大意就是作为获得Wisconsin大学统计系的R.A.Fisher教职的他,以及作为R.A.Fisher女婿的他,写了一篇纪念R.A.Fisher的文章。
至于Stan,我在 Stan 文档找到了这张图。Stan是为了纪念Stanislaw Ulam,他是第一颗原子弹“曼哈顿项目”的参与者,大家对原子弹争议很大,但曼哈顿项目确实聚集了当时最优秀的人才,我们现在所使用的很多技术都是源于这个项目,例如仿真技术、计算机等。
总之,哥大在给编程语言起名字上要更加传统、更加人性化。很多计算机语言,例如python,是蟒蛇的意思,hadoop是小孩给玩具起的名字,很难看到知识的传承。(码农可能会奋起反击我)。
我解释了我为什么选择Edward的原因,以及Edward和Stan的八卦。但是我仍然没有从我同事的角度解释为什么选择Edward?贝叶斯和频率主义的学派竞争有意义吗?我用频率主义的那些机器学习算法好好的,干嘛改换们庭呢?
我好像都回答不了这些问题。毕竟贝叶斯和频率主义的竞争存在一百年了,很多频率主义机器学习算法主导着工业界的应用,大多数人习惯了这些算法,并习惯了这些算法所产生的应用。
先不解释了。留给下集吧。本质上我当然赞同我同事的看法:能用简单方法实现的问题,绝对不要复杂化。
贴一张从Edward文档的图。大家都很熟悉的图,学校或补习班贴过无数的图,里面有分类、回归、聚类、降维、模型选择、处理等。加了一句话后,就变成贝叶斯的呐喊了:这是机器学习正确的抽象组织吗?
说一些题外话。关于选择和被选择,看似是无限的选择,其实又是尴尬的有限的选择(人话就是没得选)。家人有天突然劝我:“你。。。能不能找份安稳的工作?”,倘若我处在清醒状态的时候,我一定会说:“一定要对我有信心,你知道嘛,就要到达光明顶了!”,可是当我饮完一瓶啤酒(酒量不行)之后,恍惚之间,眼前无数武林豪杰,加无数马仔,厮杀于山脚之间,那光明顶岂是那厢容易去的地方,然后我看到其中一名马仔就是我。
可能这就是王小波小说中有关“荒谬”的意思,荒谬代表了真实。同时代的人,他们不承认他们之间所产生的荒谬,例如,从我们这个时代看王小波所描述的时代,我们觉着他那个时代是荒谬的,在黑板上贴大字报,一层层贴,帖的人之间产生了纠纷,结果把人打红肿了,被打红肿的人居然认为被打的原因是印度同学对他的诅咒。可是,我们这个时代就不荒谬了吗?例如,很多人在没日没夜的造着机器学习的马甲,这些马甲和大字报应该都差不多吧。这些马甲也会起纷争,也会被打红肿。
娃下去买冰淇淋,回来给我一包辣条,说:“你写东西这么辛苦,我带给你你最爱吃的辣条”。我心里想我什么时候说过我最爱吃辣条了。
娃转身走时,甩给我一句话:记得还我辣条的钱,四块五。
好吧,你赢了!