机器的意识

机器学习当下是非常火热的课题,大量的模型被设计出来令人眼花缭乱。诸如SVM,随机森林,贝叶斯网络,神经网络只不过是这个领域的基础知识,在这些基础方法之上的各种优化分支方法更是数不胜数。大量的所谓机器学习的研究者,在某个问题上,通过对现有方法的小修小补,达到了一些微不足道的提升,或仅仅是对几种模型/优化方法/特征分析/问题领域进行一些常规的比较分析,便可以一本正经的发布一篇学术论文。为了这些方法应用到实际的工程中时,通常需要消耗大量的人力用于前期的数据分析和处理,这一过程被称为“特征工程”。对于此类人员的专业度要求非常高,需求量也非常大,因此这类人才的溢价也非常高,以致于一个刚刚毕业的研究生的薪酬可以轻松超越一个有多年经验的软件工程师。然而这类人力工作通常并没有太多的创新性可言。这是在当前的科技背景下产生的独特的现象——一大批资质平平的智力工作者受到了疯狂的追捧。这一现象必然在机器学习真正取得突破性进展后终结,本文将讨论突破性进展可能的方向。

科技发展有两种驱动力,其一是资本对于更高生产力的追求,其二是纯粹的为了智力上的满足感或是对于某种超自然信仰而展开的对于真理本质的追求。前者更长于将科学成果转化为实际应用,而后者才是实现技术爆炸的真正内核。机器学习领域也是如此,目前正处于科学成果转化的高峰期,是基于前些年的一些基础研究进行的转化。但也是瓶颈期,因为我们感受到了现有方法的局限。目前人们对于人工智能的态度行业内外的看法截然相反:业外的人大部分担心人工智能将超越、统治甚至毁灭人类,业内大部分则恰恰相反。因为专业人士更加清楚,现有方法大多是非常愚蠢的,所谓智能不过是一种魔术。你一定体验过魔术被揭秘的感觉,这就是我兴致勃勃的了解了许多机器学习方法后的感受。可以很负责任的说,我们距离人工智能的本质还差的很远很远。大部分的人醉心于如何更好的表演魔术,只有很少的人去追求真正的本质,而这些追求本质的方法如果在魔术表演上不够精彩,是很容易被忽视的。

人工智能概念最早由约翰·麦卡锡(John McCarthy,1927年9月4日-2011年10月24日)在1956年由他自己召集的达特矛斯会议上提出的:“人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样”。这是人工智能的早期定义,人们后来意识到这个定义忽略了强人工智能的可能性。所谓强人工智能是指机器拥有真正的智能而不仅仅是“看起来像”,与之相对的则被称为弱人工智能,而目前实现的都是弱人工智能。这引发了一系列的哲学问题——什么是智能?强人工智能是否有可能实现?强人工智能是不是人类的灾难?即便我们出于伦理和人类安全的考虑,不追求实现强人工智能,而只是追求弱人工智能的“看起来像”的目的,也不得不借鉴强人工智能的思路,也就不可避免的不断的朝着强人工智能方向前进。本文不讨论人工智能是否对人类构成威胁的问题,仅从方向和方法上讨论强人工智能的可行性。

人工智能本质上属于仿生学范畴的。智能本身就是很复杂的,而人类仅能认识到自己的智能,不可能理解龙虾或者外星人的智能。所以对人工智能本质的追求,应该是对人类自身深入认识的过程。并且这种认识不能仅仅停留于哲学解构的层面,必须通过工程手段加以重新建构,我们用哲学上和工程上都能理解的语言进行表达,而这种语言我们称之为模型。

人类智能可划分为一些层次,无意识的精神、意识、自我、逻辑、知识、表达、知觉、经验。这些划分并不存在清晰的界限。通过真正的智能与现有弱人工智能的比较,我们可以更好的理解这些概念。

当AlphaGo轻松打败人类棋手时,人类棋手感到压力、恐惧、伤心、绝望。我们为AlphaGo的棋艺感到惊叹,但事实上二者在智能上相比,人类棋手的情绪反应才是真正令人惊叹的。AlphaGo不会为胜利而感到骄傲,也不会为失败而羞耻,他不会为存在而感到快乐,也不会为消失感到痛苦。他甚至根本没有想要胜利的欲望,更不会有人类各种复杂的情感。这些就是无意识的精神,精神在不自觉的驱动着我们的意识,或纵情声色,或知耻而勇,或趋利避害,或舍生忘死。虽然我们看起来是由理智所控制的动物,但精神不受理智的控制。这点在恋爱中的人身上尤为明显,即便他们的理智告诉他们不要对另一方过于依恋,但他们却无法控制自己所思所想。对于音乐的感受也是类似的,不过是不同频率的声波的组合,竟能使人不由自主的感到快乐或悲伤,多么的神奇。生物学家认为,当多巴胺分泌增加时,人就会感到快乐。多巴胺是一种神经传导物质,这就像是给神经系统的奖励,以刺激我们更加努力的工作。但这并不能解释快乐的本质,我们可以想象我们给车添加了燃油和润滑油,这相当于是给了车奖励,但是车并不会感到快乐。我们在训练AlphaGo时,每次他获胜,我们也会给他一个反馈,告诉他这次做的结果不错,他就会更加靠近这个结果,但他并不会感到快乐。那么为什么多巴胺分泌增加人就会感到快乐呢?显然多巴胺不是快乐的本质,只是快乐的使者而已。

