漫画图解人工智能读书笔记
漫画图解人工智能读书笔记
什么是人工智能
“可以完成目前人类更加胜任的工作的计算机程序”——马文·明斯基
“设计人工智能,在通常情况下,就是设计一些程序可以在合理的时间内,为一个已知的确定不可能找到正确的解决方案的问题,找到一个不算太差的解决方案”
我们一起去树林散步吧
🍔 盲目搜索:在状态空间中搜索每一种可能性(尝试每一条可能的路,如深度优先搜索和广度优先搜索)
最佳解决方案是正确解决方案的敌人
人工智能算法 放弃去获取问题的最优解决方案
🧁 启发式搜索:A*
计算机科学家将这种像鸟儿飞行般的取直线距离称作“启发式函数”(朝着接近直线的方向前进)
GPS 的示例中,A*一定可以给出最优解,但其他例子中不一定
在国际象棋游戏中获胜
雅卡尔 1801 年发明的提花织机,已经开始使用打孔的卡片引导纸针的位置,但这仅仅是机械控制。
1843 年,阿达·洛夫莱斯为计算机的雏形——查尔斯·巴贝奇发明的分析机编写了世界上第一套算法。
19 世纪末美国人口普查期间出现第一批使用计算和编程的机器。
1945 年,第一台全电子计算机 ENIAC 诞生,进入计算机科学元年。
1950 年,艾伦·图灵第一次使用“人工智能”这个词。
20 世纪 60 年代,计算机科学开始普及。A*算法也诞生在这个时期。
20 世纪 70 年代,员工可以输入和查询企业数据。
20 年后,国际象棋领域的人工智能才开始打败人类。
这两个时代之间,人们发现机器需要科学家提供算法,只能解决很特定的问题,这并不智能。
普通大众的失望对人工智能产生了巨大打击, 1980 到 2010 之间,几乎没有企业在这类领域投资。
许峰雄和莫里·坎贝尔,IBM(国际商业机器公司)的两位工程师,就出现在 20 世纪 80 年代末,他们的目标是构建一个能在国际象棋比赛中战胜最优秀冠军的计算机程序。
20 世纪 80 年代,IBM 研制出超级计算机“深思”,每秒可以计算 3000 步棋,但 1989 年输给加里·卡斯帕罗夫。
1997 年的深蓝拥有 256 个处理器,可以在 3 分钟的时间内计算 2000亿步棋,大获全胜。
但是是一个旧的算法!
这个算法甚至可以追溯到计算机出现前(20 世纪 20 年代末),由 约翰·冯·诺依曼提出。
冯·诺依曼专注于研究信息完整且不会出现偶然性的双人对弈,证明了 极小化极大 算法可以确定这些游戏中所有最佳落子位置。
20 世纪 50 年代出现的一种帕克游戏“六贯棋”,极小极大定理证明存在一种算法可以计算最佳落子位置。发明者约翰·纳什找到了先手必胜的策略,但计算机无法算完。
🍬 极小化极大算法:先尝试所有落子位置,再尝试对手可能的落子位置,再尝试所有回击,以此类推,直到一方获胜。
五子棋存在约 26830 种局面,该算法可以直接完成计算。
但国际象棋存在约 10^120种可能局面(比宇宙中原子数量还多),不可能计算完。
为了战胜卡斯帕罗夫,计算机科学家求助于人工智能算法——电脑会下棋但也会犯错,也需要借助人类的判断。(启发式搜索)
极小化极大算法引入了 两个基本思想
🍺 只计算有限步,不会算到终局;
🍻 虽然没达到终局,但仍可以采用某些方法给这些中间局面打分。如子力价值、站位。
一些细节
极小化极大算法可以“修剪”掉一些已经证明无法给出最佳结果的树形结构的分支来进行优化。这被称为“Alpha-Beta 剪枝”算法,由 1956 年在达特茅斯会议上人工智能领域最著名的研究人员之一的 约翰·麦卡锡提出。这个理论并不涉及新的启发式算法,因为根据极小极大定理,被剪掉的分支“肯定”是不好的,所以这种操作不会有损失。
接下来要计算各种情况下棋子的价值,这需要象棋专家;还需要一台超级计算机和一支强大的工程师团队。
一场虚假的胜利
深蓝在 20 世纪 90 年代末的胜利并没有为人工智能带来预期的积极势头,因为这场比赛对普通大众和专业人士来讲都没有说服力。
理由也很充分,计算机有几步棋走得很不好,它的计算无法预测所有可能性,也缺乏可以与人类相提并论的战略思维。这场胜利也没什么可以骄傲的,几句比赛都是平局,决胜局看起来更像是因为机器不可思议的一步棋导致卡斯帕罗夫失误,而不是由于它的才能。人们并不了解极小化极大算法,但他们觉得 IBM 的计算机只不过是用一种愚蠢的方法,通过蛮力取得了胜利。
旅程还在继续
旅商问题
贪心算法 最早的人工智能算法之一(启发式算法),每次选最近的没去过的城市(最近邻算法)
除了状态空间(在状态空间中漫步就可以得到一个解),还有另外一个空间——解空间,空间中每个点是一个解决方案。贪心算法仅满足于在空间中找到一个点。
显然,这个问题的解空间有阶乘规模。
禁忌搜索算法 从解空间中第一个解决方案(如贪心的结果)出发,环顾空间中相邻的解决方案(调换两个城市的次序,得到的方案与原方案相邻),选择成本最低的方案(但可能高于原方案)然后算法继续寻找新方案的相邻方案,一段时间后就可以停下,选一个最好的。算法禁止探索已经思考过的方案,禁忌搜索算法由此得名,由科罗拉多大学的弗雷德·格洛弗在1986年提出。可以搜索任何人工智能问题的解空间。
达尔文 2.0
探索解空间最著名的人工智能算法之一是 进化算法。最初在1965年由德国研究员因格·雷兴伯格发明,20世纪90年代后期,人工智能对此技术产生了兴趣。
随机选择两个解决方案,用这两个点生成新方案,重复多次,得到包含初始方案在内的大集合。然后删除其中比较差的方案。算法还会“突变”小概率交换某两个城市的顺序。
进化算法,像禁忌搜索一样,被称为“元启发式算法”,因为它是在解空间中工作而不是在状态空间。
小而强悍
一种新的人工智能方法:多主体系统,“多人共同解决一个问题”。
多主体系统 出现于20世纪90年代初期。像建造城市,先绘制不同区域,再对每个区域进行设计。这种系统有点像蚂蚁窝,每只蚂蚁做着简单重复的任务,但是整体看起来很复杂。
设计多主体系统需要定义每个主体的工作内容,以及他们如何交换信息、协作解决问题。
用来解决旅行推销员问题的多主体算法恰好被称为 蚁群 算法,1992年由意大利研究员马尔科·多里戈发明。蚂蚁寻路时留下信息素,远的路信息素会挥发,留下的就是很多蚂蚁都走了的更短的路。
多主体系统的优势体现在它不需要以算法的形式描述计算中不同部分之间的关系,解决方案的构建可以一点一点地设计,每个主体仅关注问题的一个方面。这个方法被称为“分布式人工智能”,因为解决方案的计算分布在不同的主体之间。
多主体系统在工厂控制生产、协调电力系统中应用广泛。尤其是不稳定的新能源出现后。
做一些调整
理解神经网络之前先看看聚类——把相似数据聚集在一起,也被称为“无监督分类算法”。
k均值聚类算法、基于密度空间的dbscan聚类算法、最大期望算法、Slink算法……
k均值算法1957年由雨果·斯坦豪斯发明。
没有正确的解决方案 ,一切都取决于你想对结果做什么。
手动编写人工智能
让人工智能识别语音指令并执行——20世纪60年代末 特里·威诺格拉德手动编写的程序,有时需要预见十万种可能的语言表达
第一个监督学习算法可追溯到20世纪50年代后期。亚瑟·塞缪尔使用极小化极大算法玩西洋跳棋,让算法利用之前棋局的“经验”。
几乎同一时期,弗兰克·罗森布拉提出另一种学习算法,可以识别图片中的三角形。
因此,训练机器执行任务而不是编写如何执行任务的程序的想法并不新鲜。
20世纪70年代末,波兰研究员理夏德·米哈尔斯基编写了一种可以处理符号变量(逻辑公式)的学习算法,使用的数据模型被称为 $VL_{21}$ ,是一种描述逻辑。
逻辑推理规则是米哈尔斯基算法的核心。它们全部由研究员“手动”定义。事实上,计算机会自动用描述逻辑 $VL_{21}$ 语言来构建决策规则。
这类方法在推荐系统中是特别有意义的。比如k均值算法会推荐你相似商品,但不知道原因。而这种算法会告诉你 你喜欢某种类型的商品。
这类方法也有局限性,最重要的是,输入端必须是符号数据,研究员必须描述各种细节(车厢大小,商品种类,价格,品牌……)
另一个问题是系统会越来越复杂。比如识别车辆,随着新型号汽车的出现,判断逻辑的复杂度上升很快。
因此20世纪90年代,人工智能的研究人员开始转向其他方法,机器不再直接操作决策规则,而仅仅通过变量来校准程序,例如k均值聚类算法。这种学习类型被命名为“数字学习”。
学会数数
本章将学习什么是 统计学习
符号学习旨在直接构建用逻辑(或其他模型)编写的程序,而数字学习只是在操纵变量值与结果之间的关联。这样获得的“程序”本身就是一组数值,如 k 均值的 k 个中心点。
20世纪90年代末,监督学习的数字方法还没被发明出来。20世纪50年代末为西洋跳棋或三角形设计的首批监督学习模型已经在遵循此原理运行。
直到20世纪80年代,符号人工智能的拥护者在人工智能领域一直占据主导地位。可解释和需求数据量小是其主要优势。
1986年,罗斯dainty昆兰提出了一种具有里程碑意义的算法: ID3.这个监督学习算法会在数据集中的一系列实例基础上自动构建决策树。
另一种方法是“大间距分类器”,又名支持向量机(SVM)算法。1963年提出。使用更少的示例来对数据分类。
然而,直到20世纪90年代,没有人对这个方法表现出很大的兴趣。这种方法对两个类之间的分隔都是线性的,有时候可能效果不佳。
但是在1992年,内核技巧(Kernel trick)被提出,让支持向量机可以进行非线性分类。这个函数的内核是在特征空间中测量两点之间的相似度,相当于k均值算法中的距离函数。在支持向量机中,这个内核可以计算间距从而获得分类器。
万普尼克和他的同事们产生了一个伟大的想法:在内核中添加虚拟特征,从而强制算法在更大的维度空间中进行工作。
支持向量机于21世纪第一个10年在计算机科学领域取得了惊人的成就。
学会阅读
建立人工神经元的想法并不新鲜,可以追溯到20世纪中叶人们对人脑功能的理解。1949年,美国心理学家唐纳德·赫布提出了脑细胞、神经元是学习机制的基础的假设:即同一时间被激活的两个神经元之间的联系会被强化。今天神经生物学家已经了解到大脑的机制比这个复杂得多。
20世纪50年代中期,科学家们对最早的网络进行编程,以模拟人类神经元的功能,这也是用“神经元”这个名称来定义此计算的起源。然而人工神经网络创世事件是弗兰克·罗森布拉特在1957年发明的感知器。识别三角形二值图,如某次输入是三角形但输出是0,就把输入为1的神经元权重增加。
三角形问题的成功鼓舞人心,但并未持续太久。1969年两位著名的研究人员出版了一本书,使研究停滞不前。一位是马文·明斯基,人工智能元勋之一;另一位是西蒙·派伯特,LOGO语言的发明者。他们论证了感知器只能处理线性问题,而不能处理异或问题。但是,通过增加层数,感知器其实可以处理非线性问题,识别三角形本身也是非线性问题。但很多研究人员误解了明斯基和派珀特的著作,大量文章错误引用了 “异或” 问题的例子,导致人们对感知器不信任。尽管早在1972年就有很多文章解释如何用双层感知器解决 ”异或“ 问题,但十年来没有人再对如果神经网络感兴趣。
再加一层! 1982年的科学家重新提出了类似的模型。1986年,科学家从20世纪60年代的算法中汲取灵感,提出”反向传播“的学习算法。
20世纪90年代,神经网络开始扬帆起航,但仍很难操作。神经元数量多,计算量非常大。又一个小小的暂停,训练负担是万普尼克的支持向量机在20世纪90年代取代神经网络的原因之一。直到2000年末,随着新一代计算工具的出现,一切才改变。
边画边学
2010年中期,出现了新的计算方法——在GPU上计算。这是机器学习世界中真正的革命。
游戏显卡的发展促进了神经网络。神经网络算法可以并行操作,而旅行推销员的禁忌算法等方法却无法轻易利用并行计算。
为什么要添加更多层? 理论上已经证明增加层不会计算新的东西,只要设置足够多神经元,单层网络就可以学习相同的东西。但事实上似乎并非如此。多层网络看起来像是把大问题分成了一系列小问题,取得了更好的效果。
局限性: 不可解释;容易被攻击(对抗性数据)
在围棋比赛中获胜
自20世纪40年代以来,计算机用来赢得围棋比赛的算法称作“蒙特卡洛算法”,这个名称来源于摩纳哥公国的赌场名称。算法对于每一步可能的落子,都计算1000次对局结果,然后统计最后的得分。2008年,法国国家信息与自动化研究所编写的魔围棋 MoGo 程序首次战胜职业选手,但一直无法战胜冠军。
2016年3月,AlphaGo 以四比一的比分战胜了李世石。Google 的工程师使用了蒙特卡洛算法并结合了深度神经网络。他们并没有完全随机模拟,因为机器无法真随机,更重要的是要避免明显不好的落子。
首个 AlphaGo 神经网络在这个级别上进行干预:Google 团队称之为“策略网络”。训练时通过提供棋局示例,让网络识别最不相关的落子位置。输入是19*19的黑白网格,输出是每一个可能的落子位置。
另一个网络是价值网络,帮助提前停止游戏。当某个局面某一方太差,没有必要再下下去,神经网络输出某一个玩家是否已经输了(是或否)。这让神经网络可以模拟更多局游戏。
这两个网络需要使用强化学习训练,因为找不到足够的训练数据。
很难说强化学习是什么时候发明的,一般认为第一个适用于多类型问题的强化学习通用算法是理查德·萨顿1988年发明的时序差分学习算法—— TD-lambda 算法。
所有强化学习的共同点是 不需要通过示例来学习 。可以使用反向传播,但强化学习运行的基础系统中没有严格意义上的输入。他们从初始状态(如空棋盘)开始,执行一些列操作以达到所需状态。根据最终局的结果,可以为这一系列操作设置一个分数,称为”奖励函数“。
强人工智能
强人工智能,定义适合人类拥有相同智力水平的人工系统的设计。研究人员就此区分了两个截然不同的问题:构建通用的人工智能和构建人工意识。
通用智能 目标是胜任人类所有的智力任务,没有明确标准。可能是取得大学文凭,通过图灵测试,或在陌生的屋子里煮一杯咖啡。难点在于需要一个程序解决所有这些任务。
人工意识 让一台机器可以意识到他能操作的数据之外的物理或非物理元素,或者可以意识到它本身是什么。然而哲学或数据科学领域也不清楚意识究竟是什么。
意识是如何从神经活动中产生的?
这种现象可以在机器上重现吗?
需要在哪种条件下呢?
一种想法是,可以模拟人脑的机器就能创造意识,但哲学家对此意识的纯机械观点持怀疑态度。
许多研究人员认为,身体对意识本身也有基础性的作用,就像情绪一样。
还有更多的人工智能!
詹姆斯·艾伦 以代表时间的计算机模型而闻名,这个模型可以使计算机对一些概念进行推理,如”之前“”之后“”同时“”在此时“等等。还参与了自然语言对话系统的设计。
帕特里克·梅斯 和 约翰·麦卡锡一起奠定了符号人工智能的基础。他们提出一个模型,这个模型可以展示当我们执行动作时会产生哪些变化的事实:所有事情不再是永远正确或永远错误的,为认知机器人学的研究铺平了道路,也就是关于建造有能力对世界进行推理和产生作用的机器人的研究。
理查德·菲克斯、尼尔斯·尼尔森、德鲁·麦克德莫特 规划是人工智能的一个分支,涉及的是计算可以实现目标的正确操作顺序。前两人1971年发明的STRIPS模型可以使用逻辑公式描述世界上的行动、描述目标,并且可以计算达到此目标所需的行动。应用在很多工业系统,甚至用在哈勃望远镜。第三个人发明了PDDL语言和”分层任务网络 HTN“
克里斯托弗·沃特金斯 1989年提出最著名的强化学习算法Q-Learning。
PROLOG 语言,用于”逻辑编程“,1972年,用于许多自动系统。
爱德华·费根鲍姆 专家系统”之父“,今天一些大型工业基础设施仍在使用专家系统。
洛夫蒂·扎德 模糊逻辑创始人,
艾伦·纽厄尔 的研究在20世纪80年代引发了认知架构的发展,后来出现了SOAR和ACT-R这些计算机模型,可以模拟人类的行为,用于视频游戏,使NPC产生更真实的反应。决策支持系统越来越多地使用人类行为模拟,帮助政客、领导人或者商业领袖分析复杂现象,比如政治观点的力度、能源消耗、城市空间的使用。
朱迪·珀尔 贝叶斯网络创始人。可以展示事实之间的关系,在生物信息学、信息检索和决策支持系统中广泛使用。
理查德·里森斯 1956 提出第一个通用的认知表示模型
约翰·索瓦 1976 提出概念图
罗纳德·布拉克曼 1980 描述逻辑
黛博拉·麦吉尼斯 2000年初,符号人工智能专家发明了语义网络。它可以被定义为专门使用逻辑公式为计算机编写的王爷网络,使它们能够理解人类可以访问的互联网上的内容。这些被使用的计算机模型大多基于描述逻辑,和黛博拉·麦吉尼斯及其同事们发明的网络本体语言(QWL)。现在机器可以根据互联网上的”语义“回应我们的需求,例如搜索人物时会显示一份关于他年龄和事迹的摘要。这些事迹都是从语义网络的数据中摘取的。






