人工智能
人们在日常生活中接触人工智能的频率越来越高,有可以帮用户买菜的京东智能冰箱;可以做自动翻译的机器;还有Siri、Alexa和Cortana这样的机器人助理;以及无人车、AlphaGo等已经把人工智能技术带到了“看得到摸得着”的境地。人工智能正以前所未有的态势汹涌而来,相关领域的融资总额一直在逐年稳步增长,到2016年达到数十亿美元的火爆程度。那么人工智能到底是什么?这个领域涉及哪些方面?人工智能要完成的目标和任务有哪些?接下来的内容将做一一介绍。
1.什么是人工智能AlanTuring定义的AI是:能使计算机完成那些需要人类智力才能完成的工作的科学。斯坦福大学的学者认为AI是智能机器的科学和工程,特别是智能计算机程序。维基百科定义AI是指由人工制造出来的系统所表现出来的智能,该词同时也指研究这样的智能系统是否能够实现,以及如何实现的科学领域。不管怎样定义,都离不开智能,然而到目前为止人类还没能统一地给出智能的定义,通常所说的智能也只是参考人类智慧的表现形式。原中国人工智能学会理事长钟义信教授,认为人类智慧包含发现问题、定义问题、解决问题三方面,而人工智能目前只做到了解决问题的程度。笔者认为智能是一种有序,是信息的体现,也是使世界朝着有序的方向发展的能力。可悲的是,根据熵增原理,无论智能体做怎样的努力,整个宇宙总是朝着熵增加的方向发展,即越来越无序和混乱。不知道这是上帝故意的安排,还是人类观察到的宇宙之外另有天地。
2.人工智能的历史1950年代初期,人工智能聚焦在所谓的强人工智能,希望机器可以像人一样完成任何智力任务。强人工智能的发展止步不前,导致了弱人工智能的出现,即把人工智能技术应用于更窄领域的问题。1980年代之前,人工智能的研究一直被这两种范式分割着,两营相对。但是,1980年左右,机器学习开始成为主流,它的目的是让计算机具备学习和构建模型的能力,从而它们可在特定领域做出预测等行为。、
历史上人工智能有三大学派:符号主义(symbolicism),又称为逻辑主义(logicism)、心理学派(psychologism)或计算机学派(computerism),其原理主要为物理符号系统(即符号操作系统)假设和有限合理性原理。连接主义(connectionism),又称为仿生学派(bionicsism)或生理学派(physiologism),其主要原理为神经网络及神经网络间的连接机制与学习算法。行为主义(actionism),又称为进化主义(evolutionism)或控制论学派(cyberneticsism),其原理为控制论及感知-动作型控制系统。
符号主义认为人工智能源于数理逻辑。其早在1956年首先采用“人工智能”这个术语。后来又发展了启发式算法->专家系统->知识工程理论与技术,并在20世纪80年代取得很大发展。
连接主义认为人工智能源于仿生学,特别是对人脑模型的研究。20世纪60~70年代,连接主义对以感知机(perceptron)为代表的脑模型的研究出现过热潮,由于受到当时的理论模型、生物原型和技术条件的限制,脑模型研究在20世纪70年代后期至80年代初期落入低潮。直到Hopfield教授在1982年和1984年发表两篇重要论文,提出用硬件模拟神经网络以后,连接主义才又重新抬头。1986年,鲁梅尔哈特(Rumelhart)等人提出多层网络中的反向传播算法(BP)算法。此后又有卷积神经网络(CNN)的研究,连接主义势头大振,从模型到算法,从理论分析到工程实现,为神经网络计算机走向市场打下基础。2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了深度信念网络(DBN)的概念,将深度学习推向学术界并成为当前人工智能领域非常热门的研究方向。行为主义认为人工智能源于控制论。控制论思想早在20世纪4050年代就成为时代思潮的重要部分,影响了早期的人工智能工作者。维纳(Wiener)和麦克洛克(McCulloch)等人提出的控制论和自组织系统以及钱学森等人提出的工程控制论和生物控制论,影响了许多领域。控制论把神经系统的工作原理与信息理论、控制理论、逻辑以及计算机联系起来。早期的研究工作重点是模拟人在控制过程中的智能行为和作用,如对自寻优、自适应、自镇定、自组织和自学习等控制论系统的研究,并进行“控制论动物”的研制。到20世纪6070年代,上述这些控制论系统的研究取得一定进展,播下智能控制和智能机器人的种子,并在20世纪80年代诞生了智能控制和智能机器人系统。行为主义是20世纪末才以人工智能新学派的面孔出现的,引起许多人的兴趣。这一学派的代表作者首推布鲁克斯(Brooks)的六足行走机器人,它被看作是新一代的“控制论动物”,是一个基于感知-动作模式模拟昆虫行为的控制系统。
3.人工智能的目标人工智能的目标包括:推理、知识表示、自动规划、机器学习、自然语言理解、计算机视觉、机器人学和强人工智能八个方面。知识表示和推理包括:命题演算和归结,谓词演算和归结,可以进行一些公式或定理的推导。自动规划包括机器人的计划、动作和学习,状态空间搜索,敌对搜索,规划等内容。机器学习这一研究领域是由AI的一个子目标发展而来,用来帮助机器和软件进行自我学习来解决遇到的问题。自然语言处理是另一个由AI的一个子目标发展而来的研究领域,用来帮助机器与真人进行沟通交流。计算机视觉是由AI的目标而兴起的一个领域,用来辨认和识别机器所能看到的物体。机器人学也是脱胎于AI的目标,用来给一个机器赋予实际的形态以完成实际的动作。
人工智能、机器学习、数据挖掘这些非常相关的术语或知识我们经常看到,也见到很多关于三者关系的文章和讨论。一般来说,人工智能是一个很大的研究领域;机器学习是人工智能的一个目标,提供很多算法;而数据挖掘是偏向算法应用的部分。三者相辅相成,另外也需要其他领域的知识支持。具体关系请参考下图。4.人工智能的方法为了达到人工智能的目标,下面依次梳理一下学术和工业界研究的各种方法和成果。
4.1知识的表示和推理知识表示包括:基于知识的系统,表示常识知识等。传统的知识表示已经很成熟了,包括了描述逻辑,也包括了语义网(资源描述框架RDF)。知识推理建立在逻辑上,首先需要庞大的数据集,比如freebase;其次需要关系抽取自动化工具;最后需要合理的知识存储结构,比如资源描述框架RDF。谷歌提的知识图谱概念就是一种知识工程,它有庞大的知识库和基于知识库的各种服务。早年业界研究的知识本体也是一种知识工程,研究成果有FrameNet、WordNet、中文知网HowNet等。具体的知识本体的例子请参考下图。IBM在2011年研发了Watson问答系统。谷歌在2012年提出知识图谱,作为谷歌的两大重要技术储备,一个是深度学习,形成了谷歌大脑;另一个就是知识图谱,用来支撑下一代搜索和在线广告业务。脸谱公司利用知识图谱技术构建兴趣图谱,用来连接人、分享的信息等,并基于此构建了graphsearch。其他的工业应用还有:SIRI、EVI、GoogleNow、Dbpedia、freebase等。一般一个知识工程的底层技术架构,请参考以下图示。4.2自动规划首先要说一下有限状态机(FSM),一般应用于游戏机器人,网络协议,正则表达式,词法语法分析,自动客服等。如下图是一个简单的游戏机器人状态转移和行动图。其次是状态空间搜索,最简单粗暴的是盲目搜索,就像特斯拉评价爱迪生:“如果说有一根针掉进草垛了,让他去找,他会毫不犹豫的,一根一根草挑出来找”。优化改进的版本是启发式搜索,如A*算法。这方面的应用有国际象棋Deepblue,围棋AlphaGo。AlphaGo在蒙特卡洛树搜索(MonteCarloTreeSearch,MCTS)基础上使用了深度学习,监督学习和增强学习等方法。“蒙特卡洛树搜索”是一类启发式的搜索策略,能够基于对搜索空间的随机抽样来扩大搜索树,始终保证选取当前抽样中的最优策略从而不断接近全局最优,确定每一步棋应该怎么走才能够创造更好机会。另外还包括:计划、动作和学习,敌对搜索,基于逻辑的规划方法,状态演算等内容。4.3机器学习谷歌CEO桑德尔·皮蔡在一封致股东信中,把机器学习誉为人工智能和计算的真正未来,可想而知机器学习在人工智能研究领域的重要地位。机器学习的方式包括:有监督学习、无监督学习、半监督学习和强化学习。其中的算法有:回归算法(最小二乘法、LR等),基于实例的算法(KNN、LVQ等),正则化方法(LASSO等),决策树算法(CART、C4.5、RF等),贝叶斯方法(朴素贝叶斯、BBN等),基于核的算法(SVM、LDA等),聚类算法(K-Means、DBSCAN、EM等),关联规则(Apriori、FP-Grouth),遗传算法,人工神经网络(PNN、BP等),深度学习(RBN、DBN、CNN、DNN、LSTM、GAN等),降维方法(PCA、PLS等),集成方法(Boosting、Bagging、AdaBoost、RF、GBDT等)。想要深入学习的同学请参考《机器学习知识表格》和《机器学习方法汇总》。
深度学习是机器学习中人工神经网络算法的延伸和发展,近期深度学习的研究非常火热,就在这里介绍一下神经网络和深度学习。先说两层网络,如下图,其中a是“单元”的值,w表示“连线”权重,g是激活函数,一般为方便求导采用sigmoid函数。采用矩阵运算来简化图中公式:a(2)=g(a(1)*w(1)),z=g(a(2)*w(2))。设训练样本的真实值为y,预测值为z,定义损失函数loss=(z–y)2,所有参数w优化的目标就是使对所有训练数据的损失和尽可能的小,此时这个问题就被转化为一个优化问题,常用梯度下降算法求解。一般使用反向传播算法,从后往前逐层计算梯度,并最终求解各参数矩阵。深度学习采用多层神经网络,在求解参数矩阵时计算量随层数呈指数上升。假设处理一张300300像素的图片,采用8层网络,每层6个节点,那么在全联接的情况下将有300300*6^8个参数需要计算求解。卷积神经网络(CNN)提出卷积算子和权值共享来大幅减少参数个数。另外一个问题是梯度弥散,由于sigmoid函数求导后的函数小于0.25,标准化正态分布产生的初始随机参数w也都在0-1之间。而各层的梯度是从后往前逐层求解,且前面层的梯度是来自后面层的值乘积。因此会有一个剃度指数,一旦初始值小于1,经过多层乘积后将会迅速变小。一个有效的解决方案是使用ReLU做激活函数。介于篇幅这里只做简介,想要深入了解深度学习的同学请参考《一文读懂深度学习》。4.4自然语言处理NLP
NLP是人工智能的另一个目标,用于分析、理解和生成自然语言,以方便人和计算机设备进行交流,以及人与人之间的交流。它的应用领域包括:机器翻译,文本、语音、图片转换,聊天机器人,自动摘要,情感分析,文本分类,信息提取等。以下给出了自然语言处理简要的知识架构图。4.5机器人视觉视觉对人很重要,人类获得讯息90%以上是依靠眼睛的,那么对于机器人要想获得人获取信息的能力,重点是解决机器人视觉系统。目前机器视觉已经可以做到很多事情,比如识别人脸、标志和文字;探测物体并了解其环境的应用,如自动驾驶无人车等;检测的事件,对视频监控和人数统计;组织信息,如对于图像和图像序列的索引数据库;造型对象或环境,医学图像分析系统或地形模型;自动检测,如在制造业的应用程序。
4.6机器人学和强人工智能机器人学是一个交叉学科,主要研究包括环境适应机器仿生,机器人自主行为,人机协作,微纳操作机器人,制造装备机器人、科学工程机器人、服务型机器人等。目前国内的机器人行业还没有形成规模,商业化做得好的比如大疆、沈阳新松机器人公司。
强人工智能是人工智能研究的最主要目标之一,强人工智能也指通用人工智能(artificialgeneralintelligence,AGI),或具备执行一般智慧行为的能力。强人工智能通常把人工智能和意识、感性、知识和自觉等人类的特征互相连结。实现强人工智能至少需要拥有以下能力:
自动推理,使用一些策略来解决问题,在不确定性的环境中作出决策;知识表示,包括常识知识库;自动规划;学习;使用自然语言进行沟通;整合以上这些手段来达到同一个的目标。目前的强人工智能主要出现在电影或小说里,比如斯皮尔伯格导演的《人工智能》里面的机器男孩大卫。
最后,再回到人类智慧和人工智能的讨论上,人类智慧是人类的“隐性智慧”与“显性智慧”相互作用相互促进相辅相成的能力体系。其中,“隐性智慧”主要是指人类发现问题和定义问题从而设定工作框架的能力,由目的、知识、直觉能力、抽象能力、想象能力、灵感能力、顿悟能力和艺术创造能力所支持,具有很强的内隐性,因而不容易被确切理解,更难以在机器上进行模拟;“显性智慧”主要是指人类在隐性智慧所设定工作框架内解决问题的能力,依赖于收集信息、生成知识和创生解决问题的策略并转换为行动等能力的支持,具有较为明确的外显性,因而有可能被逐步理解并在机器上模拟出来。目前几乎所有的人工智能都只能模仿人类的解决问题的能力,而没有发现问题、定义问题的能力。因此,“人工智能将全面超越人类智慧”的说法没有科学根据,目前的人工智能只是帮助人类提高生产力的工具而已。
人工智能会取代程序员吗
多亏了人工智能(AI),软件将在未来自行编写。至少,这就是谷歌首席执行官桑达尔·皮查伊(SundarPichai)对软件开发未来的看法。他是对的!这并不能使软件开发人员变得多余-恰恰相反。
人工智能会在不久的将来取代计算机程序员吗?是否有可能完全取代程序员?可能只有当我们能够创造所谓的强人工智能(人工通用智能)时,也就是说,它满足了某些形式的人工智能具有人类思维可用的所有属性的假设。
答案很简单:不。相反,“计算机程序员”将成为“AI程序员”。
没有人怀疑人工智能每天都在编程方面做得更好。事实上,人工智能驱动的工具最终将比编程人员好得多。但是机器不会那么快地独立于人类,并且能够创建跨越几行以上的有用且实用的代码需要接近着名奇点的智能水平。
程序员不再手工编写代码。他们已经在使用各种智能工具,使他们能够自动执行编译工作。这就是人工智能的作用:它支持程序员。但是,人工智能将能够做出所有正确的决策,从头开始开发软件或解释每个功能的商业价值的未来仍然非常遥远。
相反,大多数新的基于AI的工具通过机器学习来提高其准确性和性能。得益于广泛的试错法,您的神经网络架构可帮助您更好、更精确地自动执行任务。
在那里,他们比人类更好:发现并修复错误。但是他们不够自主,可能永远不会有自己的“意见”,关于哪一个是解决问题或生成新功能的最佳方法。
最终,人们将远离“程序员”的工作,只是学会“驱动”他们的机器学习工具,以更有效地支持他们。由于人工智能自动化了以前需要非常特殊知识的复杂任务,因此开发人员有更多的时间专注于他们工作的“人性化”方面。
人们总是需要填补机器中永远缺乏的空白,例如与其他开发人员互动,研究已知问题的新的,大胆的解决方案,或者只是实现他们的创造力。
经典软件开发的拥护者可能会正确地说,好的软件比代码更重要:用户友好的结构,例如,有效的测试数据和实际的测试环境,以及与其他应用程序的接口。
现在可以说,所有这些都必须由一个有思想的人放在一起,从逻辑上看待,并且具有丰富的经验,以便最终对程序进行编码。这意味着,即使是最智能的人工智能也需要一个人的规格。
人工智能如何简化人类工作?框架作为开发框架或具有定义的库已经自然地简化了软件开发人员的工作。容器化或无服务器概念等发展也朝着这个方向发展。
开发人员负责应用程序的核心,而运行时环境则由其他人提供。或多或少令人讨厌的外围任务,例如硬件的实现和配置,流量的管理等,不再需要。
现在,框架绝不仅仅是静态的。他们优化代码,建议完成Google搜索,并将图形创建的模板转换为源代码。因此,有人不再需要成为开发人员来告诉AI应用程序应该是什么样子的想法可能并不那么牵强。
举个例子:一个有创意的网页设计师将来可以将他的模型交给AI,然后AI从中创建HTML代码。人工智能需要的所有规则和所有知识都很容易教它。
更重要的是:从用户数据或其他可用数据来看,人工智能不仅可以优化程序代码,还可以优化程序本身。例如,在网站上,网站上图像的最佳位置在哪里?
有多少在线用户不想滚动或只在旅途中看到Web内容?冲浪者是否发现微妙的颜色更令人愉快,或者您是否通过明亮的设计更好地达到目标群体?有了这些数据或类似的数据,人工智能可以了解目标用户最喜欢的是什么,并相应地优化网站。
这种系统的特殊优势:它们可以快速计算,识别模式,并且可以在条件发生变化时适应整体概念。在这一点上,真正的智能开始是一个更哲学的问题。所以回到开头:人工智能是否只和一个人的规格和他提供给系统的数据一样好?
人工智能将如何影响编程工作?事实似乎也将从根本上改变软件开发人员的工作。神经网络或人工智能将有助于改善数字工作,但在可预见的未来,它们几乎不会取代开发人员。
我们已经在使用小规模的学习系统-从Google搜索中已经提到的自动完成到音乐流媒体服务提供商的播放列表,这些播放列表始终根据个人口味,当前情绪和一天中的时间提供正确的音乐。
对应用程序开发人员的需求已显著增加。数字化正在生活和工作的所有领域发生-毕竟,必须有人开发AI,控制它,设置框架和数据。
例如,开发人员可能会写越来越少的代码,甚至更少地审查或优化它。将来,他们将在数据科学或数字创新领域进行概念性的工作。
开发人员还必须确保AI不会留给自己的设备,并根据人类条件进行测试。这也可能意味着不是根据计算出的最佳值来设计网站,而是故意突破-简而言之,创造性地工作。
今天的程序员将成为明天的AI教练。人工智能可以成为一个优秀的合作伙伴。例如,许多公司使用结对编程技术,其中来自不同领域的专家共同开发软件。每个人都会带来不同的经验和方法。结果显然是更加面向用户的应用程序。
当我们谈论软件2.0时,学习机是一个高质量的合作伙伴,它可以根据所学到的知识提出建议,并可以使用大量数据自动执行测试运行。然而,有创造力的人决定了整体结构朝着哪个方向发展,因为并不是每个优化建议都会导致实际目标-直观的软件。
必须认识到,人工智能仍然远远没有达到任何优秀开发人员所需的创造力。我们远非能够创建Facebook,集成图形章程或管理表单错误的AI。
而人工智能,在其“深度学习”版本中,如果没有“训练”,也就是说,面对无限的情境,这样它就可以自己学习,就无法发挥作用。这正是人类,程序员,将不得不改变他的职业的地方。
人工智能如何帮助程序员?与此同时,在取代它们之前,人工智能开始与编程工具集成,以帮助开发人员提高代码质量并加快工作速度。因此,新的VisualStudio2019集成了一个名为IntelliCode的AI,它有助于格式化代码并提供建议。Kite对Python编程也做了同样的事情。DeepCode会扫描源代码中的漏洞。
同样,Yagaan的AI在整个开发阶段执行代码审计,以突出存在的安全风险。育碧开发了CommitAssistant,这是一个从历史上犯下的编程错误中吸取教训的AI,并帮助开发人员停止犯这些错误。
谷歌还有一个错误预测AI。另一个例子,“ Sketch2Code ”,是基于一个AI,它将手工制作的界面图转换为HTML代码。就其本身而言,SmartBear已经开始将AI集成到其TestComplete测试自动化工具中。事实上,茄子似乎也做了同样的事情。
同时,人工智能也被调用来拯救“无代码/低代码”工具,以更好地帮助开发人员掌控这些环境并实现其应用。
Mendix及其MendixAssist是最早看到AI作为发展辅助潜力的参与者之一。去年五月,Appian宣布其低代码平台使用“AppianAI”,这是一个扩展,主要是为了简化认知服务在应用程序中的集成。
人工智能的未来是什么?简而言之,人工智能还没有准备好取代程序员。但目前的项目表明,我们将能够在相对较短的将来要求他为自己编写代码。与此同时,它是“增强”开发人员运动的一部分,允许它更快地产生更少的错误和代码。
因此,软件开发人员无需担心。一些旧工作可能会被替换。然而,一个熟练的开发人员至少在未来一二十年内是无法被人工智能取代的。随时了解最新技术并发展您的技能。人工智能在这里只是为了帮助我们,而不是取代我们的工作。然而,人工智能将对世界产生比历史上任何其他创新更大的影响。
我希望你能从这篇文章中得到一些东西。如果您有任何疑问或疑问,请随时在评论部分询问他们(在一些机器人来填写评论部分之前这样做)。
如果您愿意分享这篇文章,我将不胜感激。这将鼓励我创建更多像这样的有用的文章。
祝您编码愉快!