人类诸多行为有可能是后天习得的,但有些则是在被创造时就存在的。食欲、快乐、痛觉、饥饿感、自我、对母亲的依恋,这些都是与生俱来的。所以我们可以认为某种无意识的精神在母体中被创造时就存在了。但是从那一刻这种精神开始存在呢?我们很难想象单细胞状态的受精卵拥有这种精神。当基因代码一层层展开,从单细胞到多细胞,脊椎动物,鱼、两栖、哺乳类、灵长目、人科、智人属的基因片段开始逐步表达,胚胎的结构从简单到复杂,直到降生时我们依然没有发育完全,经历长时间的幼态持续,青春期,我们更多的情绪和欲望被展现出来。当我们回忆我们成长阶段的各种性格变化,这一切究竟是在哪一刻如何产生的呢?我们可以肯定这种精神不是来自于单一的细胞,而是来自大量脑细胞的集体创造。在我们大脑中有一个部分,是在基因中硬编码的部分,做出一些基本的身体机能感受判断、审美判断、情感判断。这部分不受理智控制的部分,我们称为精神。如果没有这种本能的精神,我们的智力也就没有了用武之地。我们可以设想任何的人工智能程序,必须拥有某个目标,这就是他的欲望,在欲望被满足时会得到某种激励。但人类的欲望是如此的不同,在欲望被满足时得到的奖励感受也是如此不同。他不是一个简单弱人工智能所能解释的,以梯度下降法举例:当错误率很高时,函数会修正自己的参数朝着错误率更低的方向前进一小步,直到错误率不再有明显下降。错误率最小是他的目标,但是这个函数是如此机械,我们不可能他是有精神的。

精神是目标,但目标不一定是精神,精神本身就是复杂的,是在长期进化中形成的一种复杂的多细胞集体创造。

人类的意识是一系列智能子系统的集合。佛教所谓六根即:眼耳鼻舌身意,意识是起到总控的作用。意识可以连接我们的视觉、听觉、触觉、味觉、嗅觉,可以控制我们的肌肉,意识是用来做出决策的。精神是意识的内核,是引擎,为意识指出明确的方向。精神是底层的,意识是上层的。当我们在梦境时,我们的意识模糊,但是精神却是清醒的,梦境混乱无序,我们对身体的控制减弱,但我们对于快乐悲伤的感受依然真实。意识不仅仅是各个单元的连接器,其自身也是复杂的,可能是某种层垒的结构,最低级的意识就是对于感觉的条件反射,更高级的意识活动则包含知识、经验、逻辑。意识不等于记忆、知识、逻辑、推理的能力。草原上的野兽,尤其是那些捕猎者,它们都拥有很强的意识,但不等于他们拥有人类一样的高级智力活动。

感觉系统大体是类似的,目前的人工智能在某种程度上已经能够做到一些感知能力,尤其是视觉、听觉方面。对于视觉而言,如果在你的周围空间随便选取一个点,那么通过这个点的只有一些杂乱的电磁波而已,我们称之为光线,但是当我们的眼睛置于这个点,我们能够从这堆杂乱的电磁波中提取出周围物体的信息,投射在我们的视网膜上,视网膜将这些刺激信号传递到我们的视觉处理系统,我们能够分辨“颜色”,“形状”,“材质”,“种类”,“运动”。听觉也是同样神奇,我们的双耳中的空气分子不过是在无序的震动,我们却能从中提取出音色、音高,如果有多种声音同时存在,我们也能很好的将这些声音分离。在一个混乱的环境下,如果我们想要看清或听清一些东西,我们必须付出更多的注意力,也就是我们需要投入更多的意识。这说明我们的感觉系统不仅仅是一个物理系统,更加是一个信息处理的系统。我们通过信息的时间变化,组合,特征分离和重新组合,得出结论。因此对于同一事物的感受,不同的个体是不一样的,这也就是我们说的主观感受。比如我们对于颜色的感受,在意识中的投射是不一样的,一个很明显的证据就是色盲。所以我们虽然都认同某个物体是红色的,红色在我的意识中与在你的意识中可能是完全不同的。在跨越物种之时,感受的区别必然更加明显。有些物种则拥有完全不同的感觉器官,比如可以看到地球磁场的知更鸟(引用)。感觉系统的模拟,首先需要有相应的仪器设备采集信号,信号必须经过无意识的处理,转化为抽象的特征,将抽象特征交给意识体来处理。

