第 1 章 神经网络的思想

第 1 章 神经网络的思想

在人工智能领域,神经网络(Neural Network,NN)是近年来的热门话题,由此发展而来的深度学习更是每天都被经济和社会新闻提及。本章将概述神经网络是什么,以及数学是怎样参与其中的。为了帮助大家直观地理解,书中的类比或多或少有些粗糙,不当之处还请见谅。

1-1 神经网络和深度学习

深度学习是人工智能的一种具有代表性的实现方法,下面就让我们来考察一下它究竟是什么样的技术。

备受瞩目的深度学习

在有关深度学习的热门话题中,有几个被媒体大肆报道的事件,如下表所示。

年份

事件

2012 年

在世界性的图像识别大赛ILSVRC中,使用深度学习技术的Supervision方法取得了完胜

2012 年

利用谷歌公司开发的深度学习技术,人工智能从 YouTube 的视频中识别出了猫

2014 年

苹果公司将Siri 的语音识别系统变更为使用深度学习技术的系统

2016 年

利用谷歌公司开发的深度学习技术,AlphaGo 与世界顶级棋手对决,取得了胜利

2016 年

奥迪、宝马等公司将深度学习技术运用到汽车的自动驾驶中

如上表所示,深度学习在人工智能领域取得了很大的成功。那么,深度学习究竟是什么技术呢?深度学习里的“深度”是什么意思呢?为了解答这个疑问,首先我们来考察一下神经网络,这是因为深度学习是以神经网络为出发点的。

神经网络

谈到神经网络的想法,需要从生物学上的神经元( neuron)开始说起。

从生物学的扎实的研究成果中,我们可以得到以下关于构成大脑的神经元的知识(1-2 节)。

(i) 神经元形成网络。

(ii) 对于从其他多个神经元传递过来的信号,如果它们的和不超过某个固定大小的值(阈值),则神经元不做出任何反应。

(iii) 对于从其他多个神经元传递过来的信号,如果它们的和超过某个固定大小的值(阈值),则神经元做出反应(称为点火),向另外的神经元传递固定强度的信号。

(iv) 在 (ii) 和 (iii) 中,从多个神经元传递过来的信号之和中,每个信号对应的权重不一样。

将神经元的工作在数学上抽象化,并以其为单位人工地形成网络,这样的人工网络就是神经网络。将构成大脑的神经元的集合体抽象为数学模型,这就是神经网络的出发点。

用神经网络实现的人工智能

看过以往的科幻电影、动画片就知道,人工智能是人们很早就有的想法。那么,早期研究的人工智能和用神经网络实现的人工智能有哪些不同呢?答案就是用神经网络实现的人工智能能够自己学习过去的数据。

以往的人工智能需要人们事先将各种各样的知识教给机器,这在工业机器人等方面取得了很大成功。

而对于用神经网络实现的人工智能,人们只需要简单地提供数据即可。神经网络接收数据后,会从网络的关系中自己学习并理解。

“人教导机器”类型的人工智能的问题

20 世纪的“人教导机器”类型的人工智能,现在仍然活跃在各种领域,然而也有一些领域是它不能胜任的,其中之一就是模式识别。让我们来看一个简单的例子。

例题 有一个用 8×8 像素读取的手写数字的图像,考虑如何让计算机判断图像中的数字是否为 0。

读取的手写数字的图像如下图所示。

这些图像虽然大小和形状各异,但都可以认为正解是数字 0。可是,如何将这些图像中的数字是 0 这个事实教给计算机呢?

要用计算机进行处理,就需要用数学式来表示。然而,像例题这样的情况,如果使用 20 世纪的常规手段,将“0 具有这样的形状”教给计算机,处理起来会十分困难。况且,如下所示,对于写得很难看的字、读取时受到噪声影响的字,虽然人能够设法辨认出来是 0,但要将这种辨认的条件用数学式表达,并教给计算机,应该是无法做到的。

从这个简单的例题中可以看出,“人教导机器”类型的人工智能无法胜任图像、语音的模式识别,因为要把所有东西都教给计算机是不现实的。

不过,在 20 世纪后期,对于这样的问题,人们找到了简单的解决方法,那就是神经网络以及由其发展而来的深度学习。如前所述,具体来说就是由人提供数据,然后由神经网络自己进行学习。

如此看来,神经网络似乎有一些不可思议的逻辑。然而,从数学上来说,其原理十分容易。本书的目的就是阐明它的原理。

1-2 神经元工作的数学表示

就像我们在 1-1 节看到的那样,神经网络是以从神经元抽象出来的数学模型为出发点的。下面,我们将更详细地考察神经元的工作,并将其在数学上抽象化。

