(系列笔记——收官)30.人工智能、机器学习和深度学习

人工智能、机器学习和深度学习

人工智能(Artificial Intelligence,AI)

人工智能的字面意义就已经解释了它的内在含义,所谓人工智能,包括两个部分:

  • 人工:人造的,非天生的(非生物的);

  • 智能:能够独立完成一件事情。

AI 的载体必须是纯粹由人类设计制造出来的,天生拥有部分智能,经过人类训练加深的情况不算在内。比如一个狗或者一只猩猩被训练得能够做一些原本人类才能做的事情,不能叫人工智能。

AI 独立完成的这件事可能很小,但这件事本身必须由 AI 在没有人类干预的情况下独立完成。比如听写要能把“听”到的人类语音直接转录为文字,而不需要人类在整个过程中通过输入设备来给出文字。

人工智能的发展

人类对于人工智能的想象从上古时期就已经开始了,各个文明都有关于能工巧匠制造了具备智能的“机械”的故事和传说。AI 来自于人类“仿效上帝的古老愿望”。

我们今天意义上的 AI,比较公认的发源来自一位天才的数学家、逻辑学家和计算机科学家——英国人,阿兰 · 图灵(Alan Turing)。
(系列笔记——收官)30.人工智能、机器学习和深度学习
图灵在1950年发表了一篇划时代意义的论文《Computing Machinery and Intelligence》,其中提出了 Thinking Machine(会思考的机器)的概念。

他指出,会思考的机器需要具备两个方面的能力:感知和认知。

基本的感知包括听觉和视觉,也就是说,这种会思考的机器具备听见和看见人类能够听见、看见的东西的能力,而不是仅仅接受电波或者脉冲信号的控制。

认知则要高级得多,简单来说,就是需要机器理解它感知到的内容——如果真能做到这点,就可谓是真正的智能了。可惜到了今天,人造物体的认知能力,还未能实现。

天妒英才,图灵1954年就去世了,未能沿着他的构想创造更多成就。

1956年一群数学家、计算机科学家、神经学家汇聚在美国达特茅斯学院,召开了达特茅斯会议。
(系列笔记——收官)30.人工智能、机器学习和深度学习
达特茅斯会议的发起人之一约翰 · 麦卡锡(John McCarthy,上图左二)创造了人工智能(Artificial Intelligence)这个术语。此次会议催生了人工智能这一独立研究领域。1956年也被称为人工智能元年。

此后,人工智能领域历经60余年的发展,直到今天。
(系列笔记——收官)30.人工智能、机器学习和深度学习

人工智能、机器学习和深度学习的关系

人工智能、机器学习,以及深度学习几个词都是今天的热词,而且还经常被同时提起。它们之间到底是什么关系呢?

大致可以用下面这幅图来说明:
(系列笔记——收官)30.人工智能、机器学习和深度学习
人工智能指的是所有能够让“机器”拥有“智能”的研究与技术的总和,而机器学习是目前阶段达到人工智能目标的主要技术手段。深度学习这个概念目前并没有一个权威的定论,但一般认为它是机器学习的一个分支。

随着研究的发展,深度学习包含的内容越来越多。不过大多数深度学习模型基于人工神经网络。而深度学习这个概念最早也是伴随着深度神经网络开始流行起来的。

因此,下面我们将以神经网络的发展为引导,来了解深度学习的研究内容和工业实践。

什么是神经网络

人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN),是一种模仿生物神经网络的结构和功能的数学/计算模型,用于拟合各种函数。

神经网络的两个要素

一个神经网络,有两个基本要素,即神经元和连接。

神经元

下图中红圈内就是一个神经元:
(系列笔记——收官)30.人工智能、机器学习和深度学习
一个神经元,有输入(上图中神经元接受输入:x1x2x3x_1、x_2、x_3),有输出(输出:y),并在神经元内部进行操作,将输入映射为输出。

神经元内部的操作又包括两步。

  1. 对输入进行线性加权(上图中n=3):
    (系列笔记——收官)30.人工智能、机器学习和深度学习
  2. 将线性加权结果经由**函数映射为输出(其中x0=1x_0=1):
    (系列笔记——收官)30.人工智能、机器学习和深度学习