假设我们已经能够创造出具有精神、意识、感觉的系统,我们可以开始讨论“自我”这个问题。这个问题看起来非常诡异,一个具有精神、意识、感觉的系统,难道会没有自我的概念吗?如果一个意识体就是整个世界的全部,除了自身之外再无其他,他还会有自我的概念存在吗?自我相对于非我而存在的,没有非我,也就没有自我。如果一个意识体置于一个容器之内,他对容器外的世界一无所知,在他看来他就是全部。当我们沉浸于某个目标时,我们也会忘记了自己的存在。当我们进入竞争环境,自我概念就会强化。自我与存在是同一个问题,保持自我存在是一个本能的精神元素之一。 。。。必须区分内外,头发是不是我,指甲是不是手臂是不是我?

未完待续。。。

桂糊涂的德州扑克AI

如何编写德州扑克的AI。

德州扑克与其他的棋牌类游戏不同,他不一定存在着最优解,更多的是一种心理竞技。这对于人类来说可能很简单,但对于电脑来说却并不擅长。我的目标就是将人类的思维用代码的方式重现出来。

对德州的分析,首先是概率。一手牌的胜率是多少。在底牌,翻牌,转牌,河牌阶段的算法依次如下:

底牌阶段的算法采用查表法。13不同花色的牌组合共有169种,分为,对子面,同花面,杂花面。这里有个小技巧,13可以用4个bit来表示,两张底牌的组合,正好可以用一个字节来表示。我用高位在前表示同花,低位在前表示杂花。

河牌阶段的胜率算法也比较简单。我采用的是穷举法————去除自己的底牌和公牌后,组合遍历对手可能的底牌,将对手的底牌与自己的底牌比较,胜率=获胜次数/组合数。组合数共有995种。这里的关键是如何高效比较我方牌与对手牌的大小。

转牌阶段的胜率,依然采用穷举法————组合遍历河牌,并计算河牌胜率的平均值。河牌共有46种可能,因此算法复杂度为O(45540)。这一切比较都依赖于快速比较手牌,如果手牌比较速度慢,将无法快速计算出这一胜率。

翻牌阶段胜率,无法再采用转牌阶段胜率的算法,这里有个技巧,翻牌阶段胜率近似=发一张牌后的胜率。

如何快速比较自己和对方的手牌。这里也使用了一个小技巧,就是将每张牌面的大小数值化。德州牌面比较是先比较牌型,再比较牌值。因此,将牌型的值作为最高位,将牌面的值作为后5位,即可形成一个比较值。如红3黑5方A梅5方5,牌值为=3555e3。3代表3条牌型,555e3是牌面值。A一般作为14牌值处理。从高牌,对子,两对,三条,顺子,葫芦,同花,四条,同花顺,依次是0,1,2,3,4,5,6,7,8。牌面值直接用2,3,4,5,6,7,8,9,A,B,C,D,E。以16进制表示依然可以有很好的可读性。

在做牌型检测时,同花,顺子比较特殊,其他的4条,3条,葫芦,两对,对子,高牌,都是相似的。

同花检测,将同样花色的牌放进桶里,一个桶里的牌大于等于5张,则为同花,若这5张还能成顺,则为同花顺。

顺子检测时,A较为特殊,既可以和10,J,Q,K搭配,也可以和2,3,4,5,6搭配。将14位数组,设置1,0,1表示存在该牌,0表示不存在。从大到小遍历计数,连续计数5次则为顺子。之所以从大到小遍历是为了找到最大的顺子而不是最小的顺子。

其他牌型比较,先将牌放进13个桶里,然后将这些桶排序。排序方法是,桶里的牌越多越大,牌一样多比较桶本身的编号。这样我们就得出了[3个3,2个J,2个8,1个K]的桶列表。如果第一个桶是4张,那我们的牌型就是4条。第一个桶是3张就是3条,同时第二个桶是2张就是葫芦,前两个桶是两张就是两对,第一个桶是两张是一对,否则就是杂牌。

但是仅仅知道胜率是远远不够的,这只是人类思维的开始。人类对于胜率的判断很多是基于经验,但这种经验非常高效,综合考虑了很多数学概率中没考虑到的因素:比如,玩家数量,底池大小,对手下注量。人类有恐惧感,也有冒险精神,这都是电脑所不具备的。

有没有可能设计一种AI,只根据标准的概率下注,完全不考虑人类心理因素呢?

德州高手会研究对手。如果一个玩家从来不Bluff(诈赌),并且他的下注量和他的胜率相关。有经验的牌手,可以根据他的下注量反推出他的胜率,再根据他的胜率反推出他的手牌。与一个透明的玩家玩牌,要赢可能要看手气,要输真的很难。

另一方面,一个绝不冒险的玩家,也会被轻易的Bluff掉,从而使对手的实际胜率远大于理论上的胜率。

还有一方面,那就是恐惧。电脑不会恐惧,当对手ALLIN的时候,人类会忌惮,会重新评估对手的牌力。但电脑不会,他认为的大牌,无论多大的注都会跟。

因此,学会冒险与恐惧是编写德州AI的最大难点。

人数概率修正。人数影响概率。
恐惧修正。
安全跟注值计算。
Value控制。
Balnace。
BLUFF。Bluff的时机。