01.1 人工智能的定义
从不同的层面看:
第一个层面,人们对人工智能的期待:
- 智能增强: 特定工作的人工智能。
- 通用人工智能: 如人一般,可以思考,有情感,可以学习新事物。(人) 当前技术尚未实现。
第二个层面,从技术的特点:
如果一个程序解决任务(T)的效能(用P表示)随着经验(E)得到了提高,那么,这个程序就能从经验(E)中学到了关于任务(T)的知识,并让衡量值(P)得到提高。$^{[2]}$
- 选择一个模型结构(例如逻辑回归,决策树等),这就是上面说的程序。
- 用训练数据(输入和输出)输入模型。这就是上面的经验(E)。
- 通过不断执行任务(T)并衡量结果(P),让P 不断提高,直到达到一个满意的值。
大致分为三种学习方式:
-
监督学习(Supervised Learning)
通过标注的数据来学习,例如,程序通过学习标注了正确答案的手写数字的图像数据,它就能认识其他的手写数字。
-
无监督学习(Unsupervised Learning)
通过没有标注的数据来学习。这种算法可以发现数据中自然形成的共同特性(聚类),可以用来发现不同数据之间的联系,例如,买了商品A的顾客往往也购买了商品B。
-
强化学习(Reinforcement Learning)
我们可以让程序选择和它的环境互动(例如玩一个游戏),环境给程序的反馈是一些“奖励”(例如游戏中获得高分),程序要学习到一个模型,能在这种环境中得到高的分数,不仅是当前局面要得到高分,而且最终的结果也要是高分才行。
综合来看,如果我们把机器学习当作一个小孩,那么,教育小孩的方式就有根据正确答案指导学习(监督学习);根据小孩实践的过程给予各种鼓励(强化学习);还有自由探索世界,让小孩自己总结规律(无监督学习)。
机器学习领域出现了各种模型,其中,神经网络模型是一个重要的方法,它的原型在1943就出现了,在生物神经网络中,每个神经元与其他神经元相连,当它兴奋时,就会像相邻的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值,那么它就会被激活(兴奋),向其他神经元发送化学物质。把许多这样的神经元按照一定的层次结构连接起来,我们就构建了一个神经网络$^{[3]}$。图1-4是M-P神经元模型的示意图。
图1-4 M-P神经元模型
随着数据的丰富和机器算力的增强,人们不断增加神经网络的层次数目,相邻层次之间的输入输出由非线性函数来控制,这就产生了DNN(深度神经网络)。DNN在最近十年给人工智能领域带来了新的生机,并在图像分类、语音识别、自然语言处理等方面取得了重大突破
随着人们不断的调整网络结构,DNN也演变成许多不同的网络拓扑结构,例如CNN(卷积神经网络),RNN(循环神经网络),LSTM(长期短期记忆),GAN(生成对抗网络),Transfer Learning(迁移学习)等,这些模型还在不断演化中。
训练AI模型,需要一系列专门的工具,业界有不少成熟的训练平台(TensorFlow,PyTorch,MXNet等),这些平台也在不断演化,支持新的模型,提高训练的效率,改进易用性,等等。当然我们也可以自己开发平台来训练,本书的大部分章节就是带领读者自己动手打造一个小型的开发平台。
第三个层面,从应用的角度来看,我们看到狭义人工智能在各个领域都取得了很大的成果。
一种是标杆式的任务,例如ImageNet,考察AI模型能否识别图像的类别,2015年,AI取得了超过人类的成果。在其它的领域中,我们也看到了AI取得了达到或超过人类最高水平的成绩:
- 翻译领域(微软的中英翻译超过人类)
- 阅读理解(SQuAD 比赛)
- 下围棋(2016)德州扑克(2019)麻将(2019)
那么,一个典型的机器学习的模型是怎么得来的,又是怎么在应用中使用的呢?以MNIST数据集为例,整体流程如图1-6所示。
图1-6 模型的生成与应用
从图1-6中可以看到,首先我们要设计一个模型,然后用已经标注过的数据来训练这个模型,在训练过程中,模型的各个参数在多次训练中不断得到调整,最后得到了一个达到要求的模型。这个模型会被用于一个推理模型中,和其它程序模块一起组成一个应用程序或者是服务,能处理新的数据,满足用户的需求。
在现代软件开发流程中,程序的开发,和AI模型的开发的生命周期应该如何协作呢?软件工程师和数据科学家并肩工作,一个完善代码库,另一个完善模型库,最后的产品通过各种途径(网页/桌面程序/手机/IoT设备)交到用户手中。图1-7展示了这个协作的过程。
99