这就是一个完整神经元的全部。

NN 最常用的一种**函数就是 Sigmoid 函数:
(系列笔记——收官)30.人工智能、机器学习和深度学习
当然,在现实使用中,**函数有很多种,下图中列举了一些常见的**函数:
(系列笔记——收官)30.人工智能、机器学习和深度学习

注意:如果神经元的**函数是线性函数,那么这个 NN 就只能拟合线性函数。但如果**函数是非线性的,哪怕是非常简单的非线性(例如 ReLu),由它构建的 NN 都可以用于拟合非常复杂的线性或非线性函数。因此实际使用中,一般都选用非线性函数作为**函数。

连接

所谓连接,就是神经元组织在一起的形式。

不同的神经元通过连接结合在一起,形成了一个网络,例如下图:
(系列笔记——收官)30.人工智能、机器学习和深度学习
这是一个典型的全连接两层神经网络。

其中,全连接是指前一层每一个神经元的输出都连接到后一层所有的神经元。

明明一共有三层(红、紫、绿),为什么说两层?因为最左侧的输入层是不计算到神经网络层数里面的!

一个神经网络的不同层级分为:输入层、隐含层(简称隐层)和输出层(最后一层)。除了输入层和输出层之外,所有的层都叫做隐层。

上图例子中我们只有一个隐层。

Shallow NN

对于只含有很少(一般是1-2)隐层的神经网络,我们称之为浅层神经网络(Shallow NN)。

神经网络的层级排列是有方向的,前一层的输出就是后一层的输入。

神经网络的训练

对人类神经系统的模拟

NN 可以用来做分类,也可以用来做回归,还可以用来聚类,总之这是一个几乎可以做任何事情的模型。

它的创造受到了人类中枢神经系统的启发。正是生物神经系统中的神经元及之间的连接,启发了 NN 的结构元素。
(系列笔记——收官)30.人工智能、机器学习和深度学习
NN 的神奇之处在于,它只有结构,没有超参数,一旦结构确定,投入数据去训练就好了,并不需要一般机器学习模型必不可少的“调参”步骤。

而且,它可以用来拟合任意的函数(输入到输出的映射),具备无限的可能性。而不像统计学习模型那样,有一个预设的模型函数,适用范围明确但狭窄。

已知和未知

一个神经网络有几层,每层有几个神经元,这些神经元之间的连接是怎样的,以及这些神经元里的**函数是什么——这些都是由用户指定的。在构建一个 NN 的时候,这些因素就都已经被定下来了。

既然这些都是确定的,那训练 NN 模型,又是在训练什么呢?实际上,对于一个典型 NN 而言,就是在训练各个神经元线性加权的权重。

NN 的学习任务可以是有监督的,也可以是无监督的,但无论如何,它实际输出的 Cost 函数都是可以得到的——对于有监督学习而言,Cost 就是输出与标签之间的差距;而对于无监督学习,Cost 则与模型的具体任务(领域)和先验假设有关。

训练过程

NN 的训练过程可以用下面这幅图来概括:
(系列笔记——收官)30.人工智能、机器学习和深度学习
NN 的训练过程是一个迭代的过程,最初初始化可以认为是随机获得各个权值,然后每次迭代。

  • 输入样本进入到当前 NN 的每一个神经元,用现有的权值加权,然后再由**函数输出给后面连接的神经元。这样一层层递进,最终形成 NN 整体网络的输出。

  • 这次运行的输出与目标相比对,计算出 Cost,然后再通过最小化 Cost 来反向调整网络各层、各个神经元的权值。

如此不断重复迭代,直至收敛。

上述一次迭代中的两个运算过程,一个从前往后,从输入层算到输出层;一个从后往前,从输出层再反推回输入层。

这就引出了两个重要的概念:
前向传播(Forward Propagation,FP)和反向传播(Back Propagation,BP)。

简单而言,前向传播就是从前往后算,反向传播就是从后往前算。

当训练(Training)NN 的时候,我们既需要前向传播,也需要反向传播。但是当一个 NN 训练完成,用来进行推断(Inference)的过程中,就只需要前向传播了。(参见下图)
(系列笔记——收官)30.人工智能、机器学习和深度学习