整理神经元的工作

人的大脑是由多个神经元互相连接形成网络而构成的。也就是说,一个神经元从其他神经元接收信号,也向其他神经元发出信号。大脑就是根据这个网络上的信号的流动来处理各种各样的信息的。

让我们来更详细地看一下神经元传递信息的结构。如上图所示,神经元是由细胞体、树突、轴突三个主要部分构成的。其他神经元的信号(输入信号)通过树突传递到细胞体(也就是神经元本体)中,细胞体把从其他多个神经元传递进来的输入信号进行合并加工,然后再通过轴突前端的突触传递给别的神经元。

那么,神经元究竟是怎样对输入信号进行合并加工的呢?让我们来看看它的构造。

假设一个神经元从其他多个神经元接收了输入信号,这时如果所接收的信号之和比较小,没有超过这个神经元固有的边界值(称为阈值),这个神经元的细胞体就会忽略接收到的信号,不做任何反应。

注:对于生命来说,神经元忽略微小的输入信号,这是十分重要的。反之,如果神经元对于任何微小的信号都变得兴奋,神经系统就将“情绪不稳定”。

不过,如果输入信号之和超过神经元固有的边界值(也就是阈值),细胞体就会做出反应,向与轴突连接的其他神经元传递信号,这称为点火

那么,点火时神经元的输出信号是什么样的呢?有趣的是,信号的大小是固定的。即便从邻近的神经元接收到很大的刺激,或者轴突连接着其他多个神经元,这个神经元也只输出固定大小的信号。点火的输出信号是由 0 或 1 表示的数字信息。

神经元工作的数学表示

让我们整理一下已经考察过的神经元点火的结构。

(i) 来自其他多个神经元的信号之和成为神经元的输入。

(ii) 如果这个信号之和超过神经元固有的阈值,则点火。

(iii) 神经元的输出信号可以用数字信号 0 和 1 来表示。即使有多个输出端,其值也是同一个。

下面让我们用数学方式表示神经元点火的结构。

首先,我们用数学式表示输入信号。由于输入信号是来自相邻神经元的输出信号,所以根据 (iii),输入信号也可以用“有”“无”两种信息表示。因此,用变量 x 表示输入信号时,如下所示。

注:与视细胞直接连接的神经元等个别神经元并不一定如此,因为视细胞的输入是模拟信号。

接下来,我们用数学式表示输出信号。根据 (iii),输出信号可以用表示点火与否的“有”“无”两种信息来表示。因此,用变量 y 表示输出信号时,如下所示。

最后,我们用数学方式来表示点火的判定条件。

从 (i) 和 (ii) 可知,神经元点火与否是根据来自其他神经元的输入信号的和来判定的,但这个求和的方式应该不是简单的求和。例如在网球比赛中,对于来自视觉神经的信号和来自听觉神经的信号,大脑是通过改变权重来处理的。因此,神经元的输入信号应该是考虑了权重的信号之和。用数学语言来表示的话,例如,来自相邻神经元 1、2、3 的输入信号分别为 x_1x_2x_3,则神经元的输入信号之和可以如下表示。

w_1x_1+w_2x_2+w_3x_3\quad\quad\quad\quad\quad\quad\quad\quad(1)

式中的 w_1w_2w_3 是输入信号 x_1x_2x_3 对应的权重(weight)。

根据 (ii),神经元在信号之和超过阈值时点火,不超过阈值时不点火。于是,利用式 (1),点火条件可以如下表示。

这里,\theta 是该神经元固有的阈值。

例 1 来自两个神经元 1、2 的输入信号分别为变量 x_1x_2,权重为 w_1w_2,神经元的阈值为 \theta。当 w_1=5w_2=3\theta=4 时,考察信号之和 w_1x_1+w_2x_2 的值与表示点火与否的输出信号 y 的值。

输入 \boldsymbol{x_1}

输入 \boldsymbol{x_2}

\boldsymbol{w_1x_1+w_2x_2}

点火

输出信号 \boldsymbol{y}

0

0

5\times0+3\times0=0<4

0

0

1

5\times0+3\times1=3<4

0

1

0

5\times1+3\times0=5\geqslant4

1

1

1

5\times1+3\times1=8\geqslant4

1

点火条件的图形表示

下面我们将表示点火条件的式 (2) 图形化。以神经元的输入信号之和为横轴,神经元的输出信号 y 为纵轴,将式 (2) 用图形表示出来。如下图所示,当信号之和小于 \theta 时,y 取值 0,反之 y 取值 1。

如果用函数式来表示这个图形,就需要用到下面的单位阶跃函数

