从感知机到神经网络
神经网络和上一章介绍的感知机有很多共同点。这里,我们主要以两者
的差异为中心,来介绍神经网络的结构。
神经网络的例子
用图来表示神经网络的话,如图3-1 所示。我们把最左边的一列称为
输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也称为隐藏层。“隐藏”一词的意思是,隐藏层的神经元(和输入层、输出
层不同)肉眼看不见。另外,本书中把输入层到输出层依次称为第0 层、第
1 层、第2 层(层号之所以从0 开始,是为了方便后面基于Python 进行实现)。
图3-1 中,第0 层对应输入层,第1 层对应中间层,第2 层对应输出层。
图3-1 中的网络一共由3 层神经元构成,但实质上只有2 层神经
元有权重,因此将其称为“2 层网络”。请注意,有的书也会根据
构成网络的层数,把图3-1 的网络称为“3 层网络”。本书将根据
实质上拥有权重的层数(输入层、隐藏层、输出层的总数减去1
后的数量)来表示网络的名称。
只看图3-1 的话,神经网络的形状类似上一章的感知机。实际上,就神
经元的连接方式而言,与上一章的感知机并没有任何差异。那么,神经网络
中信号是如何传递的呢?
复习感知机
在观察神经网络中信号的传递方法之前,我们先复习一下感知机。现在来思考一下图3-2 中的网络结构。
图3-2 中的感知机接收x1x_1x1和x2x_2x2两个输入信号,输出y。如果用数学式来
表示图3-2 中的感知机,则如式(3.1)所示。
y={0(b+w1x1+w2x2⩽0)1(b+w1x1+w2x2>0)\begin{align*} y = \begin{cases} 0 & (b + w_1 x_1 + w_2 x_2 \leqslant 0) \\ 1 & (b + w_1 x_1 + w_2 x_2 > 0) \end{cases} \end{align*}y={01(b+w1x1+w2x2⩽0)(b+w1x1+w2x2>0)
b 是被称为偏置的参数,用于控制神经元被激活的容易程度;而w1w_1w1和w2w_2w2
是表示各个信号的权重的参数,用于控制各个信号的重要性。
顺便提一下,在图3-2 的网络中,偏置b 并没有被画出来。如果要明确
地表示出b,可以像图3-3 那样做。图3-3 中添加了权重为b 的输入信号1。这
个感知机将x1x_1x1、x2x_2x2、1 三个信号作为神经元的输入,将其和各自的权重相乘后,
传送至下一个神经元。在下一个神经元中,计算这些加权信号的总和。如果
这个总和超过0,则输出1,否则输出0。另外,由于偏置的输入信号一直是1,
所以为了区别于其他神经元,我们在图中把这个神经元整个涂成灰色。
现在将式(3.1)改写成更加简洁的形式。为了简化式(3.1),我们用一个
函数来表示这种分情况的动作(超过0 则输出1,否则输出0)。引入新函数
h(x),将式(3.1)改写成下面的式(3.2)和式(3.3)
y=h(b+w1x1+w2x2)\begin{align*} y=h(b+w_1x_1+w_2x_2) \end{align*}y=h(b+w1x1+w2x2)
h(x)={0(x⩽0)1(x>0)\begin{align*} h(x) = \begin{cases} 0 & (x \leqslant 0) \\ 1 & (x > 0) \end{cases} \end{align*}h(x)={01(x⩽0)(x>0)
式(3.2)中,输入信号的总和会被函数h(x) 转换,转换后的值就是输出y。
然后,式(3.3)所表示的函数h(x),在输入超过0 时返回1,否则返回0。因此,
式(3.1)和式(3.2)、式(3.3)做的是相同的事情。
激活函数登场
刚才登场的h(x)函数会将输入信号的总和转换为输出信号,这种函数
一般称为激活函数(activation function)。如“激活”一词所示,激活函数的
作用在于决定如何来激活输入信号的总和。
现在来进一步改写式(3.2)。式(3.2)分两个阶段进行处理,先计算输入
信号的加权总和,然后用激活函数转换这一总和。因此,如果将式(3.2)写
得详细一点,则可以分成下面两个式子。
a=b+w1x1+w2x2(3.4)a = b + w_1 x_1 + w_2 x_2 \tag{3.4}a=b+w1x1+w2x2(3.4)
y=h(a)(3.5)y = h(a) \tag{3.5}y=h(a)(3.5)
首先,式(3.4)计算加权输入信号和偏置的总和,记为a。然后,式(3.5)
用h()函数将a转换为输出y。
之前的神经元都是用一个○表示的,如果要在图中明确表示出式(3.4)
和式(3.5),则可以像图3-4 这样做。
如图3-4 所示,表示神经元的○中明确显示了激活函数的计算过程,即
信号的加权总和为节点a,然后节点a被激活函数h() 转换成节点y。本书中,“神
经元”和“节点”两个术语的含义相同。这里,我们称a和y 为“节点”,其实
它和之前所说的“神经元”含义相同。
通常如图3-5 的左图所示,神经元用一个○表示。本书中,在可以明确
神经网络的动作的情况下,将在图中明确显示激活函数的计算过程,如图3-5
的右图所示。
下面,我们将仔细介绍激活函数。激活函数是连接感知机和神经网络的
桥梁。
本书在使用“感知机”一词时,没有严格统一它所指的算法。一
般而言,“朴素感知机”是指单层网络,指的是激活函数使用了阶
跃函数A 的模型。“多层感知机”是指神经网络,即使用sigmoid
函数(后述)等平滑的激活函数的多层网络。