X君和T君关于通用学习机的对话-1

夕阳无限好

X君和T君是老朋友。X君是数学家,对通用学习机比较有心得。T君是物理学家,资深程序员,软件专家。一天,他们在纽约城里面碰到,就在一家咖啡馆坐下聊天。在一些有趣的话题后,自然就转到了谈通用学习机。

T:我看到了微信上面的通用学习机的介绍。我知道你比较早就参加了这个项目,你给我讲讲吧,从技术上。

X:很好啊。不过千头万绪,怎么讲起呢?你是极为资深的软件专家,不过你也不熟悉通用学习机。你看这样可好,由你来提问,我来回答,看看怎么用比较简明的话把事情说清楚。

T:好。就这样。怎么开头呢?通用学习机肯定和深度学习有很多不同。要不然,你从两者的区别说起吧?

X:两者当然很不一样。但是,又都是机器学习,而且两者的一些方面又很接近。干脆这样,我来先说说两者的共同之处。首先,两者都是一种机器学习。什么是机器学习呢?你知道,计算机本身做不成任何事情,必须要有软件,软件赋予了计算机能力。对吧?

T:那当然,这是常识。

X:那我就问你这个专家一个问题,软件是怎么来的?

T:······,唔唔,你这是什么意思嘛,软件当然是编程得到的啊。喔,你是说商用软件,买的?

X:你是专家,当然是对的,软件的确是编程来的。但是,现在开始发生变化,软件可以通过学习而得到,而不必通过编程而得到。比如说,以前Bell Lab用人工编写的语言处理软件,和现在通过深度学习而获得的语言处理软件,都是软件,但是后者不是人工编程来的,而是学习来的,而且后者比前者要强大太多。这就是变化。

T:你说的这个我知道一些,AlphaGo也是这样的,对吗?

X:对的。这就是我要说的,计算机的能力是我们赋予的,以前是用编程来赋予,但是,现在要用学习来赋予了。深度学习和通用学习机在这点上是相同的,都是通过学习来赋予计算机能力。

T:这个理解,没有问题。但是你这就把很多所谓人工智能的神话平凡化了,嘿嘿,谨防有人骂你,哈哈哈。唔,两者的不同呢?顾名思义,是通用学习机要好一些,是通用的?

X:的确如此。我就简而言之吧:通用学习机可以学任何东西,而深度学习只能学程序员预设好的东西。虽然这个话不是很精准,但是,基本上是对的。

T:这样讲,就很清楚。我听懂了,其他的人大概都可以听懂。但是,这是最表层说明,我们还是应该深入到技术细节。我想比较明确了解,究竟学习在做什么。啊哈,我来说一个题目,你来告诉我机器怎么学习,好不好?

X:可以。

T:好。我想想,······,这样吧,我要你的计算机做这样的事情:我给一张bitmap的图,100x100的bitmap,图上面有一条曲线,你的计算机要给出这个曲线的方程,近似的方程。

X:好,我们看,······

T:不不,这个大概复杂了一些,我们来个简单一些的:我的bitmap的图上,有两个圆,你的计算机要告诉我圆的半径。可以吗?怎么做?不不,我们干脆再简单一些,我的bitmap的图上,有两个黑斑,你的计算机要告诉我哪个斑大,哪个斑小。这样可以吗?怎么做?

X:太好了,你的这个问题很好。我们就讨论它。我们刚才讲了,要计算机能做这个事情,就需要用软件来赋予计算机这个能力,而赋予能力,有两条路,一条是编程,一条是学习。我们先来看编程怎么办。

T:好吧。

X:要编程写软件,你是专家,套路是清楚的。我先要做一个数学模型,即通过什么方法来决定黑斑的大小。这个数学模型,可以是几何的,或者统计的,或者其他意想不到的,总之要有一个模型。然后,我把这个模型编程,再用一些例子来调试。最后,这就是这个软件。

T:的确是这个套路。差不多的软件都是这个套路。不过多数的程序员,仅仅在某个片段上做,只能看到小片段,看不到全貌。而且一些问题太复杂,这个套路要走很长时间。例如Bell Lab的语音软件,做了几十年。其实,就是这两个黑斑的例子,看似简单,也不容易,什么数学模型可以包括所有的黑斑?各种奇奇怪怪的组合,不容易啊。

X:是的。这个套路,并不容易,因此,软件成本很高嘛。这是编程的套路,那么学习的套路是什么呢?要学习,并不能凭空学习。我们必须要有一个程序,而且还要有一些先验知识。

T:停,先验知识?听起来好像很哲学嘛。

X:是的,就是先验知识。到了机器学习这个阶段,哲学很重要的。

T:什么是圆,什么是大小,这样的知识?

X:还不是,其实用先验结构这个词恐怕更好一些。注意了,我说,先有一个程序,这个程序可以处理输入的bitmap,而且,可以根据输入的数据,来修改自己的这个处理程序,怎么样修改就是先验知识(或者先验结构)。

T:等等,让我仔细想想。······ 好,我比较清楚了,就是说,学习就是有一个程序,这个程序可以根据输入的数据修改自己,而指导如何修改的,就是先验知识。

X:很对,很对。希望我的其他听众也能有你这样的清晰认识就好了。有了这个学习的基础,下面就是学习了。就是说,输入数据,对我们这个情况,就是输入很多bitmap进去。然后,慢慢的,我们的这个程序,就开始能够区分两个黑斑,如果再一些外界的指导,如告诉它,对还是不对,慢慢的,这个程序,就可以开始告诉哪个大,哪个小。可能还有些错。但是,会学习得比较快。当学习到一定程度后,我们可以停止学习,那么这个时候,那个程序就是我们要的软件了。

T:喔。······· 这样的确是和编程完全不同的套路。这个套路,如果搞得好,可以极大简化软件开发,也可以极大提高软件的能力。

X:是的。没有这个套路,人工是编不出来横扫人类棋手的围棋程序的。唔,一直到这里,我们都是说的通用学习机和深度学习相同的东西,还没有说不同的东西。

T:是的,不同在哪里?听你这样讲,我都有些跃跃欲试了。

X:在咖啡馆,详细说是不可能的。我就简单说两点。其一,通用学习机有一个清晰的表征空间,即怎么在内部表达输入的bitmap,而深度学习并没有一个清晰的表征空间。其二,通用学习机的先验知识可以有很多层次,从最笨的到比较聪明的,都可以有,而深度学习的先验知识几乎为零,仅能根据误差梯度来调节,而且究竟调节什么也不清楚。有了这样的区别,通用学习机就可以更高效地学习。

T:很好。我比较清楚了。看来我要去用Tensorflow来做做这个问题,hands on。看来有意思。

X:那是。等我们的通用学习机做出了雏形,也请你来使用。可以明确讲,我们的通用学习机,比Tensorflow需要的资源少很多很多倍,你用你的Apple就可以了,不需要用服务器。

T:不用这么急,我们还没有讲到学习的细节。你继续讲。

X:好,······

这时T君的电话响起,T君接电话。接完后,看一下时间,苦笑说:“小孩的学校有电话来,必须要赶回去,10分种后Penn Station的火车,我现在必须走了”。

X:没有问题。我们下次再谈技术细节。