u(z)=\begin{cases}0~~(z<0)\\1~~(z\geqslant0)\end{cases}

单位阶跃函数的图形如下所示。

利用单位阶跃函数 u(z),式 (2) 可以用一个式子表示如下。

点火的式子:y=u(w_1x_1+w_2x_2+w_3x_3-\theta)\quad\quad\quad\quad\quad\quad\quad\quad(3)

通过下表可以确认式 (3) 和式 (2) 是一样的。

\boldsymbol{y}

\boldsymbol{w_1x_1+w_2x_2+w_3x_3}

\boldsymbol{z=w_1x_1+w_2x_2+w_3x_3}-\theta

\boldsymbol{u(z)}

0(无点火)

小于 \theta

z<0

0

1(点火)

大于等于 \theta

z\geqslant0

1

此外,该表中的 z(式 (3) 的阶跃函数的参数)的表达式

z=w_1x_1+w_2x_2+w_3x_3-\theta\quad\quad\quad\quad\quad\quad\quad\quad(4)

称为该神经元的加权输入

备注 \boldsymbol{w_1x_1+w_2x_2+w_3x_3}=\theta 的处理

有的文献会像下面这样处理式 (2) 的不等号。

在生物上这也许是很大的差异,不过对于接下来的讨论而言是没有问题的。因为我们的主角是 Sigmoid 函数,所以不会发生这样的问题。

1-3 激活函数:将神经元的工作一般化

1-2 节中用数学式表示了神经元的工作。本节我们试着将其在数学上一般化。

简化神经元的图形

为了更接近神经元的形象,1-2 节中将神经元表示为了下图的样子。

然而,为了画出网络,需要画很多的神经元,在这种情况下上面那样的图就不合适了。因此,我们使用如下所示的简化图,这样很容易就能画出大量的神经元。

为了与生物学的神经元区分开来,我们把经过这样简化、抽象化的神经元称为神经单元(unit)。

注:很多文献直接称为“神经元”。本书为了与生物学术语“神经元”区分,使用“神经单元”这个称呼。另外,也有文献将“神经单元”称为“人工神经元”,但是由于现在也存在生物上的人工神经元,所以本书中也不使用“人工神经元”这个称呼。

激活函数

将神经元的示意图抽象化之后,对于输出信号,我们也对其生物上的限制进行一般化。

根据点火与否,生物学上的神经元的输出 y 分别取值 1 和 0(下图)。

然而,如果除去“生物”这个条件,这个“0 和 1 的限制”也应该是可以解除的。这时表示点火与否的下式(1 - 2 节式 (3))就需要修正。

点火的式子:y=u(w_1x_1+w_2x_2+w_3x_3-\theta)\quad\quad\quad\quad\quad\quad\quad\quad(1)

这里,u 是单位阶跃函数。我们将该式一般化,如下所示。

y=a(w_1x_1+w_2x_2+w_3x_3-\theta)\quad\quad\quad\quad\quad\quad\quad\quad(2)

这里的函数 a 是建模者定义的函数,称为激活函数(activation function)。x_1x_2x_3 是模型允许的任意数值,y 是函数 a 能取到的任意数值。这个式 (2) 就是今后所讲的神经网络的出发点。

注:虽然式 (2) 只考虑了 3 个输入,但这是很容易推广的。另外,式 (1) 使用的单位阶跃函数 u(z) 在数学上也是激活函数的一种。

请注意,式 (2) 的输出 y 的取值并不限于 0 和 1,对此并没有简单的解释。一定要用生物学来比喻的话,可以考虑神经单元的“兴奋度”“反应度”“活性度”。

我们来总结一下神经元和神经单元的不同点,如下表所示。

 

神经元

神经单元

输出值 y

0或1

模型允许的任意数值

激活函数

单位阶跃函数

由分析者给出,其中著名的是 Sigmoid 函数(后述)

输出的解释

点火与否

神经单元的兴奋度、反应度、活性度

将神经元点火的式 (1) 一般化为神经单元的激活函数式 (2),要确认这样做是否有效,就要看实际做出的模型能否很好地解释现实的数据。实际上,式 (2) 表示的模型在很多模式识别问题中取得了很好的效果。

Sigmoid 函数

激活函数的代表性例子是 Sigmoid 函数 \sigma(z),其定义如下所示。

\sigma(z)=\frac{1}{1+{\rm e}^{-z}}~~({\rm e}=2.718281\dots)\quad\quad\quad\quad\quad\quad\quad\quad(3)

关于这个函数,我们会在后面详细讨论(2-1 节)。这里先来看看它的图形,Sigmoid 函数 \sigma(z) 的输出值是大于 0 小于 1 的任意值。此外,该函数连续、光滑,也就是说可导。这两种性质使得 Sigmoid 函数很容易处理。

