人工智能大致分为两大类:强人工智能和弱人工智能。弱人工智能(weak artificial intelligence)是能够完成某种特定具体任务的人工智能,换个角度看,就是一种计算机科学非常平凡的应用。强人工智能(strong artificial intelligence)或通用人工智能,是具备与人类同等智慧,或超越人类的人工智能,能表现正常人类所具有的所有智能行为。(摘录自课本 Page 1)
人工智能按研究学派主要分为三类,包括行为主义(Behaviorism),符号主义(Symbolism),连接主义(Connectionism)。(摘录自课本 Page 2)
行为主义的核心思想是基于控制论构建感知-动作型控制系统。(摘录自课本 Page 2) 在C.Shannon和J.McCarthy征集出版的《自动机研究》中有很多控制论方面的研究工作,涉及有有限自动机,图灵机、合成自动机,希望基于控制论去构建一些感知动作的反应性的控制系统。从比较直观的角度来看,行为主义的方法可以模拟出类似于小脑这样的人工智能,通过反馈来实现机器人的行走、抓取、平衡,因此有很大的实用价值。但是,这类方法似乎并不是通向人工智能的终极道路。(摘录自课本 Page 5)
符号主义是基于符号逻辑的方法,用逻辑表示知识和求解问题。其基本思想是:用一种逻辑把各种知识都表示出来;当求解一个问题时,就将该问题转化成一个逻辑表达式,然后用已有知识的逻辑表达式的库进行推理来解决该问题。但从逻辑的角度,难以找到一种简洁的符号逻辑体系,能表述出世间所有的知识。(摘录自课本 Page 5) 从常识的角度,研究者还没能把一个实用领域中的所有常识都用逻辑表达式记录下来。从求解器的角度来看,解决问题的关键环节是逻辑求解器,而各种谓词逻辑一般都是不可判定的,也就是理论上不存在一种机械方法,能在有限时间内判定任意一个谓词逻辑表达式是否成立。(摘录自课本 Page 6)
连接主义方法的基本出发点是借鉴大脑中神经元细胞连接的计算模型,用人工神经网络来拟合智能行为。(摘录自课本 Page 6) 连接主义方法始于1943年,从最开始的M-P神经元模型,到感知器模型、反向传播训练方法、卷积神经网络、深度学习、深度学习和反向传播训练方法,连接主义逐渐成为整个人工智能领域的主流方向。但是我们必须清楚的认识到,深度学习不一定是通向强人工智能的终极道路。它更像是一个能帮助我们快速爬到二楼、三楼的梯子,但顺着梯子我们很难爬到月球上。深度学习已知的局限性包括:泛化能力有限、缺乏推理能力、缺乏可解释性、鲁棒性欠佳等。(摘录自课本 Page 7 Page 8)
首先,感知器是只有输入和输出层的神经网络:
在1958年,由美国心理学家Frank Rosenblatt提出的感知器模型中,激活函数采用的一般是符号函数,及输出
进一步表示为:
如果把$o$当作因变量、$x_1、x_2$当作自变量,对于分界
可以抽象成三维空间里的一个分割面,能够对该面上下方的点进行分类,则及该感知机能完成的任务是用简单的线性分类任务,比如可以完成逻辑“与”与逻辑“或”的分类(在这里,第三维度只有1和-1两个值,分别使用实心点和空心点来表征,这样就可以在二维平面上将问题可视化):
-
逻辑“与”的真值表和二维样本:
$x_1$ $x_2$ $x_3$ 0 0 0 0 1 0 1 0 0 1 1 1 -
逻辑“或”的真值表和二维样本:
$x_1$ $x_2$ $x_3$ 0 0 0 0 1 1 1 0 1 1 1 1
但是对于非线性问题,如异或问题,单层感知机就没办法实现了:
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
多层感知机能够实现这一点,这篇博客指出了这样一个观点:**Kolmogorov理论指出: 双隐层感知器就足以解决任何复杂的分类问题.**
但我没有找到相关的证明,就和8bit就足够表示Feature Map一样迷惑,在这篇文献:
- [1].APPROXIMATION CAPABILITIES OF MULTILAYER FEEDFORWARD REGULAR FUZZY NEURAL NETWORKS[J].Applied Mathematics:A Journal of Chinese Universities,2001(01):45-57.
K.Hornik证明了理论上只有一个隐层的浅层神经网络足以拟合出任意函数。但有个假设前提:一个隐层的深度可以是无限,这样就好理解了。
我找到了一篇相对清晰的证明,感兴趣的同学可以看看:https://www.cnblogs.com/yeluzi/p/7491619.html
深度学习已知的局限性包括:
(1)泛化能力有限。 深度学习训练需要依靠大量的样本,与人类学习的机理不同。人类在幼儿时期会依据大量外在数据学习,但是成年人类的迁移学习能力和泛化能力远高于现在的深度学习。
(2)缺乏推理能力。 缺乏推理能力使得深度学习不擅长解决认知类的问题。如何将擅长推理的符号逻辑与深度学习结合起来,是未来非常有潜力的发展方向。
(3)缺乏可解释性。 在比较重视安全的领域,缺乏可解释性会带来一些问题。比如,某个决策是如何做出来的?深度学习为什么识别错了。
(4)鲁棒性欠佳。 在一张图像上加一些人眼很难注意到的点,就可以让深度学习算法产生错误判断,例如把猪识别成猫,把牛识别成狗。
(摘录自课本 Page 7 Page 8)
智能计算系统是智能的物质载体。(摘录自课本 Page 8)
传统计算系统的能效难以满足应用需求。因此,人工智能不可能依赖于传统计算系统,必须有自己的核心物质载体--智能计算系统。(摘录自课本 Page 8)
第一代智能计算系统主要是在20世纪80年代人工智能发展的第二次热潮中发展起来的面向符号逻辑处理的计算系统。它们的功能主要是运行当时非常热门的智能编程语言Prolog或LISP编写的程序。(摘录自课本 Page 9)
第二代智能计算系统主要研究面向连接主义(深度学习)处理的计算机或处理器。(摘录自课本 Page 10)
编者团队认为,第三代智能计算系统将不再单纯追求智能算法的加速,它将通过近乎无限的计算能力,给人类带来前所未有的机器智能。(摘录自课本 Page 11)
假如让我设计一个第二代的智能计算系统,我的方案如下:
硬件层面,借助VTA的设计思想,设计Load、Compute、Store三个模块,Load负责从DDR中缓存数据,Store负责将运算结果放回到DDR,在Compute模块里,设计一些大运算需要的加速器,例如使用脉动阵列(Systolic Array)加速矩阵乘法、快速卷机(Fast Convolution)做卷积运算等等。
软件层面:
- 需要设计一套AI指令集,告诉加速器缓存/放回的数据地址,以及对相应数据做的Compute操作。
- 软件上层对所需的运算,例如接受一个通用的神经网络模型,做硬件无关的优化,比如神经网络压缩,图优化,算子融合等。
- 此外,在上层还需要做出合适的任务调度,把计算不复杂,控制性较强的部分交给CPU处理,把适合加速器运算的交给加速器运算,组成一个异构系统。
- 软件还需要提供用户接口,可以是Python/C++等主流编程语言。
用户使用该智能计算系统时,在Python中编写相关的程序,调用配套编程框架做上层软件优化,以及对任务的调度安排,生成可以在我设计的智能计算系统上的可执行文件,用户执行该可执行文件,并给可执行文件一个输入,产生经过系统加速后的输出。
但是该系统的缺点也很明显,从底层硬件到上层软件栈,战线拉的太长了,而且硬件层面流片的成本巨大,但是深度学习所需的算子繁多并且在茁壮成长,硬件应当也需要不断的迭代更新。所以可以考虑把硬件加速的这部分换成FPGA来实现,如果需要新增算子或者更改,重新综合生成相关电路即可。