课程首页:MIT OpenCourseWare-Artificial Intelligencehtml
网易公开课:《麻省理工学院公开课:人工智能》前端
授课教授:Professor Patrick Winstonnode
参考书目:Winston, Patrick Henry. Artificial Intelligence. 3rd ed. Addison-Wesley, 1992. ISBN: 9780201533774.算法
这一讲首先介绍了人工智能的定义[0:00:00]。编程
以后,教授讲解了生成测试法,并详细谈到了给事物命名的重要性:“给某种事物命名后,你就对它拥有了力量”[0:11:30]。后端
再后,教授介绍了人工智能发展的简史,讲到了本课程中将会接触到的各类人工智能程序[0:20:28]。缓存
最后,教授展望了人工智能的将来并讲了一些课程事务信息[0:32:40]安全
首先,什么是人工智能?!Professor Winston给出了定义:Algorithms enabled by constraints exposed by representations that support models targeted at thinking, perception, and action。人工智能这门课是一门专门针对思惟,感知和行动而建模的课程(建模是MIT的根本)。除了建模,咱们还须要有支持模型创建的表示系统(why? 教授用陀螺仪和“农夫狐狸鹅和稻谷过河的故事”来举例说明表示系统的做用),而有了表示系统,约束条件就会呈现。最后,咱们须要建立程序或算法来实现。网络
一个简单的例子就是“生成测试法”(generate and test),如想知道一片树叶的学名,能够翻开一本介绍树叶的书,一页页比对,测试是否相同。归纳起来就是:生成器生成一些可能的答案,输入到一个测试器里进行测试,其中大部分会失败,偶尔有部分会获得满意的答案。咱们把这种方法命名为“生成测试法”,是颇有必要的。Once you hava a name for something, you get power over it。有了名字,你就能够谈论它,名字给了你力量,这就是Rumpelstiltskin原则。这正如咱们有了数学符号,咱们就能够描述,谈论和发展数学。架构
举个例子:若是教授提问学生“赤道线穿过了几个非洲国家?”,这是教授经过语言和学生交流,而学生的语言系统会向视觉系统发出指令,让它执行一个程序,沿着赤道线扫描地图,确认结果后反馈给语言系统,让学生回答说六个。生活中简单的事件,细细想来倒是多么的神奇!若是没办法理解这种奇迹,就没办法理解智能的含义!
而后,教授简单介绍了下人工智能的发展史,从1842年埃达·洛夫莱斯编写第一段计算机语言,到1950年艾伦·图灵写的著名的关于图灵测试的论文(speculation age),现代的纪元真正开启于1960年马文·闵斯基写的《通向人工智能的步骤》,以后一位近乎失明的研究生James Slagle写的积分程序(以后会回顾),并演示了黎明(dawn age)早期和晚期的一些有趣的程序或系统。以后进入了推土机时期(bulldozer age),即专家系统和商业时期以后的一个时期,例如深蓝。如今正处于正路时期(right way),一个重要的关键词就是imagination。
以后教授又重申了语言的重要做用,他指出人类进化过程当中,将咱们与黑猩猩区分开来的是一小部分人得到了一种能力,能将两种概念合并为第三种概念,同时又不会破坏原有的两种概念,并且没有限制。这让我想起了《人类简史》里提到的相似的描述“人类语言真正最独特的功能,并不在于可以传达关于人或狮子的信息,而是可以传达关于一些根本不存在的事物的信息。”语言的做用在于(一)向上,让人类可以描述见到的事情,具备讲故事的能力,而讲故事和理解故事正是教育的所有;(二)向下,让人类可以想象语言描述的场景,例如:没有人告诉咱们提着装满水的水桶在大街上跑会发生什么,可是咱们很容易就能够联想到结果(你的大腿可能会被淋湿)。若是不能理解这个,咱们将永远没法理解人类智能!
最后讲了一下课程相关事项,这里不赘述。
PS. 课程中提到的一个概念,值得深思:简单(Simple)与微不足道(Trivial)的区别:简单也可能强大,微不足道不只简单,并且无价值。不少MIT人错过机会的缘由在于,认为只有复杂的概念才是重要的概念。实际上,人工智能中最简单的概念一般都是最强大的。人工智能课程中,能够包含不少数学,成为数学系课程,但这会让概念没必要要地复杂化,没必要要地数学化。
这一讲首先经过一个积分题引出了课程内容,讲解早期人工智能中求解符号积分的人工智能程序[0:00:00]。
以后,教授介绍了安全变换和启发式变换,并用它们求解了这个积分题[0:05:40]。
详细介绍了程序求解积分题的方法以后,教授讲解了人工智能这方面中值得思考的问题[0:31:40]。
若是给你一个积分题,你将如何求解?
请思考:若是一个计算机能计算出来,那它算得上智能么?
咱们回忆下大学里作积分题的时候,确定是经过变换,化简,转换成熟悉又简单的基本积分表/公式,而后求解。这就是问题归约(problem reduction)。
为此,咱们须要一套基本的安全(safe)变换,好比提取常数或乘上负数,这些变换是最基本的,最直观的,也是最安全的,尽管也许并不能解决稍有难度的题目。
接下去咱们 1. 应用基本变换;2. 查表;3. 测试是否结束。
每每这时候是不够的,咱们还须要启发式(heuristic)变换,做为咱们求解过程当中的一种尝试,不必定有效,有时候却能发挥做用。例如,当咱们不懂如何化简时,咱们就会去尝试三角变换,咱们事先不肯定它必定有效,只能变换后再观察下形式,说不定就柳暗花明又一村。
在转化的过程当中,可能会引入“与节点”(and node)和“或节点”(or node),用来分解后分别求解以后组合,或转化为任何一种可能求解出答案的形式。咱们把这种分解获得的节点树称为“问题归约树”,或“与/或树”,或目标树(goal tree)。Once you hava a name for something, you get power over it。
接下去当咱们遇到“或节点”,该如何选择?Simplicity是个方向,对于计算机来讲它得有一个能够衡量的指标,告诉它哪一个更优。
所以以前的流程在3. 测试并未结束后,能够 4. 查找基本变换没法解决的问题;5. 应用启发式变换;而后循环回到1. 应用基本变换......,直至问题求解。
当咱们应用Slagle的这个模型来求解56道难题时,咱们能够问:有几道求解正确(54道);树的深度是多少?平均深度是多少?多少分支没用到?这样,咱们就不只得到了这个模型的信息,也得到了这个domain的信息。
本课花了大半的时间,深刻介绍一个例子,在这一点上我赞同教授的说法:你想要学会一个技能(skill),就先得理解(understand)它,而为此你必须先见过熟悉它(witness),这就是为何要深刻细节(detail)的缘故。我以为不少名校的公开课,学习的不只是课堂上的知识,还有授课教授对于教育和人生的本身的感悟、看法和理念。
接下去,让咱们跳出这个例子,来思考求解积分这件事的本质。一个是关于知识的问答法,在解决一个问题中,须要哪些方面的知识?一个是关于知识如何表示?例如在本例中表现为数学形式,有些会表现为流程形式等等;另外一个是须要多少的知识?每当进入一个新领域时,你都应该问本身这些问题!Knowledge about knowledge is power!
最后,让咱们思考本课开始的问题,这个程序算不算智能?当你知道它工做的原理,发现它运用的是你的解决方法,那么它究竟算不算智能?留给你们本身思考。
这一讲首先介绍了一个移动方块的人工智能程序,并以此详细讲解了目标树的概念,这一程序不只可以可以实现目标,还能解释本身在过程当中的一些行为[0:00:00]。
第二部分,教授详细介绍了基于规则的专家系统,有一个医疗方面的专家系统比医生的诊断还要准确,教授讲解了它是如何作到的[0:18:20]。
第三部分,教授经过杂货店装袋的例子,总结了知识工程中的三大法则[0:33:17]。
在桌面上一堆大小不一的方块堆中,想要设计一个能遵从咱们指令,将指定的方块置于另外一个方块之上的程序(PUT ON),咱们须要四个步骤:FIND SPACE、GRASP、MOVE、UNGRASP。而要GRASP方块,先得有CLEAR TOP的操做,而CLEAR TOP又须要GET RID OF的操做,(其中可能涉及到屡次循环),它会回过头去调用PUT ON。相似的,FINDSPACE也会调用GET RID OF操做。
举个简单的例子,桌面上Bx方块置于B1之上,By方块置于B2之上,如今想把B1放置于B2之上,那么咱们须要上面说的四个步骤,其中为了GRASP B1,咱们必需要CLEAR TOP B1,要完成这个操做,必须GET RID OF Bx,这回到了PUT ON Bx于TABLE上,开始新的系列操做,直至完成。在这个过程当中,向上是WHY,向下是HOW,构成了一个GOAL TREE。创建了目标树后,程序就能回答关于他自身行为的问题,例如“为何你要挪开Bx方块?”。
这个例子引出了本课的核心要义:行为的复杂性 = MAX(程序复杂性,环境复杂性)。正如西蒙观察的结论:蚂蚁会在海滩上走出复杂的轨迹,更可能是由于避开复杂散布的沙砾。
同时,这也引出了基于规则的专家系统。人工智能中全部有用的东西,均可以用简单规则形式的知识表示出来,进行封装。Stanford的Mycin写了个诊断血液中细菌感染的程序,准确率很高。但涉及到太多医学术语,这里用一个动物园识别动物的例子来讲明:
若是我说:这个动物(1)有毛发;(2)有爪子;(3)有尖牙;(4)目光如炬向前;(5)吃肉;(6)有斑点;(7)移动迅速;你可能会迅速猜想出这是一头猎豹。How?咱们来看看如下几条规则:
R1:If 有毛发,Then 一般是哺乳动物;
R2:If 有爪子,有尖牙,目光如炬向前(组成“与节点”),Then 颇有多是肉食动物。(第5条正好印证了确实是肉食动物);
R3:R1 + R2 + (6)+ (7),组成“与节点”,得出大几率是猎豹。
这就是猜动物的游戏(是否是很像以前的“10个问题猜你内心想的明星”的游戏,也是经过提问诸如“是男的吗?”“是否是港台的?”逐渐缩小范围,最终肯定)。若是你画出它们的推导图,你会发现,其实这很像以前提到的目标树Goal Tree。这就是一种基于规则的专家系统,在这个例子中更具体的叫作“基于规则的前向链专家系统(Forward-Chain Rule-Based Expert System)”,即从已知事实往前推出结论。与之对应的是“后向链(Backward-Chain)”,即从一个假设往回追溯。例如我问你:出如今咱们眼前的这只动物是猎豹吗?你会怎么思考和回答!你确定会去确认:它是一个哺乳动物吗,有没有毛发?是不是肉食动物,有没有尖牙利爪?是否身上有斑点?且移动敏捷?这里的假设是这个动物是猎豹,往回利用以前的规则去验证。不管是向前仍是向后,这类系统都有一个重要特征:演绎系统(Reduction System)。
最后,让咱们经过一个杂货店装袋的例子,总结知识工程中的三大原则:
若是你去超市买不少东西要装进购物袋里时,你一般会怎么作?你会基于什么通用原则?例如:大的重的放底部,小的轻的放顶部;容易被压坏的不能放底部;干的湿的要分开;等等。你是怎么知道这些的?确定是从平常自身的或观察获得的个案经验中得出,怎么放薯片,怎么放牛奶,怎么放蔬菜。因此,
启发1:经过观察个案,你能从别人那里获得经过其它方式没法获得的知识!
接下来再思考,当咱们放置罐装豌豆和冷冻豌豆来讲,会同样的处理么?尽管它们都是豌豆。但咱们都知道不要把从冰箱里拿出来的东西和其它干的东西放一个袋子里。因此,
启发2:考虑看起来相同,但实际处理方式有所不一样的东西!
当咱们有了本身的装袋规则后,咱们每次去超市都能完美的解决么?若是有一天,你买了一个新的东西,以往的经验和规则没法告诉你,应该放在哪个塑料袋或者应该怎么叠放,该怎么办?因此,
启发3,创建一个系统,观察它什么时候出问题,出现问题的缘由是由于缺乏了某一条规则,须要你添加进去!
实际上,这些知识工程中的法则对于我的的自我改造一样的重要!不是么?当你学习一个新的主题和领域时,你如何将本身创建成一个专家系统?学习一些个例,看看有哪些专业的术语和定理,而后对于不一样的问题思考它们之间的区别究竟是什么,最后当作做业或者实际应用时,发现卡住了或者无从下手,那是由于你的知识体系还缺乏了一部分东西,你要去补回来,而后再去解决。如此往复,你将变得更加的智能和聪明!
PS. 留一个问题给你们思考:上面例子中的智能其实只是创建在规则上的,加了一层虚饰的系统,它基于规则,可是并不表明它理解这条规则,例如它知道薯片不能放最底部,也许它还知道由于这样容易被压坏,那么它是否又知道为何压坏了就很差了吗?它并无本身的常识。那么问题来了:规则和常识之间有没有任何关系?
教授对此持部分不可知论者的态度,认为在一些特定状况下,规则可以在咱们对常规事物的理解中扮演角色。教授演示了个例子,一个计算机程序经过读取一段小说节选,基于规则库分析出了各类要素,如主人公,角色,事件,心情等等,例如文字中提到A被B伤害,那么程序推断A有可能受伤,心情愤怒,或者A可能死去。文字中直白的描述通常较少,推断的部分每每不少,这说明了什么?说明大部份内容都是受控的幻想,做者知道你脑壳里的规则,就能够利用这些来说故事,不用巨细靡遗,你却能本身脑补细节。是否是想起了第一讲中的关于讲故事和理解故事的论述。O(∩_∩)O
这一讲开始讨论各类搜索算法,首先是最基本的大英博物馆法,也就是找出一切可能的蛮力算法[0:00:00]。
以后教授经过例子讲解了深度优先搜索算法和广度优先搜索算法[0:08:05]。
以后,教授介绍了搜索中如何避免重复搜索,并用其分别优化深度优先和广度优先算法,获得登山算法和束搜索算法[0:20:26]。
最后,教授讲解了故事阅读中搜索的程序例子[0:41:15]。
打开手机中任一款地图App,输入咱们想要去的地方,系统就会推荐给你几条路线。人类是怎么作的?基本上只要你看一下地图,通常不可贵到可能的路线,这能够称得上“视觉算法”。那么计算机是如何实现的呢?一个简单粗暴的想法是找出全部可能的路径,这就是“大英博物馆法”。
最简单的搜索算法有深度优先搜索(Depth First Search):沿着一条路径前进,没法继续往前时,开始回溯(Backtracking),回到上一位置,选择另外一个分支,直至找到通向目的地的路线(不必定是最优的)。与之对应的是广度优先搜索(Breadth First Search),一层层创建起这棵树,而后发如今某一层获得了到达目标的路径。
举例说明:S->A/B,A->B/D,B->A/C,C->E,D->G,求S到G?
深度优先搜索算法的流程大体以下:初始化队列(S) -> 扩展队列中第一个路径(S->A | S->B) ->若是未结束,继续扩展,把扩展获得的路径加入队列,放置于队列前端(S->A->B,S->A->D | S->B)-> ......继续扩展,直至找到路径,若是没法找到,那么删除第一个路径,开始扩展第二个路径......。而广度优先搜索算法不一样的地方在于把扩展获得的路径加入到队列末端。不过这个搜索算法有个愚蠢的地方,在于扩展路径时有时又回到了以前的节点,这是浪费时间的。基于此,咱们能够考虑检验待扩展路径中末端的节点,若是该节点在原来已扩展路径的末端出现过,那么再也不重复扩展。为此,咱们须要一个位置列表,存放以前已经扩展过的全部路径末端节点。这是一种优化的选项。
在现实生活中,咱们都知道在寻找路径中,每一次遇到选择时,都要尽量的选择靠近目标的路径,而不是反方向,应用到程序中就是登山搜索算法(Hill Climbing)。这个算法要求在问题中有离目标距离的启发式衡量,不然你如何知道哪个离目标更近。具体在算法中,与深度优先搜索算法的改进是在扩展路径时进行排序后放到队列前面。
登山搜索算法能够算是深度优先搜索算法的优化,而束搜索(Beam Search)则是广度优先的改良。在每一层的扩展中限制一个束宽(Beam Width)W,每层只保留W个节点,固然是离目标最近的W个。具体在算法中,与广度优先搜索的改进是在扩展路径时保持W最佳。
回过头来再思考下登山算法,它的本意是指当咱们在大雾中须要尽快登上山顶,但却没法识别路径,只能向身边四个方向尝试一段距离,看看哪一个方向使得自身海拔更高,那么这个方向就有多是通向山顶的路径。那么这有可能存在什么问题?一个问题是:若是你的周边有个小山丘,那么按照这个方法,有可能被困在这个局部最大值中,没法登上真正的山顶;另外一个问题是:若是恰好你的周边都很平坦,那该方法也彷佛失去了做用;还有一个问题一般出如今高维问题中:若是你恰好处在一个南北45度的山脊上,那么你朝东南西北四个方向走,都是呈降低趋势,除非沿着南北方向山脊走。这些都是可能会在算法应用中卡住你的地方,让你觉得你找到了真正的答案。
最后回到上次课中提到的计算机分析小说选段的程序,计算机分析完后能回答你的一些问题,如“为何A要谋杀B?”,在于它构建了目标树,在局部中看联系,而经过查找更高层的内容,反思它自身的思考过程,并将这些高层反思内容综合汇报出来。这就是为何一些程序看起来很智能,彷佛它明白本身在作什么,以及为何这样作!
这一讲主要讨论了最短路径问题。首先教授在黑板上演示了一个例子,介绍分支限界法[0:00:00]。
以后,教授引入了扩展列表,避免重复扩展,以优化分支限界法[0:18:35]。
再后,教授经过可允许启发式对算法进行了优化,避免寻找最短路径时往反方向进行的无谓搜索[0:25:15]。
最后,教授将上述两种优化加到分支限界法上,获得A*算法,并讲解了A*算法中可能碰到的一些问题[0:36:00]。
上一讲主要集中于如何找到通往目标的路径,这一讲咱们来看看如何找到最短路径。若是让咱们用眼睛在一个简单的地图上扫描,咱们很容易肯定出一条最短路径,那么接下去呢?如何确保你肯定的是正确的?一个简单的想法是找出全部的路径,若是都长于这条路径,那么这条路径就是最短路径。但有时地图很复杂,光凭估算,也许没办法大体肯定出一条最短路线,那么该怎么作呢?相似的,你开始从起点朝向终点开始扩展路径,每次都扩展最短的节点,最终获得一个预估的最短路径,接下去你仍是要确保每一条路径都长于你刚刚获得的最短路径。这就是分支限界(Branch and Bound),算法以下:初始化队列 -> 测试第一个路径(排序后) -> 扩展第一个路径,并排序 -> 回到上一步,测试第一个路径,以此往复 -> ......
一样的,跟上一讲同样,咱们能够用扩展列表存储已经扩展过的路径,若是第一个路径在扩展列表(Extended List)中,那么再也不须要扩展,避免无谓的重复。
另外,咱们都知道两点之间距离最短,因此,当咱们扩展了第一个路径后,咱们会获得这些扩展节点通往目标的下限,咱们能够以此做为咱们扩展的依据,这也是一种优化策略,考虑剩下的直线距离下界,会让咱们避免朝相反的方向尝试,基于积累距离+估计距离,这称为“可允许启发式(Admissible Heuristic)”。
那么A*算法就是分支限界加上上述两种优化获得的算法。这个算法彷佛很完美,可是在一些特定状况下(如非欧几里得排列)使用可允许启发式却可能会遇到困难。这彷佛有点难以理解,不过要记住,Search is not about map, but about choice。在地图模式下,可允许性须要知足“任一节点和目标之间的估计距离 ≤ 实际距离”,但在非地图模式下(在这种状况下,你能够估计任一节点到目标的距离远远小于实际值),还须要加上一致性(Consistency)条件:| 任一节点X和目标的估计距离 - 另外一节点Y和目标的估计距离 | ≤ X和Y之间的实际距离。
这一讲讲解了人工智能如何进行博弈,包括下棋,深蓝曾经由于击败国际象棋世界冠军卡斯帕罗夫而轰动一时。
这一讲首先介绍了进行博弈能够使用的各类方法[0:00:00]。
以后开始讲解极小化极大算法[0:14:40]。
再后,教授介绍了极小化极大算法的优化——α-β剪枝法,这样作可以有效提升算法效率[0:21:57]。
最后,教授讲解了逐步深刻和随时算法的概念,并介绍了深蓝的实际工做机制[0:34:10]
计算机会怎么下棋?
第一种是像人类同样分析形势,采起策略,最终决定下一步,但没人知道这该怎么实现。
第二种是采用IF/THEN结构,基于当前形势,看看什么移动是可行的,并进行排序;
第三种是往前看并进行评估,相似于第二种方法,咱们要肯定哪个是对咱们有利的,选择最大值。要作到这一点,须要设法评估这些形式,这就须要静态值s = g(f1, f2, ..., fn) = c1·f1 + c2·f2 + ... + cn·fn,用来探索可能发生的事情的任何后果。例如,当咱们走完一步,咱们检查王的安全,检查排兵布阵,并把这些信息做为输入,获得对应静态值,依次选出最大的静态值。
(深刻探讨前,先介绍目标树相关的几个术语:分支因子(Branching Factor)b:每一层选择方式的数量;树的深度(Depth)d;末端/叶节点(Leaf Nodes)b^d;)
第四种是采用大英博物馆法处理,这大概须要处理10^120个节点,若是全宇宙的每个原子都以纳秒级的速度处理一个节点,仍然离这个目标差了十几个数量级,因此,这个方法并不可取。
第五种是尽量往前看,并不局限于下一层。这是咱们要采用的方法,下面以极小化极大算法来讲明。
极小化极大算法(MiniMax),听起来比较拗口。举个简化版例子,你当前执棋,对于你来讲有A1和A2两种走法,而对于你的每种走法,你的对手都会有两种走法,假设,A1->B1/B2,A2->B3/B4,这种状况下去算静态值分别获得2,7,1,8。对于你来讲,你确定但愿最后走到8这个地方(你称为极大值者),可是不论你选择A1仍是A2,你的对手确定不会让你如愿以偿(他被称为极小值者),若是你选择A1,那么他确定选择B1,这样获得值为2,若是你选择A2,那么他确定选择B3,这样获得值为1。那么当你知道后,你会选择走A1仍是A2?固然是A1!尽管走A2可能会获得8,但除非你的对手真的水平不好。这就是一种博弈。不过要注意的是,这里只考虑了两层,若是再往下一层,你的对手在决定往B1/B2/B3/B4的时候还会考虑如何极大值他本身。所以,若是你可以足够深刻到更深的层,那么你将所向无敌,固然,这个计算量也是很是之大。
那么如何尽量的往下深刻呢?联想到咱们在介绍分支界限里采用的一些优化算法,这里能够相似的应用。一样以上面的案例来讲明,假设你算出第二层的第一个节点B1是2,那么你的对手确定知道A1节点≤2(由于若是B2大于2,做为极小值者确定选B1),那么你确定知道你的选择≥2(由于若是B3/B4决定的值小于2,做为极大值者确定选择2)。而后算B2节点,值为7。继续,B3节点值为1,到这就够了!由于你的对手确定知道A2节点≤1(理由同上),那么你还要选择A2这个节点么?因此,A2这个分支就无需再考虑。这也是α-β算法的精髓,它是极小化极大算法的改进,在层数越高的时候,性能提高更明显,由于能够作深层剪切(Deep Cut-Off)。在这种状况下,咱们须要作的静态评估数大体是2b^(d/2)。
在以前的案例中,咱们考虑分支因子在每一个节点都相同,但实际上它会随竞局状态和自己发生变化。考虑一个d层的树,在d层有b^d个节点,在d-1层有b^(d-1)个节点,若是你不想进行最下面d层的全部计算,你能够计算出往下只到d-1层时的答案,做为一份“保单”,若是连这一层计算都很是大呢?那就继续往上,若是从第一层就开始考虑呢,计算量约为b^(d-1),跟在最后一层计算没什么区别。这就是逐步深刻(Progressive Deepening )思想,它也是随时算法(Anytime Algorithm)的一个很好的例子,能让你的博弈算法在规定的时间内得出较优的结果。
那么1997年的深蓝就能够当作:极小化极大算法 + α-β + 逐步深刻 + 并行计算 + Opening Book + 专用于残局的算法 + 非均树建立。
那么,这是对人类智能的建模?仍是另外一种智能?
这一讲主要讲解了如何让计算机智能识别物体的组成,也就是线条图解释,这是计算机视觉方面的基础。
教授首先介绍了这方面研究的历史,详细介绍了不一样时期,三位计算机科学家对这一问题的解决方法:
首先讲解了Guzman的实验方法[0:00:00],以后讲解了Huffman的理论方法[0:11:50],最后讲到Waltz是如何将前人的方法总结得出优秀算法的[0:32:00]
桌面上放了几个积木,你大概一眼就能说出来,那对于计算机来讲如何实现?计算机须要把问题转化为图像中有几个面,哪几个面是属于同一个物体,而哪几个面属于同一个物体又如何作到?Guzman提出了根据判断三个面之间的链接点(Three Faced Vertexes)特征来决定是否属于同一个面(一般会在图像中投影成一个箭头或一个叉),可是这个方法有时能奏效,有时却不行。
而做为一位数学家,Huffman决定不局限于这个实际的问题,而是考虑一个拥有多个特征的世界,特征一是这个世界能够用通常位置(General Position)来表示,也就是不考虑视角奇特的状况;特征二是只处理三面的世界,也就是全部顶点须要由三个平面构成(且只能是三个平民);特征三是考虑三种线(4个标记):凹,凸,边界(左/右)。(一些术语:Vertexes,Edges,Junctions,Lines)。以上三个特征加上这些术语,咱们就有了一个完整的目录,而事实证实,只须要18种状况就能完备这个目录。如此,计算机就能对每一幅图中的线进行标记并判断。虽然Huffman的理论方法相比Guzman有必定的进步,可是天然界中的状况远比上面来得复杂,会有阴影,裂纹,也会有四个面构成的顶点,等等。
因而,David Waltz加入了裂纹,阴影,非三面顶点,光线,让标记从4个增长到50多个,链接点从18增长到1000多个,解决了通常性的问题,算法上也能够转化成简单的深度优先搜索问题,但运算量太大。Waltz总结了算法,从一个链接点1出发,获得可能的情形,而后考察链接点2的标记,保留那些知足链接点1和2之间容许的情形,依此,经过链接点3可能的情形,反过来约束链接点2的情形,这样就能删除掉许多不可能的情形,直到标记全部的情形。
PS. 以上也是成功的准则:从一个问题开始,找到一些能奏效的方法,而后给出一些工做原理(但并不必定能完美处理正确的问题),最后你须要将全部这些综合起来,获得解决通常性问题的方法。
这一讲主要讲解地图着色问题和资源调度问题。
首先,教授使用通常深度优先搜索为美国地图进行着色(四色问题),这是根本行不通的[0:00:00]。
以后,教授在此基础上使用了域缩减算法,这让问题处理获得了很大改善[0:09:20]。
再后,教授又加入了最多约束优先的优化,这种作法效果很大[0:29:00]。
最后,教授将地图着色问题的解决方法应用到了资源调度问题,考虑如何调度飞机的状况[33:35]。
地图四色着色问题是个很是经典的问题,可是使用深度优先搜索算法将会是很是不明智的作法。以前提到的约束传播(Constraint Propagation)彷佛也没有什么帮助。
在解决这个问题前,先引入一些概念:变量V,值X,域D,约束条件C。是否是有点像初中学过的求y=f(x)=x2(-3<x<5)的最大值。
一个直觉的算法是:对于每个深度优先搜索赋值,对于每个考虑过的变量Vi,对于每个域Di中的值Xi,对于每一个约束条件C居于(Xi,Xj)知足Xj属于Dj,若是不存在一个Xj使得(Xi,Xj)的约束条件获得知足,那么就从Di中排除Xi;若是域Di为空,那么回退。这就是域缩减(Domain Reduction)算法。
听起来彷佛很拗口,其实很直觉,举个例子,城市A与B/C/D/E均接壤,B/C/D/E依次接壤,每一个城市的颜色均可以是R/G/B/Y,若是一开始选定城市B的颜色为R,那么A的颜色就不能是R了;接下去选定城市C的颜色为G,那么A的颜色就不能是G了;城市D的颜色为B(为何再也不选R?避免过分使用一个颜色),那么A的颜色也不能是B;若是城市E的颜色为Y,那么A也不能是Y,那就没颜色能够选了,域为空,因此E的颜色不能为Y,所以回退获取选择E的颜色为R,这样的话A的颜色为Y,知足要求。
在这个算法中,“考虑过”的变量该如何选取是个问题?1. 彻底不考虑,确定不行,失去了约束;2. 全部,不现实;3. 检验刚赋值的,计算量大;4. 邻近区域,不错,虽然也要花必定时间;5. 让已缩减的域在变量之间传播,进步显著(对事物的改变进行传播是个好主意,但应该何时传播?一改变就传播显然不是个好主意);6. 对域缩减为一个值的变量进行传播。
那么咱们应该是从约束最多的一个城市开始,仍是约束最少的城市开始?事实证实应该使用约束最多的城市开始!Why?留给你们思考。
最后举例了下这个算法在资源规划上的应用,实际上是将问题类比为四色问题来解决,要很好的分配资源,能够1. 总使用最多约束优先;2. 域缩减为1时总使用约束传播;3. 若是是求最小所需资源,能够使用上下夹逼法。
这一讲讨论了计算机视觉和对象识别,介绍了这方面技术的缓慢发展以及仍未彻底解决的现状。
这一讲首先介绍了大卫·马尔对计算机视觉的早期思想[0:00:00]。
以后,教授介绍了Shimon Ullman的比对理论(alignment theories),并进行了模拟演示和相关证实[0:07:00]。
最后一部分,教授介绍了人脸识别技术的现有方法和困境[0:30:45]。
早期,传奇人物大卫·马尔提出,视觉识别的第一步是造成对外部世界情形的基于边缘的描述,即原始草图(Primal Sketch);下一步是用一些向量来修饰原始草图,即2.5维草图;第三部是将2.5维草图转化为广义物体形状;而后同库中的形状比对,最终实现识别。不错的想法,问题在于,没人能实现它!变换很难,获得的结果却很粗糙。
以后,以Shimon Ullman为表明提出识别的比对理论:首先,对一个物体照三张照片,就能重构该物体的任何视图(前提是假设物体是透明的,全部顶点均可见),更为准确的说是能生成物体的任何正射投影视图。举个例子,一个多面体有三张照片A,B,C,那么想要获得一个视图D,或者判断D是否是同一个多面体,能够怎么作?取D中的几个顶点,对于A/B/C中对于的顶点,能够写成:xd = axA + bxB + cxC + d,这样就能够构成一组方程组。或者说经过线性变换,从三个样本物体,能够生成第四个物体上的点。那么,只要选择4个对应的点,就能根据四元四次方程求出a/b/c/d。这对于识别有什么用?有了这四个值,对于任何一个特征点,咱们都能估算出它在D中的位置,若是咱们发如今D中不是,咱们就有理由怀疑这不是同一个物体。那么,最后的问题就是证实上述那个线性等式是正确的。这个证实不算难,能够留给你们尝试,或者浏览视频。
比对理论是个很好的idea,不过它对工业制品蛮奏效,对天然物体却不是太奏效,例如人脸。首先必须找到合适的对应点,并且脸部的变化不局限于三维旋转和平移。所以,一种改进的算法,再也不局限于边缘和特征点,而是基于相关性(Correlation),就像咱们经常看到的在一幅合照中,经过一个矩形框框,依次扫描,最终锁定目标面部。可是,如何选择合适的矩形框,或者说特征(例如说眼睛和鼻子组合),使之不能太大(匹配精度不高),也不能过小(容易误判),是问题的关键,这也就是金凤花姑娘(Goldilocks)原则。选用合适的Mask,利用相关性能有效的抵抗噪声的干扰。可是这个理论也并不是无所不能,上下图像的颠倒,竖直方向的拉伸,都会让难度加大。
最后,来看看视觉识别中的挑战(2010年),教授给了个例子,假设有48组动词,可以从给的图中识别出对应的动做吗?也许不难,能够轻松识别Drinking和Toasting,可是若是是一幅有一样元素,却很奇怪动做,或者微小的暗示时,人类可以一眼看出,计算机却可能犯迷糊,例如一只猫在歪着头用嘴接水龙头流出来的水。教授认为,这是由于咱们讲故事的能力深刻到了视觉系统,咱们知道猫渴了,因此它是在喝水。虽然从视觉上看跟人类喝水很不同,可是视觉系统下最本质的东西,为咱们的故事系统提供了足够证据,让咱们判别为这是一个喝水动做。这就是视觉识别中的一大挑战!
这一讲开始讨论机器学习方面的内容,机器学习专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,不断改善自身的性能,是人工智能的核心[0:00:00]。
教授首先举例讲解了机器人如何辨别流水线上不一样的产品,以此介绍最近邻问题[0:08:45]。
以后,教授讲解了机械臂如何在学习过程当中实现特定的动做,例如打球和抽熄蜡烛[0:24:15]。
最后,教授讲解了睡眠相关的研究[0:42:20]。
一个计算机程序要如何才能伸手去抓一杯咖啡并喝掉它?一只狗会把低糖可乐当作是什么东西?这两个问题你们能够先放在内心思考。
机器学习分为两类,一类是基于观测和规律性的学习,例如最近邻(Nearest Neighbors,模式识别/Pattern Recognition的领域),神经网络(Neural Nets,一种仿生/Mimic Biology尝试),Boosting算法。这类学习也能够当作推土机式计算(Bulldozer Computing)。另外一类分支是基于约束的学习,能够称之为相似于人类的处理方式,例如一次性(One-Shot)学习,基于解释(Explanation)的学习。
这节课要介绍最邻近学习:获得某种机制,生成一个关于特征的向量集合(特征检测器),它的输出值组成一个向量,进入某个比较器,比较器将会对比这个向量和存放各类可能性的库中的特征向量,经过找到最匹配的结果,比较器能肯定这个对象是什么,这样就能进行识别。什么意思?举个简单的例子,流水线上有四种不一样类型的插座盖子A/B/C/D,那么机器人该如何对它们进行自动分类?首先,它能够进行一些测量(例如总面积和孔的面积),这样能够获得四个特征点/向量(横坐标为总面积,纵坐标为孔面积,在高维中也相似),那么当新来一个插座盖子时,它能够很轻易的获得对应向量,并计算它离以前每一个向量的距离,最近的就是最匹配的。那么如何判断离哪一个特征点最近?咱们对每相邻的两个特征点做垂直平分线,那么它们会彼此分隔,造成一个个区域,落在这个区域内的,就称为离该特征点最近,而这些分隔线就称为决策边界(Decision Boundaries)。那么若是如今有个全新设计的插座盖子,它的孔面积和以前的B最接近,那么你以为它的总面积会和谁最接近?大部分的人都会选择B吧,由于若是某个东西在某些方面很类似,它在其它地方也有可能很类似。
再来看一个例子,在信息检索中,你有一些来自不一样杂志的文章,你感兴趣的是学习一些解决特定问题的内容,那么怎么去找同你的问题最具关联的文章?一个简单的算法是统计当前库中文章的词汇所出现的次数,并同要探索的问题中词出现的次数进行比对。举个二维例子,你感兴趣的关键词是Hack和Computer,那么假设A杂志出现这两个词差很少次数,B杂志出现了不少次Hack,但极少出现Computer,那么确定是A杂志更符合咱们的要求。可是在计算机二维比对中,也许你要探索的问题中词的出现次数特征点距离反而离B杂志更近!这时使用距离去测量就不合适了,改为用向量之间的夹角反而更合适,这就是非标准测度。
接下来咱们来看机械臂中的应用,假设有个机械臂,由A/B/C三段组成,A/B之间的夹角为a,B/C之间的夹角为b,咱们企图让C末端的手握着一个球沿特定的轨迹运动(根据咱们设定的速度和加速度),那么球的运动轨迹能够转换成a和b的变化,可是想要获得精确的数学表达式以此来控制,是不太现实的,除了数学表达式极为复杂,也在于微小的改变(如机械关节处的磨损),也会影响最终运算的结果。咱们能够换一个思路,假设咱们有一张足够大的表,对于小球运动轨迹中的每一小段,都存储了对应的角度,速度,加速度和机械扭矩等信息,那么咱们让机械臂从头开始,每一次的运动调整中都对这个表进行数据增添和更新,直到它掌握了足够多可能的数据,那么它就会逐渐趋于稳定和准确。
相似于棒球手投球,假设身体每一个关节能够用100字节信息来记录,投手全身参与的关节有100个,投球轨迹能够分红100段,投手天天投100次球,一年练习100天,能活到100岁。这样的话,这个信息大小(1012)也还不算太大以致于没法存储。那么人的大脑中有多少神经元(小脑1011)?多少突触(105)?那么咱们确实是能够经过不断练习,更新咱们的表格,达到更好的技术水平。
在上面的例子中,有几个问题须要注意:1. 不均匀问题/散布问题(x集中于一段范围,y处处分布)能够进行正规化数据处理;2. 什么起了做用(有没有答案是彻底不依赖于y的情形?);3. 若是答案彻底不依赖于数据呢?
最后一部分关于睡眠的研究告诉咱们:睡眠很重要,缺眠很严重,不要再熬夜!
回到最开始的两个问题,第一个问题,咱们已经知道如何控制机器手臂的轨迹。第二个问题跟这门课有什么关系?狗不会知道为何要和低糖可乐(为了避免要长胖),它缺少给本身讲故事的能力,把这两者串联起来(好吧,又是讲故事!)。这提醒咱们要小心混淆关联性和因果性。
这一讲继续讲机器学习方面的内容。
首先,教授介绍了识别树的概念,这是用一系列测试标准判别某个体属于哪一类的树[0:00:00]。
以后,教授考虑了大数据的状况,这时就有必要引入无序度的概念,来衡量测试的质量,这部分借用了信息论方面的知识[0:21:43]。
最后,教授在前面的基础上进行完善,考虑了数值数据如何处理,并同以前的最近邻算法进行了对比[0:40:30]。
若是想要根据判别一些特征,来肯定眼前这个生物是否是吸血鬼,能够用到上一节课的方法吗?要注意到这里与上一节课的例子有些不一样之处:这些特征不是数值的;一些特征并没什么用;一些特征只在部分状况有用;有些测试可能比其它代价更大;所以,这里咱们但愿构建一个测试集,获得不一样的结果,而后可能还须要不一样的测试,直到最终肯定结果,这称为识别树(Identification Tree)。例如,咱们能够考察他们是否有影子,是否怕大蒜,面色,口音,这些特征有些有很好的区分做用,例如若是没影子,那么必然是吸血鬼,可是有些并不能很好的区分,例如面色和口音。若是咱们想尽量地区分吸血鬼和正常人类,应该怎么作?简单的想法就是看看有多少样本在同质子集中。怎么理解呢?以影子测试为例,假设有8个样本,无影子的有1个,有影子的有3个,没办法得知的有4个,那么在同质子集中的就是1+3=4个,剩下4个还须要另外的测试(例如大蒜测试),才能划分开。依次能够分别获得各类测试的同质子集样本数,而后选择从最优的开始。
上面这个方法对于处理大数据集有什么不一样?困难之处在于对于大数据集,没有测试可以马上获得任何同质子集,须要有更精密的方式去测量分支底端的这些集合有多无序,即无序度(Disorder)。这须要借用信息论的知识,这里就不详细介绍了,感兴趣的能够看看信息论中关于熵的相关教程。熵的概念其实很直接,也很直觉。你以为上面四个特征哪种测试最不靠谱?直觉会告诉你口音,或者面色,误判的可能性很大,事实也确实如此,它们的熵也确实较大。
最后来看看上面的方法和以前的最近邻算法的对比。最近邻中咱们采用决策边界(每两点之间的垂直平分线)来划分不一样的区域,那么在识别树中呢?咱们会先肯定一条线,分红两个子集,而后再对每一个子集采用一样的方法划分,所以最后获得的区域就会与最近邻有所不一样。那么它的优势在哪里呢?你不须要使用全部的测试,只需使用看起来对你有用的测试(就像咱们也许只须要影子测试和大蒜测试便可),这意味着测量技术变简单了,代价也更小。
这一讲继续讲机器学习方面的内容。
首先,教授介绍了生物学上的神经网络,并将其推广到人工智能领域,对其进行建模[0:00:00]。
以后,教授讲解了性能函数,并讲到如何对其进行优化,详细讲到了梯度上升法[0:10:40]。
再后,教授详细进行了相关的偏导计算,并深刻探究了反向传播算法[0:25:36]。
最后,教授讲到了神经网络算法相关的一些问题,并给出了示例[0:40:45]。
人脑中充满了神经元,神经元除了有细胞体/细胞核,还有个长的突出——轴突(一般分叉成两支),而另外一边有许多的树突树(以便下游轴突链接),这样就完成了互连,能够传导兴奋。其中,一些突触相对更重要,做用更大,也就是说存在突触权重;另外一个是积累效应,对刺激进行积累,最终决定是否继续传导;还有一个就是对于传导来讲要么全有,要么全无。那么根据这三点,如何对这个生物元素建模?
对于每个输入INPUTi,通过加权Wi,而后进行汇总求和,送入一个临界值函数,输出为0/1,成为下一个神经元的输入。聚集许多这样的模型,那么就能够创建起简单的神经网络,对于输入x1,x2,...xn,通过神经网络后,获得输出z1,z2,...,zn,或者说输出向量等于输入向量与权重的某种函数(对于临界值,咱们能够采用一个小技巧消除它:就是增长一个输入-1,并设置它的权重为临界值),Z = f(X,W)。固然,若是咱们有一些训练样本X,咱们能够获得理想输出D = g(X),那么咱们但愿有一系列权重W,让实际输出f(x)和理想输出g(x)对应起来。那怎么衡量权重的好坏,它能够是f和g的函数,称之为性能函数P(D,Z) ,简单的形式是-1/2||D-Z||2,经过求它的最大值,能够获得最优的W。
怎么求多元函数的最大值?梯度上升法(垂直于局部等性能线的方向)也许能够考虑,可是由于它须要求导,因此对于阶跃函数并不那么方便处理。But,没有人要求临界值函数必须是阶跃函数,为何不设置临界值函数是平滑上升的呢?所以,考虑数学计算的方便,咱们能够求解这类问题。举一个最简单的神经网络例子:一个输入x1,乘上权重w1,获得p1,通过临界值函数1/(1+e-α),获得y,乘上另外一个权重w2,获得p2,仍然经过临界值函数获得z,进入性能计算函数,获得p = -1/2(d-z)2。假设本身有一些样本,具备理想的值d,那么,能够观察实际值z,调整权重使两者趋于一致,其中可能须要用到偏导计算(详见课程,其实不难)。经过计算能够得出结论,咱们想要求导的只基于咱们已经计算出来的和相邻的东西,这也称为反向传播算法(Back-Propagation Algorithm)。首先计算离输出最近的w,获得这些后,就获得了足够的信息,就可以往回一步,计算出下一列的w值,而后继续往回,直到回到最前面,最后一列中作的计算,同在中间一列的计算量相同,这是一种局部计算。
最后来看看神经网络算法中的几个问题(凡事问五次为何,不要相信你的直觉):第一个是,上面这种计算其实是在作什么?(其实不过是曲线拟合,有不少种方法,如傅里叶变换,这个优点在哪?);第二个问题是,假设有一个赛马相关问题,如何将参数编码到输入向量中,以此反映出问题的实质?(这是最难的部分);第三个问题是,如何防止过分拟合带来的扭曲?第四个问题是,如何选择调整速率常数,避免猛烈的正反馈情形;
这一讲继续讲机器学习方面的内容,主要内容是遗传算法,这是一种对生物和进化的模仿,教授首先介绍了相关的生物学知识[0:00:00]。
第二部分,教授介绍了朴素的进化算法[0:07:20]。
第三部分考虑了对算法的一些改进(包括模拟退火算法)[0:20:50]。
最后,教授介绍了一些遗传算法的例子,包括用方块模拟的生物进化[0:35:10]。
在繁衍生殖中,染色体会纠缠在一块儿进行重组,并进行细胞分裂(其中可能有突变或交叉互换),最后基因型过渡成表型,造成个体。这些不一样的个体(携带不一样的染色体组合)具备不一样的适应性,影响存活到下一代的几率,通过天然选择,又从表型转化为基因型,重新开始下一轮的繁衍。
在机器学习中,咱们能够对其进行仿生模仿,若是咱们能获得适应性函数,那么咱们能够由适应性来决定子代的存活几率,全部子代的几率之和为1。举个简单的例子:假设在一个空间中,适应性是x和y的函数f(x,y),有两个个体(0.3, 0.7)(0.6, 0.2),突变算子会让这些值发生一些变化(如0.3变为0.2),交叉互换法则则会交换不一样值对的x和y(如产生(0.3,0.2)),那么这些子代通过天然选择和不断繁衍,函数值高的存留下来,低的被淘汰,最终接近函数值最高点(也有可能只是在局部最高点中)。另外一种思路是咱们不关心适应性具体的值,咱们只关心全部候选者的排序,其适应性数值自己不做为决定的标准,这称为排序空间法(Rank Space Method)。排名第1的子代被选中的几率为Pc,排名第2的子代几率为(1-Pc)Pc,依次类推(也有可能困在局部最高点中)。
注意到为了不困在局部极大值中,咱们能够一开始选用长的步长,而后慢慢缩小步长,这称为模拟退火(Simulated Annealing),来源于对金属加热,会让原子震荡剧烈,慢慢退火冷却后,原子震荡也下降。另外,若是困在局部最大值中,失去了多样性,那除了适应性,为何咱们不顺便测量多样性呢?考察同已选个体之间的差别。例如,咱们在选择中,第一个选适应性最强的子代,第二个选择与第一个差别最大的个体,也就是多样性最强的,依次排序选择,当你达到最高区域时,能够没必要再考虑多样性,你只需留下适应性最强的子代。
其实,生物进化很直观,若是这个物种是地球最强者,环境变化也不明显,那么可能几亿年来,都没什么太大进化,局限于一个物种中。而对于更底层的物种,想要存活,就必须有必定的多样性,经过适应性不断进化。这是朴素的天然进化。
回过头来再看一下遗传算法(Genetic Algorithm),其中许多地方仍是能够调控的。突变其实仍是在登山,生成一些扩散后用适应性指标来登山,处理方式能够有不少选择;交叉互换就是企图将多个个体的优势综合到一个个体身上(这也是为何不少人相亲时总会考虑后代的优良),也能够有许多选择;而从基因型向表型的转变,能够由设计者去决定;剩下的也均可以去设计调整。
来看一些实践应用吧。一个是在计划的编排上(须要一系列步骤),S1, S2, S3, ...,若是你有两个计划,那么你能够对二者进行重组,生成新计划。另外一个是在赛马的预测上,若是你有一套完美的基于规则的专家系统,那么也许你能够预测出不一样子代的存活几率,决定你的胜负。还有一个是若是你来设计一个类机器人,由不一样的多面体构成,每一个多面体具备不一样的运动方式,其目标是让其运动最快/跳的最高/战斗力最强,那么在这过程当中,你会看到衍生出了各类奇形怪状和奇怪姿式的机器人,但若是你的算法足够好,时间足够长,那么你能获得较完美的形态。
最后思考,具体应用中的遗传算法使人惊叹之处应该归功于编程者的心灵手巧,仍是算法价值自己?其实真正的贡献在于空间的丰富性和编程者的聪明才智,而不在于遗传算法自己有多好。
这一讲继续讲机器学习方面的内容,首先介绍了音韵学方面的基础知识,讲到了音素、区别性特征等概念[0:00:00]。
以后,教授引出了Yip-Sussman机器的概念,并经过一个课堂演示讲解了它在音韵学方面的用途[0:14:00]。
最后,教授介绍了稀疏空间的概念,并总结出了好的AI算法应该知足哪些要素[0:37:15]。
前面的课程中,介绍了机器学习的一些基本方法(最近邻,识别树等),而后又介绍了一些生物学算法(神经网络,遗传学等),但其实教授并非很推荐这些算法,由于运用这些算法,就像绑了腿的狗在走路,可能须要不少巧妙的训练才行。这节课开始,将会聚焦于问题(Problem),而不是机制(Mechanism),以后再回归到理论自己。
先来看一个问题,horse的复数是什么?horses['hɔ:sɪz];dog的呢?dogs[dɔgz];cat呢?cats[kæts]。虽然末尾都加了s,可是发音方式却不一样,可是你却没必要特别去记,却总能发对音。该怎么解释呢?机器又是如何学习这些规则的呢?
两位工程师Yip和Sussman求教于Morris Halle,后者设计了区别性特征理论(Distinctive Features):假设有一我的/物,说了一小段话(其实就是从嘴里发出了一段声波),进入收听者的耳朵里,并进行处理,生成一个区别性特征向量的序列(Sequence of Distinctive Feature Vectors)。它是一个二进制变量,例如根据发音时声带是否振动置某个标志位为0/1。根据最初的理论,大约有14个这样的区别性特征,可以决定一个音是什么(因此理论上一门语言能够有214个音)。这个序列通过处理后,能够产生意思(Meaning),而这些处理会反馈到区别性特征向量的生成中。(顺便说一下,视觉对于发音有必定的干扰/辅助做用,就像学外语的人,若是想要纯正,最好是观察Native Speaker的口型)。根据这个理论,若是发声的是个木偶,只是含有5块嘴部肌肉,那么能够经过控制这些肌肉发出区别性特征向量的组合序列,从而被人类所识别。举个简单的例子:Apples的四个音标['æ p l z],考察音节性(Syllabic,可否造成音节的核心),那么向量为[1 0 0 0],考察有声性(Voiced),向量为[1 0 1 1],依次类推,获得一个向量序列,或者说矩阵。
如此,咱们即可以设计一个机器,来解释词汇和声音,从而生成语言的声音。这个机器有个神秘的装置可以察觉外部的世界(例如看到外部有两个苹果),有寄存器可以存储一些概念(名词/动词/复数等),有词汇库存储各类词汇(苹果,香蕉等等),有一系列的约束条件(如复数约束等,也称为传播器),还有一个能发出声音的缓冲器装置,这些装置之间彼此按必定的组织联结。那么这个机器如何运做?1. 视觉系统生成两个苹果的概念;2.1. 信息流入词汇库获取到单词“apple”;2.2. 信息流入寄存器获取到概念“复数”;3.1. 信息从词汇库流入寄存器获得“名词”“复数”,而不是“动词”;3.2. 信息从词汇库流入缓冲器[æ p l];3.3. 信息从寄存器流入约束条件,激活复数约束;4. 缓冲器中的缓存向前移动;5. 缓冲器向约束条件发送当前缓存;6. 复数约束判断最后一个字母是l,在缓存后端加上z;最后缓存被输出成声波,也就是“讲话”。而这一切也都是可逆的,若是你听到“Apples”,那么你的视觉系统就能想象出多个苹果的场景。这就是人类设想的一种能使用学习到的音韵学规则的Yip-Sussman机器。
问题是,机器如何学习这些规则?咱们固然能够“告诉”机器具体的规则,但若是想要机器本身学习掌握呢?回到一开始的问题,咱们采用区别性特征理论去分析cats和dogs,能够分别获得两个14x4的矩阵(14个区别特征,4个音),最后一列是咱们但愿获得的s/z,那么考虑前面的14x3矩阵究竟有何不一样?或者说究竟什么样的矩阵后面应该接s,什么样的后面接z?或者换一种思路,对于这个14x3的矩阵,其中哪些值可有可无,即使去掉它们,也不影响咱们区分后面接s仍是z?一个算法以下:1. 收集正例和反例;2. 选择一个正例(称为种子Seed),如cats;3. 开始推广(Generalize),即选择矩阵中的一些音素,再也不考虑它们;4. 逐步推广,直到咱们忽略了太多的音素,而致使反例也被当成正例处理,那么就退出;当中还有个问题,应该选择什么音素不考虑?随机挑选并不可取,从经验上来讲,越后面的列应该重要性越高,因此应该从第一列优先挑选。这样,通过足够的学习,在14x3的矩阵里,机器滤除掉了大部分音素,学习到了只有最后一个音是无声且不是咝音时,复数化结尾发s音。考察其工做原理,咱们发现实际上是对空间进行束搜索。
为何这个算法能奏效?Yip认为它能奏效的缘由在于这是一个稀疏空间(容我回去翻翻研究生的《矩阵论》教材o(╯□╰)o),对于高维稀疏空间,很容易将一个超平面放到空间中,将一组例子和另外一组例子区分开来。有些抽象哈!举个简单例子,两个白色的点在三维空间中的坐标是(0,0,0)(1,0,0),两个紫色的点在三维空间中的坐标是(0,1,1)(1,1,1),若是投影在一维空间x中,两个白色(0)(1)和两个紫色(0)(1)没法区分;投影在二维空间中,能够很容易区分白色(0,0)(1,0)和紫色(0,1)(1,1),只需选择y=1/2便可;那么在三维空间中,则有更多的二维平面能划分两组颜色,如(1/2,w,w)(w,1/2,w)(1/2,1/2,w),w表示无需考虑;这种高维稀疏空间的特性让事物具备可学习性。换一种解释是,在14维的高维空间中,相似英语语种的40个音随机分散在整个空间中,那么它们的大体距离将会类似,确保了音素在说话时很容易被区分。
那么,本节课的这个例子对咱们有什么启发?以Marr的问答法catechism来回答,当处理AI问题时,首先你须要明确问题(Problem);下一步是设计一种表示方法(Representation);以后肯定一个处理方式(Approach),能够是一个思路,也能够是一个方法;再以后选择一个机制(Mechanism),或设计一个算法(Algorithm);而后进行实验(Experiment);固然,不必定是线性向下的,中间可能会有不少回路。科学研究就是如此,从问题开始,以实验结束。Yip和Sussman的工做正是马尔问答法在AI领域中实践的典范。不过许多搞AI的人喜欢抓住机制不放,套用到全部问题上,这是不合适的作法,正如你不会想用某种神经网络来处理全部人工智能问题。
最后还有几个问题:什么是优良的表示方法?特征一是要明确(Explicit)表示正确的东西,也就是例子中的区别性特征;特征二是可否让约束条件暴露(Expose)出来,才能方便更好的建模;特征三是局部性标准(Localness),让咱们能从局部的范围看到正确答案;这些common sense会让你变得更优秀!
这一讲继续讲机器学习方面的内容。
首先介绍了一次性学习(one-shot learning)的概念,讲解如何经过相近差错(near miss)从每一对例子中学到确切的知识[0:00:00]。
以后,教授将这方面人的学习同机器学习进行了详细对比[0:14:30]。
最后,教授经过一次性学习的概念,总结出了一个好的概念应当知足哪些特性才更容易出名[0:37:30]。
前方高能!!!这堂课将是整学期中最重要的一课!(第二重要的是告诉咱们睡眠很重要的那课)
想知道如何让本身变得更聪明吗?如何将本身的想法包装,成为最受青睐的人?这节课不容错过!
不过为了引伸出这方面的内容,咱们先来看一下如何从每一次的例子中学到确切的知识。在例子1中,有个初始模型(Initial Model),有两根立柱上面放着一块平板的物体,相似于π,咱们能够把它称做“拱形”;若是咱们把平板从立柱上拿下来,放到桌面上,那么它就不能被称为“拱形”了,尽管它拥有的元素同初始模型同样,但少了支撑关系,咱们把它称做相近差错(Near Miss)。因此咱们能够获得结论:支撑关系很是重要,必须有支撑关系,不然不能称为拱形。这就是进化后的模型,加入了一些重要的约束条件,这种启发式叫作要求链启发式(Require Link Heuristic)。这也是从一个例子中学到确切的知识的体现。再来考察一个例子2,若是物体下面两个立柱紧靠在一块儿,相似T,或者能够说多了接触关系,那么它也再也不是拱形,这也是一个相近差错。把这个差错同进化后的模型比较,获得一个新模型,包含了支撑关系,但不能有接触关系,这种启发式叫作禁止链启发式(Forbid Link Heuristic)。在例子3中,同初始模型同样,惟一不一样的是顶部平板被刷成了红色,那么它仍然是一个拱形。因而咱们能够再次进化模型(注意到这里不是相近差错,而是扩展了一个例子),包括有支撑关系,不能有接触关系,顶部平板必须是白色或红色,这称为集合扩展启发式(Extend Set Heuristic)。那么假设你试过了全部颜色,都不影响它成为拱形,那么咱们就能够修改模型的一个条件为顶部平板颜色属于全体颜色集合,这称为丢链启发式(Drop Link Heuristic)。或者咱们把顶部换成一个三角体,向上拓展能够是积木,能够是玩具,或任何物体,这称为爬树启发式(Climb Tree Heuristic)。依次类推。
上面这种方法适合存储和计算容量有限的物种进行学习。而对于计算机来讲,它能够有更批量的方式。例如如何让计算机区分两组不一样的物体。假设你有一组正案例,一组反案例,那么从正案例中选一个种子,对于它的精确描述几乎只有它自己可以符合,而后咱们逐渐利用启发式放宽描述(就像上例中同样),造成新的描述,让更多的正案例可以被涵盖;但若是你放宽的同时又包含了反案例,那么能够利用启发式缩小描述,排除反案例。只是若是你的启发式不少,那么造成的树就会很大,能够尝试用束搜索来减少计算量。与上节课的方法不一样的是,这里除了推广(Generalization),还用了限制(Specialization)。例子总对应推广,相近差错总对应限制。
接下来咱们就来看看如何让学生变得更聪明!假设有一个老师,和一个学生,彼此之间的相互做用,目的是将知识的初始状态(Initial Stae)转化为新状态(New State),让学生变得更聪明,并利用这些新知识,来作(Use)之前作不了的事。老师有一种风格(Style),学生有一个学习器(Learner),和一个使用器(User)。若是要发生学习,那么一方须要对另外一方有所了解。例如老师最好能知道学生的初始状态,若是学生犯的错误是曾经学习过的,那么老师就会知道他只是忘记或疏忽了;若是犯的错误远超于学生的知识网络,那么老师会提醒他不用着急,之后会学到的;若是犯的错误恰好在知识网络的边界,那么这就是应该学习的时候了!又例如若是老师了解学生的学习器(学习能力/计算容量),那么老师就能够采起不一样的方式传授知识。再如若是老师了解学生的使用器的计算容量,就能知道在运用知识方面存在什么问题。反过来也是同样,若是学生能了解老师的一些信息,好比创建起信任,相信老师传授的知识是正确的,或者理解老师的授课风格,看看是否是和本身比较匹配。
对于机器来讲,想要学习任何东西,每一步中,须要创建描述,没有描述,就不能区分差别,因此人类的学习也是同样。自我解释,自我对话,就是创建描述的过程,让咱们可以学习。例如在解物理题中,你会对本身说让我先画一下受力分析图,或者对本身说这里应该要运用F=ma公式,等等。这其实就是在自我学习以及运用的过程,数据显示,解题成绩好的学生自我解释的次数远超过成绩差的学生,而当鼓励学习进行自我对话后,成绩也会获得显著的进步。(固然,不是每天自言自语,o(╯□╰)o,而是经过这种方式不断学习和升级)。
最后来看看如何将思想包装起来,以得到更大的影响力,或者说如何出名:
1. 符号(Symbol)。成果应当有某种符号(Symbol)来表示,方便人们从视觉上记住你的思想,就像拱形学习(Arch Learning)中的π;
2. 口号(Slogan)。方便人们口头使用,例如相近差错。
3. 惊喜(Surprise)。相比于神经网络利用成千上万的例子,这里的惊喜就在于机器能从每一个例子中学到确切的知识,也称为一次性学习(One-Shot Learning)。
4. 突出(Salient)。一项成果想要出名,确定要有很是突出的东西。多种的好并不意味着突出,若是人们不能一想到某种思想,就想到你,那么其实它并不突出。例子中的突出就是一次性学习能够经过相近差错的使用实现。
5. 故事(Story)。人们喜欢听人讲故事,因此你们喜欢用故事包装事情。整个教育本质上都是关于讲故事和故事理解的。
若是你但愿本身的思想可以得到风投,想要得到学术职位,想要出版本身的图书,想要推销出商品,不妨问问有没有以上这些品质。你的思想就像你的小孩,你但愿它们过得最好,若是不能包装好,它们确定过很差。因此哪怕你以为搞研究的人不该老想着出名,可是你确定忍受不了被忽略,特别是本身的好东西。
这一讲继续讲机器学习方面的内容,焦点是支持向量机。
教授首先介绍了如何经过一条最宽的街道将两类样本点分开[0:00:00]。
以后,教授详细给出了支持向量机概念中涉及到的数学推导,并由此获得了一个很是妙的结论[0:15:10]。
最后,教授演示了一个demo,并讲解了核函数的概念和应用[0:38:50]。
这节课回到决策边界的问题,假设你有一个空间,包含正案例和负案例,那么如何将两者区分?以前的课程中咱们学到了不少方法,最近邻,识别树,神经网络等等,在不少人都认为不太可能有什么新的技巧突破时,Vladimir Vapnik提出了一种新的思路:正负案例的区分应该由一条直线完成,一种显而易见的想法是这条直线在正案例和反案例的“正中间”,使得不会偏向任何一方,那具体应该怎么肯定哪里是正中间呢?若是咱们能作一条最宽的“街道”将正反例区分开来,那么这条街道的中间线就是咱们要肯定的直线!
有了这个思想,该怎么制定决策规则来区分正反例呢?(如下推导略微复杂繁琐,不感兴趣可跳过直接看结论)假设有一个向量ω,垂直于分隔中线,长度任意。对于空间中任意一个未知样本,咱们但愿知道它是在街道的左边仍是右边,为此,咱们将其对应向量υ投影到垂直于中线的方向上,即做点乘ω·υ,投影值越大,那么越可能在街道的右侧,咱们假定这个值为常数c,那么若是ω·υ ≥ c(或者说① ω·υ + b ≥ 0,其中b = -c),咱们说这个样本在街道右侧(即正例),这就是咱们说的决策规则。问题在于,这个规则中的向量ω和常数b该如何肯定?已知的条件就是ω垂直于中线,但长度不肯定。换句话说,咱们没有足够的约束条件来限定这两个未知数。所以咱们试着添加一些约束条件,例如,既然①式必须≥0,咱们则进一步要求其≥1(相似的对于反案例,要求≤-1),即强化后的决策规则为 ω·x+ + b ≥ 1;ω·x- + b ≤ -1。为了数学计算便利,咱们引入变量yi,使得对于任意正案例yi等于1,对于任意反案例,yi等于-1。上式左右两边同时乘上yi,那么yi(ω·x+ + b) ≥ 1;yi(ω·x- + b) ≥ 1,而且对于边缘处的样本i,② yi(ω·xi + b) - 1 = 0。既然咱们的目标是要让这条街道尽量的宽,那么咱们就来求这个街道宽,对于街道边缘的负案例x-和正案例x+,两者之间的向量差为x+-x-,当他投影到单位向量ω/|ω|上,就是街道的距离,即(x+-x-)·ω/|ω|。由②式的约束咱们可知,对于正案例x+·ω = 1 - b,对于负案例x-·ω = 1 + b,所以街道的宽能够化简为2/|ω|。这样一来,咱们的目标就是求|ω|的最小值(或者③ 1/2||ω||2的最小值),带约束条件的函数极值。运用拉格朗日乘数法(好吧,我没学过),即转化为求L = 1/2||ω||2 - ∑αi[yi(ω·xi + b) - 1]的极值,怎么作?对ω求导,得ω - ∑αiyi·xi = 0,什么意思?就是向量ω是某些样本的线性和。一样,对b求导得∑αi·yi = 0。将这两个式子带回L中,最后获得④ L = ∑αi -1/2∑i∑jαiαjyiyj(xi·xj) ,这意味着求极值的式子只依赖于样本对之间的点积!回到决策规则,ω用前面的表达式代替,那么若是⑤ ∑αiyixi·υ + b ≥ 0,则为正例,能够看出决策规则也只依赖于样本向量和未知向量的点积!
那若是是线性不可分的样本空间呢?那么能够变换到另外一个空间,以前提到的点积也变成转换后空间向量的点积,也就是求核函数的极值。常见的核函数有:1. 线性核(u·υ + 1)n;2. e(-||xi-xj||/σ);等等。
以上就是支持向量机的思想。
这一讲继续讲机器学习方面的内容,着重讲解boosting(提高)算法。
这一讲首先总结了以前的各类学习算法,引入了分类器的概念,并讲解了如何从弱分类器获得强分类器[0:00:00]。
以后,教授讲到了各类改进,来获得boosting算法[0:11:50]。
最后,教授讲解了如何使用一些计算技巧,得到简单美妙的结果,告诉学生在考试中碰到相关问题应该怎么算[0:35:30]。
对于二分类问题,假设咱们有一个分类器h,分类输出为[-1,+1],其偏差率e在0到1之间,若是值接近一半,则称为弱分类器(Weak Classifier),咱们但愿获得强分类器(Strong Classifier),即偏差率接近0。那么可否经过“合并”多个弱分类器来实现?即H(x) = sign(h1(x) + h2(x) + h3(x)),若是两个分类器输出为+1,一个为-1,那么咱们认为它最后为+1。这个合并分类器真的会比单个更优吗?若是在样本空间中,三个分类器的错误空间彼此独立,那么咱们能够说H(x)永远给出正确的分类(由于每一个地方至少有两个分类器是正确的)!但若是它们的错误空间有相交呢?能够做为课后思考下。
那么怎么实现呢?能够考虑如下几点:① 首先使用数据不经任何干扰地生成h1,而后使用夸大h1偏差的数据(扭曲的样本子类的)生成h2,而后使用h1不一样于h2结果的样本生成h3,依次类推;② 创建这样的树结构,即踊跃投票(Get Out the Vote)思想,让许多单独的测试参与其中;③ 对于单个测试,都是一个分类器,能够考虑决策树桩(Decision Tree Stump),其测试数量取决于样本的个数和空间的维度。对于这样的测试,偏差为e=出错样本的数量/总数量。不过咱们在某一阶段但愿夸大某些偏差的效果,即每一个样本点都对应有一个权重ωi,第一步时均为1/N,且∑ωi=1,那么当前偏差e=出错样本的数量·ωi。④ 另外,对于合并咱们能够有一些改进,例如为每一个子分类器添加权重H(x) = sign(α1h1(x) + α2h2(x) + α3h3(x))。⑤ 怎么结合这些思想转换成算法呢?1. 令ωi1=1/N;2. 选择一个分类器ht,最小化时刻t的偏差,使用偏差率来肯定α;3. 计算t+1时刻的ωt+1;而后回到步骤2,进行循环,直到这个分类器对全部样本数据生成完美的结论集。⑥ 此外,假设ωit+1 = ωit/z·e^(-αtht(x)y(x)),其中z是归一化因子,y(x)同上一课相似,取决于结果而定义为+1或-1,为了数学计算的方便。那么咱们的目标是什么?就是最小化偏差!对于上面偏差的式子,当αt = 1/2·ln(1-et)/et,et是t时刻的偏差,咱们能够获得最小偏差边界。
思想上容易理解,具体实现上挺难理解的o(╯□╰)o,并且这些公式也挺复杂的,虽然也许计算机能够胜任,教授推导了一些计算过程,获得1. 取全部权重,对应以前测试中获得正确答案的那些,这些权重加起来,在下一代权重中,只须要将它们缩放1/2便可,即权重之和是以前权重之和的缩放版本;2. 实际要处理的测试数并无那么多;3. 对于过拟合这个方法能颇有效的避免。
学好人工智能,数学很重要!
这一讲首先简介了人类的进化历程,强调象征性思惟能力是让人类不一样于其它生物的关键[0:00:00]。
随后,教授介绍了内语言和语义网络的概念[0:09:00]。
以后,教授详细介绍了内语言中很是重要的三大元素:分类、轨迹和过渡框架[0:14:30]。
最后教授强调了故事讲解和理解的重要性,并告诉你们如何讲故事[0:39:25]。
以前的课程中,咱们已经提到“人类独有的一种能力,是能将两种概念合并为第三种概念,同时又不破坏原有的两种概念,而且没有限制。”而讲故事和理解故事正是将咱们同其它灵长类区分开的本质差别。因此,语言很重要!这节课咱们就来看看内语言和语义网络的概念。
一个简单的语义网络例子:假设有一个对象,由另外两个对象支持,构成支持关系,这样就有了网络,节点,连接,和一些意义。另外一个例子如:M谋杀D,致使M杀了D,那么D就拥有了属性Death。链接节点的连接就称为链接器(Combinators),另外还有连接之间造成联系的机会,例如Kill致使Death,这就至关于将连接自己看做对象,让它成为其它连接的主体或客体,这个过程称为具体化(Reification)。马文·闵斯基据此提出了一种概念:咱们须要一种局部化过程,如框架(Frame)或模板,例如谋杀动做的框架是一个动做主体,一个受害者,这就添加了一个局部化层(Localization Layer)。另外提一下,在这个问题上有寄生语义(Parasitic Semantics)的问题,例如M谋杀D,也许是由于M想得到什么利益,那么这个意义是咱们的理解,而不是机器的理解,这个意义就是寄生的。
咱们想要使用语义网络,那么咱们要问内语言的哪些元素很是有用?第一个是分类(Classification)的概念,例如斯坦威钢琴属于钢琴,钢琴属于乐器,,即Specific到Basic到General,有了分类就能够将事物组织成必定的层次结构。有了层次结构中的元素,该如何谈论它们呢?想象一辆车撞到了墙上,考虑汽车的速度,离墙的距离,汽车的情况,在撞前/撞时/撞后的状态变化,就能够获得状态变化的词汇表,如增大/减少、改变、出现/消失,这就引出了第二个概念:过渡(Transition),任何意图理解故事的系统,都会强调这个概念。第三个概念是轨迹(Trajectory)或角色框架,一个对象如何(在他人的帮助下)从一个地方运动到另外一个地方(影响别人)。有了这些东西后,就能够想办法把它们整合起来。
举个例子:根据Pat Comforted Chris这句话,能够构建一个角色框架:主体-Pat,动做-?,客体-Chris,结果-过渡框架。其中的过渡框架为:对象-Chris,心情-变好。若是修改Comforted为Terrified呢?那么Action仍然不清楚,但心情会变差。若是进一步让场景更清晰,咱们修改Comforted为Kissed,那么角色框架中就多了一个想象(Hallucination),它也是一个框架-轨迹框架,运动的物体是Pat的嘴唇,目的地是Chris的嘴唇,咱们大脑中的图库帮助咱们构建了一个场景,最后的结果也是心情变好。若是修改Comforted为Stabbed,那么在结果的过渡框架中,除了心情变差,健康也降低了,在轨迹框架中,运动物体是Pat的刀,目的地变成了Chris的身体。这就是故事序列(Store Sequence),串起了以上这些东西。另外还值得讨论的是故事库(Story Libraries),例如故事框架下,有灾难框架,派对框架等,灾难框架又能够分为飓风框架和地震框架等,派对框架也能够分为生日派对框架和婚礼派对框架等等。
最后关于讲故事:若是你想要讲故事,想要让人很快的听懂,就要确保不增长句法难度,为读者增长额为理解负担。有三大法则:
1. Don't Use Pronouns.
2. Don't Use Former or Latter.
3. Don't Call a Shovel a Spade.
这一讲介绍了人工智能方面的一些通用架构:
第一部分讲解了通用问题求解器(GPS)[0:00:00];
第二部分讲解了SOAR架构(状态算子与结果架构)[0:09:24];
第三部分详细讲解了马文·闵斯基的情绪机器(emotion machine)[0:16:16];
第四部分向详细讲解了包容架构(subsumption architecture),这也是当今主流吸尘器机器人伦巴所使用的架构[0:22:26];
最后,教授讲解了本身如今正在开发的Genesis架构[0:34:00]。
通用问题求解器(General Problem Solver,GPS)概念很简单:从当前状态C但愿到达目标状态S,那么测量两者之间的象征性差别d,可让你选择某种操做算子o,使得C到达中间状态I,继续观察I和S中间的差别d2,并选择某个算子o2,用于进一步减小差别,依此继续。这也称为手段目的分析(Means Ends Analysis)。举个例子,放暑假了,你想要从学校回老家,测量两者的直线距离d1,咱们发现正确的算子应该是搭乘飞机,可是想要搭乘飞机,就得先去机场(由d2决定),还得先走路去公交站(由d3决定),而后坐公交去机场。很是直觉!但想要使用这个框架,须要作的是鉴别可能碰到的差别,和可能用到的算子,并创建一张表格将两者关联起来,因而一种改进型架构SOAR被提出来。
SOAR(State Operator and Result)包含多个部分:一个长时记忆(包含断言和规则),一个短时记忆,以及同外部世界联系的系统(如视觉系统和动做系统)。同时它有一个精密的偏好系统(规则的优先与取舍),以及问题空间的思想(想要解决一个问题,须要发展出一个空间,并在空间中搜索求解)。此外,SOAR还有广泛性此目标创建的思想,即没法肯定下一步该怎么作时,将问题单列出来考虑它的问题空间。
通用问题求解器架构聚焦于的思想是问题求解假设(Problem Solving Hypothesis,一切都是关于问题求解的),SOAR架构聚焦的思想则是象征性系统假设(Symbol System Hypothesis)。这两种架构都严重偏重于考虑问题求解,而马文·闵斯基的架构(情绪机器,Emotion Machine)则关心分层的问题求解。例如,阅读一小段文字时,须要用到底层本能反应(听到声音,转过头),学习反应(看到飞驰而来的车决定是否要过马路),有意思考(决定冲过马路,包括SOAR/GPS),反思性思考(回想本身冲动的决定),自我反思(是否会迟到接下来的计划),自我意识思考(朋友们会怎么看他),这些层次促进了常识的创建,所以这个架构也能够说是基于常识假设(Based on Common Sense Hypothesis)。
包容架构(Subsumption Architecture),由Rod Brooks提出,不一样于以往的机器人设计(封装的视觉/推理/东西系统),其在最底层有一个系统可以避免物体,上一层是漫游,再上一层是探索,再上是寻找,等等,每一层都有本身的视觉/推理/动做系统。因此该架构没有表示(No Representation),这样也就没有了模型和有预测/理解/解释/控制,因此在这个架构中使用世界(World)而不是模型,什么意思?就是你只须要对世界做出反应,而不须要存储一张地图来避免撞到物体。另外,在其最纯粹的形式中,机制仅仅是有限状态机。这也是扫地机器人使用的架构,它包含了马文·闵斯基架构中的本能反应和学习反应。
Genesis架构的工做方式以下:它专一于语言,包含两个角色,一是指导和统御感知系统并与之互动,二是让事件描述成为可能。这就是课程一开始提到的案例中的那样,想象提着一桶满水在街上跑,结果会怎样(打湿裤管和鞋)?为何使用台锯时不要带手套(避免被牵扯卷入)?有了描述事件的能力,就能够发展出讲故事和理解故事的能力,而后就能从宏观和微观上驾驭文化。所以,该架构聚焦的思想是强故事假设(Strong Store Hypothesis)。
最后,经过一个实验,引伸出本课的两个要义:
1. 若是想让本身变得更聪明,那么须要作:Look-Listen-Draw-Talk,这些机制围绕着人类思惟的中心。这也是上课作笔记的用处。
2. Beware of Fast Talkers,由于它会阻碍你的语言处理器,令你无自主思考。
这一讲主要是一些几率相关的必要知识。
首先教授经过一个例子引出了考虑几率问题的重要性,引入了联合几率表的概念,并进行了相关演示[0:00:00]。
第二部分,教授讲解了一些基本的几率公理和定义[0:18:30]。
最后,教授引出了信念网络这一律念,并将以前所讲的几率知识用于这一重要领域[0:36:30]。
联合几率表经过肯定每一个条件因子不一样状况下的事件发生的几率可以提供很是有用的几率信息,可是真正在应用中,这个表可能会很大,或者没有足够多的时间去得到大量的数据,咱们须要专门的处理方法。
1. 基础几率(Basic Probability):① 0≤P(a)≤1;② P(T)=1;P(F)=0;③ P(a)+P(b)-P(a,b)=P(aUb);
2. 条件几率(Conditional Probability):① P(a|b)=P(a,b)/P(b);② P(a,b,c)=P(a|b,c)P(b,c)=P(a|b,c)P(b|c)P(c);
3. 链式法则(Chain Rule):P(x1,...,xn)=∏P(xi | xi-1,...xi);
4. 独立(Independence):P(a|b)=P(a),则a与b独立;
5. 条件独立(Conditional Independence):P(a|b,z)=P(a|z),则a与b在z下条件独立;=> P(a b|c)=P(a|c)P(b|c);
信念网络(Belief Nets):给定父节点的状况下,每一个节点独立于其余非衍生节点。举个例子:盗贼P出现狗D可能会叫,浣熊R出现狗D也可能会叫,狗D叫得足够大声了主人可能会报警P,此外浣熊R出现可能会打翻垃圾桶T,在这种状况下,报警与否只与父节点狗叫有几率关系,与盗贼出现,浣熊出现,垃圾桶打翻均独立。具体的计算中,假设P(B)=0.1,P(R)=0.5,B和R均不出现状况下P(D)=0.1,B出现R不出现时P(D)=1,B不出现R出现时P(D)=0.5,B和R均出现的状况下P(D)=1。一样的,D的状况下P(P)=0.1,D不发生的状况下P(P)=0.01。相似的,R出现,P(T)=0.1,R不出现,P(T)=0.001。能够看出,须要肯定10个几率值,相比联合几率表中须要肯定的25=32,个数明显减小。而经过这些值,也能算出整个联合几率表,利用的就是上面提到的链式法则和条件独立等,P(P,D,B,T,R) = P(P|D B T R)P(D|B T R)P(B|T R)P(T|R)P(R) = P(P|D)P(D|B)P(B)P(T|R)P(R)。
这一讲首先详细讲解了上一节已经提到过的贝叶斯几率方面的知识,考虑如何从一系列条件几率的乘积算出整张联合几率表[0:00:00]。
而后,教授介绍了如何根据结果来反推哪类模型更有可能正确(例若有两个硬币,抛得正反的几率不一样,如何经过实际抛掷试验,求更有多是哪一个硬币)[0:18:15]。
最后,教授介绍告终构发现方面的内容[0:42:50]。
回忆上一节课最后利用链式法则计算整个联合几率表,在那个计算方法中,咱们没有特别约定P,D,B,T,R的变量顺序,不过根据信念网络的概念,咱们应该优先考虑任何变量都处于自身非衍生节点的状况,每次都从底部开始向上取是合理的作法。另外,若是模型是正确的,观察足够多的次数,那么计算出来的几率就会很准确。
那么如何根据结果来反推哪类模型更有可能正确?这就要用到贝叶斯几率知识。咱们知道P(a|b)P(b)=P(a,b)=P(b|a)P(a),那么P(a|b)=P(b|a)P(a)/P(b),这有什么用?举个例子,若是b是证据E,a是感兴趣的分类C,那么我知道该类的先验几率和初始几率,那么就能获得在b证据下分类为a的几率,由于P(b)对任何分类都是相同的。推广到证据不少的状况:
P(ci|e) = P(e1,...,en|ci)P(ci)/d = P(e1|ci)P(e2|ci)...P(en|ci)P(ci)/d
举个例子:假设有两枚不一样的硬币,一真一假,假的硬币每次抛掷获得正面的几率不是0.5,而是0.8。那么,当我随便拿起一个,抛出第一次获得正面,第二次获得反面,请问它是真的仍是假的硬币?这就是经过结果去反推属于哪类模型。朴素贝叶斯分类(Navie Bayesian Classification)以及拓展后的贝叶斯网络(Bayesian Net)可以解决不少相似于医疗诊断,材料缺陷等等从证据往回推模型的问题。
All this probabilistic calculation is the right thing to do when you don't know anything,and you often don't konw anything!
这一讲是MIT人工智能课程的最后一节课,教授首先继续上一讲讲完了主干内容,包括模型融合、跨通道偶合[0:00:00]。
以后,教授对课程进行了一些回顾,并讲到了期末考的相关事项[0:12:30]。
再后,教授展望了将来,告诉感兴趣的同窗,后面还有哪些课程值得学习[0:20:30]。
最后,教授演示了他的团队正在开发的Genesis系统,并在此基础上进行了总结[0:29:40]。
模型融合就是将多个模型中类似的东西提取出来,融合成一个统一的模型,而跨通道偶合就是使用多个通道以及它们之间的对应关系来分析整理这些产生贡献的通道。举个例子,当你发出a的音,你能够将这个声音进行傅里叶变化获得频谱,同时你的嘴会有特定的嘴型,这能够看作两个不一样的通道,那么如何将发声的口型和声音自己联系到一块儿?假设你有一堆声音的数据,一堆嘴型的数据,那么如何将两者关联,互相标记,带有对应意义?
人工智能并非代替人来创造新财富和得到新能力,而是经过人类和计算机的协做,双方作本身最擅长的,机器不会取代人。随着云计算的发展,人们关心如何从网上获得数以千亿的信息并使用它们,但反过来,须要多少的知识就能理解故事也是很值得思考的问题。
关于方法的要点,涉及如何搞人工智能,以下:
许多专家太拘泥于机制,更好的作法是从问题着眼,科学方法,考虑问题,而后使用正确的机制来处理问题。
学完这门课程,还有什么能够继续学习的课程?能够选择马文·闵斯基的心智社会,还有Berwick的语言理解课程,及关于进化的课程。Jerry Sussman的一门课讲大规模象征性系统。以及本课教授开的人工智能创业,还有一个关于如何演讲的讲座(很是值得一听)。
最后关于教授团队的Genesis以及正在作的事情,感兴趣的能够去网站上关注下。以及关于MIT,关于读研,关于AI的要点和将来,我都建议有空看看视频课程(其实最好是全部的课程都看,毕竟,课堂上学习到的不只是AI方面的知识),留给你们两个问题:
Are people too smart?
Are people smart enough?