单位阶跃函数的输出值为 1 或 0,表示点火与否。然而,Sigmoid 函数的输出值大于 0 小于 1,这就有点难以解释了。如果用生物学术语来解释的话,如上文中的表格所示,可以认为输出值表示神经单元的兴奋度等。输出值接近 1 表示兴奋度高,接近 0 则表示兴奋度低。

本书中将 Sigmoid 函数作为标准激活函数使用,因为它具有容易计算的漂亮性质。如果用数学上单调递增的可导函数来代替,其原理也是一样的。

偏置

再来看一下激活函数的式 (2)。

y=a(w_1x_1+w_2x_2+w_3x_3-\theta)\quad\quad\quad\quad\quad\quad\quad\quad(2)

这里的 \theta 称为阈值,在生物学上是表现神经元特性的值。从直观上讲,\theta 表示神经元的感受能力,如果 \theta 值较大,则神经元不容易兴奋(感觉迟钝),而如果值较小,则神经元容易兴奋(敏感)。

然而,式 (2) 中只有 \theta 带有负号,这看起来不漂亮。数学不喜欢不漂亮的东西。另外,负号具有容易导致计算错误的缺点,因此,我们将 -\theta 替换为 b

y=a(w_1x_1+w_2x_2+w_3x_3+b)\quad\quad\quad\quad\quad\quad\quad\quad(4)

经过这样处理,式子变漂亮了,也不容易发生计算错误。这个 b 称为偏置(bias)。

本书将式 (4) 作为标准使用。另外,此时的加权输入 z(1-2 节)如下所示。

z=w_1x_1+w_2x_2+w_3x_3+b\quad\quad\quad\quad\quad\quad\quad\quad(5)

式 (4) 和式 (5) 是今后所讲的神经网络的出发点,非常重要。

另外,生物上的权重 w_1w_2w_3 和阈值 \theta=-b)都不是负数,因为负数在自然现象中实际上是不会出现的。然而,在将神经元一般化的神经单元中,是允许出现负数的。

\boldsymbol{x_1}

问题 右图是一个神经单元。如图所示,输入 x_1 的对应权重是 2,输入 x_2的对应权重是 3,偏置是 -1。根据下表给出的输入,求出加权输入 z 和输出 y。注意这里的激活函数是 Sigmoid 函数。

输入 \boldsymbol{x_1}

输入 \boldsymbol{x_2}

加权输入 \boldsymbol{z}

输出 \boldsymbol{y}

0.2

0.1

 

 

0.6

0.5

 

 

 结果如下表所示(式 (3) 中的 e 取 e = 2.7 进行计算)

输入 \boldsymbol{x_1}

输入 \boldsymbol{x_2}

加权输入 \boldsymbol{x_2}

输出 \boldsymbol{y}

0.2

0.1

2×0.2 + 3×0.1 - 1 = -0.3

0.43

0.6

0.5

2×0.6 + 3×0.5 - 1 = 1.7

0.84

 

备注 改写式 (5)

我们将式 (5) 像下面这样整理一下。

z=w_1x_x+w_2x_2+w_3x_3+b\times1\quad\quad\quad\quad\quad\quad\quad\quad(6)

这里增加了一个虚拟的输入,可以理解为以常数 1 作为输入值(下图)。

于是,加权输入 z 可以看作下面两个向量的内积。

(w_1,w_2,w_3,b)(x_1,x_2,x_3,1)

计算机擅长内积的计算,因此按照这种解释,计算就变容易了。

1-4 什么是神经网络

神经网络作为本书的主题,它究竟是什么样的呢?下面让我们来看一下其概要。

神经网络

上一节我们考察了神经单元,它是神经元的模型化。那么,既然大脑是由神经元构成的网络,如果我们模仿着创建神经单元的网络,是不是也能产生某种“智能”呢?这自然是让人期待的。众所周知,人们的期待没有被辜负,由神经单元组成的网络在人工智能领域硕果累累。

在进入神经网络的话题之前,我们先来回顾一下上一节考察过的神经单元的功能。

  • 将神经单元的多个输入 x_1,x_2,\cdots,x_n 整理为加权输入 z

    z=w_1x_1+w_2x_2+\cdots+w_nx_n+b\quad\quad\quad\quad\quad\quad\quad\quad(1)

    其中 w_1,w_2,\cdots,x_n 为权重,b 为偏置,n 为输入的个数。

  • 神经单元通过激活函数 a(z),根据加权输入 z 输出 y

    y=a(z)\quad\quad\quad\quad\quad\quad\quad\quad(2)

