读《自然计算:DNA、量子比特和智能机器的未来》

作者: loaf 分类: IT,阅读 发布时间: 2018-09-04 00:51

自适应计算

现代遗传算法:

  1. 选择一个起始群体,其中包含了各种可能的候选设计(即候选个体)。
  2. 评估每个候选个体的“适应度”得分,依据的可以是个体的金钱支出或者能量消耗
  3. 记住“适应度”得分最高的候选设计
  4. 选取具有最佳“适应度”的候选设计,通过以下两种方法创建一个新的群体:对它们做随机的微调;通过与其他候选设计重组来对设计做较大改动

初始理解:从字面上就可以看出,我们可以先假设一个所有的初始值,并赋予其对应的权重,然后开始多次迭代,每一轮迭代,都先对一些初始值进行随机变异,然后评估变异后的得分,如果比前一代优,则保留一部分修改,或者保留一部分的修改方向。如果比前一代差,则淘汰这种修改。

当然,这里可以有一个重点,就是,变异本身是没有方向的,而方向性最终是体现在淘汰上,看到这篇文章和作者的代码,从而跟踪到这篇松鼠会的文章,看完后,第一个想到卡尔·萨根的《宇宙》里有一篇是说日本的“武士蟹”的形成,因为渔民总是保留有武士纹路的螃蟹,所以千百代后,有这类纹路的螃蟹就越来越多了。

而在网上搜索时,看到这篇文章,也非常有用,这是一篇解读这篇关于遗传算法与CNN论文的读书笔记。另外,这篇文章也非常有用。为了加深理解,干脆自己用Python重写了一下这个算法

动物法则

我们理解AI时,总是按人类的思维来尝试,一般的路线都是收集信息->处理->动作,但是考虑到动物的本能往往在某些方面有比人类更高的适应性,从处理问题的角度出发,我们可以用模拟动物的方式来架构“智能”,比如模拟老鼠的行为,模拟蟑螂的运动。它的基本思路是,机器功能可以造的相对简单,然后通过组成种群的方式进行遗传进化。它们要能通讯要有分工,比如蚂蚁和蜜蜂。要能自我修复和自我繁殖。但是具体在软件开发上,如何产生新的功能和新的流程却是一个问题,软件毕竟无法很好地象在算法模拟的那样进行突变,并得到新的功能。而且,如果请允许软件进行突变并得到新的功能,人类控制它的能力就被限制了,这又涉及到一种风险,不管这种风险的概率有多小,在庞大的量面前,这种风险变成了几乎必然。但这种随机突变进行进化的方式,能最大程度地突破人类自身的思维惯性。比如,当我们设计汽车时,我们可能总是在无马的四轮马车这个雏形上动脑筋,而如果我们把目标定为从A点运动到B点的能力时,则可能进化出任何想象不到的形态。

安全机制

工程师解决问题时,总是希望找到问题的最终原因,或者说起始原因。但是在实际中,这是无法解决问题的,因为许多的故障开始时,原因非常微小,以致于很难分类或者很难处理。那么正确的安全机制是什么呢?本书中,认为这应该是一个系统控制过程,在流程的全过程中实时进行正向反馈,才是解决之道。

分子计算

用DNA计算来解决汉密尔顿路径问题。

具体算法没有看到,但是从描述上来看,和遗传算法是非常类似的,就是把问题转变成染色体配对的问题,然后通过交配遗传的方式来找到最优后代。

生物计算机

生物机算机,从字面意义上,我们可以想象有这么一个狂人,通过基因工程,创造了一种具有可控计算能力的生物病毒,然后,这种病毒在人间传播,从而寄生在人体内,把每个人变成了“肉鸡”。这看来起来是个很不错的科幻小说的梗啊。

当然,现在的生物计算机还在于打基础的阶段,从最小的计算单元开始,讨论其可行性,相当于物理计算机从电子管开始讨论与门电路的实现。而各种算法也可能通过生物学方式进行模拟,书中涉及到画两点间线段的垂直平分线时,就是用模拟AB两点同时释放化学信号,然后会在发现它们会在垂直平分线上接到了等量CA 和CB。但是,目前我们考虑的都是物理计算机中问题用生物计算机来实现或者复现的情况,所以会出现一些问题,比如寄存器数据的不可靠性问题等,我们还只是把这些情况当作问题,而没有把它当作一种契机,也许它们会开创另一条解决问题的思路,好比没有轮子的汽车一样。

“理性的人适应世界,非理性的人一直试着让世界适应自己。故而所有的进步都依靠非理性的人实现。”——乔治·肖伯纳

生物计算的两个优点:并行和容错。所以用模拟计算的方式来解决问题,有时会达到比较好的效果,而模拟运算的低效,用生物计算来处理,又不是问题了。

量子计算

有许多问题,常规计算是没有办法进行的,比如穷举法解决“旅行推销员问题”、“因数分解”问题等,穷举的话会算到天荒地老(宇宙终结),但量子计算提供了一个可能性。书中的肖尔的算法,我是没有看懂,即使看到网上的解读版,仍看不懂。但是,原理上,量子算法是基于“直觉”的,所以我理解的量子计算,可能不在于模拟出量子纠缠的结果,而是用量子纠缠的思路来解决问题。