将这样的神经单元连接为网络状,就形成了神经网络

网络的连接方法多种多样,本书将主要考察作为基础的阶层型神经网络以及由其发展而来的卷积神经网络

注:为了与生物学上表示神经系统的神经网络区分开来,有的文献使用“人工神经网络”这个称呼。本书中为了简便,省略了“人工”二字。

神经网络各层的职责

阶层型神经网络如下图所示,按照(layer)划分神经单元,通过这些神经单元处理信号,并从输出层得到结果,如下图所示。

构成这个网络的各层称为输入层隐藏层输出层,其中隐藏层也被称为中间层

各层分别执行特定的信号处理操作。

输入层负责读取给予神经网络的信息。属于这个层的神经单元没有输入箭头,它们是简单的神经单元,只是将从数据得到的值原样输出。

隐藏层的神经单元执行前面所复习过的处理操作 (1) 和 (2)。在神经网络中,这是实际处理信息的部分。

输出层与隐藏层一样执行信息处理操作 (1) 和 (2),并显示神经网络计算出的结果,也就是整个神经网络的输出。

深度学习

深度学习,顾名思义,是叠加了很多层的神经网络。叠加层有各种各样的方法,其中著名的是卷积神经网络(第 5 章)。

考察具体的例子

从现在开始一直到第 4 章,我们都将围绕着下面这个简单的例子来考察神经网络的结构。

例题 建立一个神经网络,用来识别通过 4×3 像素的图像读取的手写数字 0 和 1。学习数据是 64 张图像,其中像素是单色二值。

 我们来示范一下这个例题如何解答。

这个解答是演示实际的神经网络如何发挥功能的最简单的神经网络示例,但对于理解本质已经足够了。该思路也同样适用于复杂的情况。

注:例题的解答有很多种,并不仅限于这一示例。

这个简单的神经网络的特征是,前一层的神经单元与下一层的所有神经单元都有箭头连接,这样的层构造称为全连接层(fully connected layer)。这种形状对于计算机的计算而言是十分容易的。

下面让我们来简单地看一下各层的含义。

解答示例中输入层的含义

输入层由 12 个神经单元构成,对此我们立刻就能够理解,因为神经网络一共需要读取 4×3 = 12 个像素信息。

输入层的神经单元的输入与输出是相同的。一定要引入激活函数 a(z) 的话,可以用恒等函数(a(z)=z)来充当。

解答示例中输出层的含义

输出层由两个神经单元构成,这是因为我们的题目是识别两种手写数字 0 和 1,需要一个在读取手写数字 0 时输出较大值(即反应较大)的神经单元,以及一个在读取手写数字 1 时输出较大值的神经单元。

例如,将 Sigmoid 函数作为激活函数使用。在这种情况下,读取数字 0 的图像时,输出层上方的神经单元的输出值比下方的神经单元的输出值大;而读取数字 1 的图像时,输出层下方的神经单元的输出值比上方的神经单元的输出值大,如下图所示。像这样,根据输出层的神经单元的输出的大小,对整个神经网络进行判断。

解答示例中隐藏层的含义

隐藏层具有提取输入图像的特征的作用。然而,隐藏层为何能够提取输入图像的特征呢?这不是一个简单的话题。另外,在这个解答示例中,隐藏层为何是 1 层而不是 2 层?为何是由 3 个神经单元构成而不是 5 个?想必读者会涌现出诸多疑问。为了解决这些疑问,就需要理解下一节所讲的神经网络的结构。

备注 建立神经网络的经验谈

在上面的例题中,也可以考虑将输出层的神经单元整合为一个,以其输出接近 0 或接近 1 来区分输入数字 0 和 1。要说该方法与采用两个神经单元的解答示例相比理论上哪一个更好,这在数学上无法判断。根据现有的经验,在用计算机进行计算时,对于两个字的识别,使用两个神经单元的神经网络结构比较简单,识别也容易进行。

1-5 用恶魔来讲解神经网络的结构

上一节我们概述了神经网络的,但没有具体介绍其中最难的隐藏层。这是因为隐藏层肩负着特征提取(feature extraction)的重要职责,需要很长的篇幅来介绍。本节我们就来好好看一下隐藏层。

重要的隐藏层

如上一节考察过的那样,神经网络是将神经单元部署成网络状而形成的。然而,将神经单元胡乱地连接起来并不能得到有用的神经网络,因此需要设计者的预估,这种预估对于隐藏层是特别重要的。因为支撑整个神经网络工作的就是这个隐藏层。下面让我们利用上一节考察过的例题,来逐渐展开有关隐藏层的具体话题。

例题 建立一个神经网络,用来识别通过 4×3 像素的图像读取的手写数字 0 和 1。学习数据是 64 张图像,其中像素是单色二值。

前面已经提到过,模式识别的难点在于答案不标准,这个例题也体现了这样的特性。即使是区区一个 4×3 像素的二值图像,所读入的手写数字 0 和 1 的像素模式也是多种多样的。例如,下列图像可以认为是读入了手写数字 0。

对于这样的数字 0,即使人能设法识别出来,让计算机来判断也十分困难。

思路:由神经单元之间的关系强度给出答案

对于这种没有标准答案、识别困难的问题,怎么解决才好呢?思路就是“由网络进行判断”。乍一听会觉得这个方法不可思议,不过其中的逻辑却一点都不难,我们可以用恶魔组织的信息网络来做比喻。虽然这个比喻并不算准确,但是可以突出其本质。

假设有一个如下图所示的恶魔组织,隐藏层住着 3 个隐藏恶魔 A、B、C,输出层住着 2 个输出恶魔 0 和 1。输入层有 12 个手下①~⑫为隐藏恶魔 A、B、C 服务。

注:这里将生物学中的特征提取细胞的工作抽象化为 3 个恶魔 A、B、C。

最下层(输入层)的 12 个手下分别住在 4×3 像素图像的各个像素上,其工作是如果像素信号为 OFF(值为 0)就处于休眠状态;如果像素信号为 ON(值为 1)则变得兴奋,并将兴奋度信息传递给他们的主人隐藏恶魔 A、B、C。

注:即便不是黑白二值像素的情况,处理方式也是相同的。

住在隐藏层的 3 个隐藏恶魔,从下层(输入层)的 12 个手下那里获得兴奋度信息。接着,将获得的信息进行整合,根据其值的大小,自己也变兴奋,并将这个兴奋度传递给住在上层的输出恶魔。

不过,隐藏恶魔 A、B、C 有不同的喜好。他们分别喜欢下图所示的模式 A、模式 B、模式 C 的图案。这个性质影响了神经网络的特性。(看清他们的不同“偏好”,就是我们最初所提及的设计者的预估。)

住在最上层的 2 个输出恶魔也是从住在下层的 3 个隐藏恶魔那里得到兴奋度信息。与隐藏恶魔一样,他们将得到的兴奋度信息进行整合,根据其值的大小,自己也变兴奋。然后,这些输出恶魔的兴奋度就成为整个恶魔组织的意向。如果输出恶魔 0 的兴奋度比输出恶魔 1 的兴奋度大,神经网络就判定图像的数字为 0,反之则判定为 1。

可见,恶魔的世界里也存在着人际关系。

隐藏恶魔 A、B、C 对模式有着各自的偏好,与 12 个手下有不同的交情。隐藏恶魔 A 的偏好是之前的模式 A,因此与④、⑦性情相投。因为模式 A 的 4 号像素与 7 号像素是 ON,所以理所当然地与对应的看守人④、⑦性情相投。

同样地,手下⑤、⑧与隐藏恶魔 B,手下⑥、⑨与隐藏恶魔 C 性情相投,因此他们之间传递兴奋度的管道也变粗了(下图)。

住在隐藏层的隐藏恶魔 A、B、C 与住在上层的 2 个输出恶魔也有着人际关系。由于某种羁绊,输出恶魔 0 与隐藏恶魔 A、C 性情相投,而输出恶魔 1 与隐藏恶魔 B 性情相投。

以上就是恶魔组织的所有人际关系。除了隐藏恶魔 A、B、C 有不一样的偏好以外,这是一个人类社会中到处都可能存在的简单的组织。

那么,这里让我们读入手写数字 0。

于是,作为像素看守人的手下④、⑦和手下⑥、⑨看到这个图像就变得非常兴奋了(下图)。

这时,兴奋的手下④、⑦向性情相投的隐藏恶魔 A 传递了较强的兴奋度信息,兴奋的手下⑥、⑨也向性情相投的隐藏恶魔 C 传递了较强的兴奋度信息。相对地,几乎没有手下向隐藏恶魔 B 传递兴奋度信息(下图)。

接收了来自手下的兴奋度信息的隐藏恶魔们会怎样呢?接收了较强的兴奋度信息的隐藏恶魔 A 和隐藏恶魔 C 自然也变兴奋了。另一方面,隐藏恶魔 B 变得怎样呢?因为几乎没有从手下接收到兴奋度信息,所以一直保持冷静。

住在最上层的输出恶魔变得怎样了呢?输出恶魔 0 由于与兴奋的隐藏恶魔 A、C 关系亲密,从而获得了较强的兴奋度信息,所以自己也兴奋起来了。相对地,输出恶魔 1 与隐藏恶魔 A、C 关系疏远,而与之关系亲密的隐藏恶魔 B 一直保持冷静,所以输出恶魔 1 没有获得兴奋度信息,因此也保持冷静。

这样一来,读取手写数字 0 的图像后,根据恶魔之间的连锁关系,最终得到了“输出恶魔 0 兴奋,输出恶魔 1 冷静”的结果。根据前文中的“如果输出恶魔 0 的兴奋度比输出恶魔 1 的兴奋度大,神经网络就判断图像的数字为 0”,恶魔的网络推导出了 0 这个解答。

恶魔的心的偏置

在这个恶魔组织中,下层的兴奋度会或多或少地传递到上层。但是,除了具有亲密关系的各层之间传递的兴奋度信息以外,还遗漏了少量信息,就是“噪声”。如果这些噪声迷住了恶魔的心,就会导致无法正确地传递兴奋度信息。因此,这就需要减少噪声的功能。对于恶魔组织的情形,我们就将这个功能称为“心的偏置”吧!具体来说,将偏置放在恶魔的心中,以忽略少量的噪声。这个“心的偏置”是各个恶魔固有的值(也就是个性)。

从关系中得到信息

像上面那样,恶魔组织实现了手写数字的模式识别。我们应该关注到,是恶魔之间的关系(也就是交情)和各个恶魔的个性(也就是心的偏置)协力合作推导出了答案。也就是说,网络作为一个整体做出了判断。

问题 在图中示范一下在读取数字 1 的图像时,恶魔组织得出 1 这个解答的全过程。

 在这种情况下,也能够根据上层恶魔与下层恶魔之间交情的好坏来判断图像中的数字是1。下图就是解答。沿着下图的粗线,输出恶魔1兴奋起来,判断出图像中的数字是1。

1-6 将恶魔的工作翻译为神经网络的语言

上一节我们通过恶魔讲解了神经网络的结构。本节我们将恶魔的工作用神经网络的语言来描述。

恶魔之间的“交情”表示权重

上一节考察了恶魔组织识别手写数字 0、1 的结构。将这个组织替换为神经网络,我们就能理解神经单元发挥良好的团队精神进行模式识别的结构。

首先,将恶魔看作神经单元。隐藏层住着 3 个隐藏恶魔 A、B、C,可以解释为隐藏层有 3 个神经单元 A、B、C。输出层住着 2 个输出恶魔 0、1,可以解释为输出层有 2 个神经单元 0、1。此外,输入层住着 12 个恶魔的手下,可以解释为输入层有 12 个神经单元(下图)。

接下来,将恶魔的“交情”看作神经单元的权重。隐藏恶魔 A 与手下④、⑦性情相投,这样的关系可以认为是从输入层神经单元④、⑦指向隐藏层神经单元 A 的箭头的权重较大。同样地,隐藏恶魔 B 与手下⑤、⑧性情相投,可以认为是从输入层神经单元⑤、⑧指向隐藏层神经单元 B 的箭头的权重较大。隐藏恶魔 C 与手下⑥、⑨性情相投,可以认为是从输入层神经单元⑥、⑨指向隐藏层神经单元 C 的箭头的权重较大。

注:关于权重,请参考 1-2 节、1-3 节。

隐藏恶魔 A、C 与上层的输出恶魔 0 性情相投,这个关系表示从隐藏层神经单元 A、C 指向输出层神经单元 0 的箭头的权重较大。同样地,隐藏恶魔 B 与输出恶魔 1 性情相投,这个关系表示从隐藏层神经单元 B 指向输出层神经单元 1 的箭头的权重较大。

这样解释的话,神经网络读入手写数字 0 时,神经单元 A 和 C 的输出值较大,输出层神经单元 0 的输出值较大。于是,根据神经网络整体的关系,最终识别出数字 0。

在像这个神经网络那样前一层与下一层全连接的情况下,在输入 0 的图像时,原本不希望做出反应的隐藏层神经单元 B 以及输出层神经单元 1 也有信号传递,因此需要禁止这样的信号并使信号变清晰,这样的功能就是偏置,在恶魔组织中表现为“心的偏置”。

如上所述,权重和偏置的协力合作使得图像识别成为可能。这就是“由神经网络中的关系得出答案”的思想。

模型的合理性

如上所述,我们将上一节考察过的恶魔的工作翻译为了神经网络的权重与偏置,但不要认为这样就万事大吉了。即使将恶魔的活动转换为了神经网络,也无法保证可以求出能够实现恶魔的工作的权重和偏置。而如果能够实际建立基于这个想法的神经网络,并能够充分地解释所给出的数据,就能够验证以上话题的合理性。这需要数学计算,必须将语言描述转换为数学式。为此,我们会在第 2 章进行一些准备工作,并从第 3 章开始进行实际的计算。

恶魔的人数

住在输出层的输出恶魔的人数是 2 人。为了判断图像中的数字是 0 还是 1,2 人是合适的。

住在隐藏层的隐藏恶魔的人数是 3 人。为什么是 3 人呢?如本节开头所讲的那样,这是由于存在某种预估,如下图所示。

根据该图可以预估数字 0 包含了图中的模式 A 和 C,数字 1 包含了模式 B。因此,只要准备好对上图的模式 A、B、C 做出反应的神经单元,就能够判断图像中的数字是 0 还是 1。这 3 个神经单元正是隐藏恶魔 A、B、C 的本来面目。

上一节中为隐藏恶魔 A、B、C 设定分别喜欢模式 A、B、C 的特征,也是出于这个原因。

以上是在隐藏层部署 3 个神经单元的理由。通过让这个神经网络实际读取图像数据并得出令人信服的结论,可以确认这个预估的正确性。

关于具体的确认方法,我们将在第 3 章考察。

神经网络与生物的类比

让我们从生物的观点来看神经网络。

请想象一下生物看东西时的情形。可以认为,输入层神经单元相当于视细胞,隐藏层神经单元相当于视神经细胞,输出层神经单元相当于负责判断的大脑神经细胞群。

不过,相当于隐藏层神经单元的视神经细胞实际上存在吗?例如,第一个神经单元对前面图中的模式 A 做出反应,像这样的视神经细胞存在吗?

实际上,1958 年美国生理学家大卫· 休伯尔(David Hunter Hubel)和托斯坦· 威泽尔(Torsten Wiesel)发现存在这种细胞,这种细胞被命名为特征提取细胞。对某种模式做出强烈反应的视神经细胞有助于动物的模式识别。想到本节考察的“恶魔”在大脑中实际存在,这真是非常有意思的事情。

备注 人工智能研究中的几次热潮

人工智能的研究大约是从 20 世纪 50 年代开始的,其发展史与计算机的发展史有所重合,可以划分为以下 3 次热潮。

世代

年代

关键

主要应用领域

第1代

20 世纪 50 ~ 60 年代

逻辑为主

智力游戏等

第2代

20 世纪 80 年代

知识为主

机器人、机器翻译

第3代

2010 年至今

数据为主

模式识别、语音识别

1-7 网络自学习的神经网络

在前面的 1 - 5 节和 1 - 6 节中,我们利用恶魔这个角色,考察了识别输入图像的机制。具体来说,就是根据恶魔组织中的关系来判断。不过,之前的讲解中事先假定了权重的大小,也就是假定了各层恶魔之间的人际关系。那么,这个权重的大小(恶魔的关系)是如何确定的呢?神经网络中比较重要的一点就是利用网络自学习算法来确定权重大小。

从数学角度看神经网络的学习

神经网络的参数确定方法分为有监督学习和无监督学习。本书只介绍有监督学习。有监督学习是指,为了确定神经网络的权重和偏置,事先给予数据,这些数据称为学习数据。根据给定的学习数据确定权重和偏置,称为学习

注:学习数据也称为训练数据。

那么,神经网络是怎样学习的呢?思路极其简单:计算神经网络得出的预测值与正解的误差,确定使得误差总和达到最小的权重和偏置。这在数学上称为模型的最优化(下图)。

关于预测值与正解的误差总和,有各种各样的定义。本书采用的是最古典的定义:针对全部学习数据,计算预测值与正解的误差的平方(称为平方误差),然后再相加。这个误差的总和称为代价函数(cost function),用符号 C_{\rm T} 表示(T 是 Total 的首字母)。

利用平方误差确定参数的方法在数学上称为最小二乘法,它在统计学中是回归分析的常规手段。

我们将在 2-12 节以回归分析为例来具体考察什么是最小二乘法。

另外,本书以手写数字的模式识别为例进行说明。因此,学习数据是图像数据,学习实例是图像实例。

需要注意的是,神经网络的权重是允许出现负数的,但在用生物学进行类比时不会出现负数,也难以将负数作为神经传递物质的量。可以看出,神经网络从生物那里得到启发,又飞跃到了与生物世界不同的另一个世界。

备注 奇点

奇点(singularity)被用来表示人工智能超过人类智能的时间点。据预测是 2045 年,也有不少人预测这个时间点会更早到来。

目录