深入浅出神经网络与深度学习
上QQ阅读APP看书,第一时间看更新

1.1 感知机

什么是神经网络?首先介绍一种名为感知机的人工神经元。20 世纪五六十年代,科学家 Frank Rosenblatt 发明了感知机,其受到了 Warren McCulloch 和 Walter Pitts 早期研究的影响。如今,人们普遍使用其他人工神经元模型。本书以及当代多数神经网络论著主要使用一种名为 sigmoid 神经元的神经元模型。稍后会介绍 sigmoid 神经元,但要理解 sigmoid 神经元的来由,需要先了解感知机。

感知机接收若干个二进制输入 ,并生成一个二进制输出,如图 1-3 所示。

图 1-3

图 1-3 中的感知机有 3 个输入 ,一般来说输入还可以更多或更少。Rosenblatt 提出了一条计算输出的简单规则。他引入权重 ,用这些实数来表示输入对于输出的重要性。神经元的输出究竟是 0 还是 1,则由加权和 小于或大于某个阈值来决定。类似于权重,阈值也是实数,且是神经元的一个参数。更精确的代数表示如下:

这就是感知机的运行机制。

可以将感知机看作根据权重来做决策的机器。下面举例说明,这并不是一个特别真实的例子,但是容易理解,稍后会给出更多实例。假设本周末你所在的城市有个奶酪节,你正好喜欢吃奶酪,考虑是否去看看。可以通过给以下 3 个因素设置权重来做出决定。

(1) 天气如何?

(2) 你的男朋友或女朋友会不会陪你去?

(3) 庆祝地点是否靠近公共交通站点?(假设你自己没有车。)

可以把这 3 个因素分别表示为二进制变量 。如果天气好,则 ;如果天气不好,则 。类似地,如果你的男朋友或女朋友同去,,否则 。同理, 表示交通情况。

现在,假设你酷爱奶酪,即使你的男朋友或女朋友不感兴趣,而且不管多么大费周折,你都乐意去。也许你确实讨厌糟糕的天气,而且如果天气太糟你也没法出门。可以使用感知机来为这种决策建模。一种方式是为天气设置权重,令 ,其他条件为 。赋予 更大的值,表示天气状况的重要性超过男朋友或女朋友是否陪同和附近有无交通站点。最后,假设将感知机的阈值设为 5,这样就用感知机做出了决策模型:天气好就输出 1,天气不好则输出 0。对于男朋友或女朋友是否同去,或者附近有无公共交通站点,输出其实没有差别。

通过调整权重和阈值,可以得到不同的决策模型。例如把阈值改为 3,那么感知机会按照天气状况,并结合交通情况和男朋友或女朋友同行的意愿,来得出结果。换言之,调整阈值将得到不同的决策模型。降低阈值表示你更想去。

显然,感知机模型不能完全模拟人类决策,但这个例子展示了感知机如何通过权衡不同的因素来做出决策。可以想见,复杂的感知机网络能够做出更精细的决策,如图 1-4 所示。

图 1-4

在如图 1-4 所示的网络中,第一列(第一层)感知机通过权衡输入做出 3 个非常简单的决策。第二层的感知机权衡第一层的决策结果并做出自己的决策,因此比第一层中的感知机做出的决策更复杂、更抽象。同理,第三层中的感知机能做出比之前更复杂的决策。通过这种方式,一个多层感知机网络可以做出复杂精巧的决策。

顺便提一下,前面定义感知机时说感知机只有一个输出,而图 1-4 中的感知机看上去似乎有多个输出。其实,它仍然只有一个输出图上感知机的多个输出箭头仅仅为了说明一个感知机的输出被其他感知机使用。跟把单个输出线条分叉相比,这样做更便于理解。

下面简化感知机的数学表达。条件 阈值 看上去有些冗长,可以更改两个符号来进行简化。首先把 改写成点乘,即 。其中, 分别对应权重和输入的向量。然后把阈值移到不等式的另一边,并用感知机的偏置 阈值来代替。使用偏置而不是阈值,感知机的规则可以重写为:

可以把偏置看作对让感知机输出 1(类似于生物学上的“激活感受器”)难易程度的估算。对于一个具有很大偏置的感知机来说,输出 1 是很容易的;但如果偏置是一个非常小的负数,输出 1 则很困难。显然,引入偏置只是描述感知机的一个很小的变动,后面会看到它将更进一步地简化符号。因此,本书的后续部分不再使用阈值,而会使用偏置。

前面讲过,感知机通过权衡不同的因素来做出决策。感知机的另一种用法是执行基本的逻辑运算,例如 AND、OR、NAND。假设有个感知机接收两个输入,每个的权重为-2,整体的偏置为 3,如图 1-5 所示。

图 1-5

输入 00 会产生输出 1,这是因为 是正数。这里用星号*来表示乘法。输入 11 会产生输出 0,这是因为 是负数。这样,感知机就实现了一个与非门!

与非门的例子表明,可以用感知机来执行简单的逻辑运算。实际上,可以用感知机网络来执行任何逻辑运算,这是因为与非门是通用的逻辑运算,用多个与非门可以构建出任何运算。例如,可以用与非门构建一个电路,它把两个二进制数 相加。这需要按位求和,,并且当 都为 1 时进位设为 1,即进位正好是按位乘积 ,如图 1-6 所示。

图 1-6

为了得到一个与之等价的感知机网络,可以把所有与非门替换为接收两个输入的感知机,并将每个输入对应的权重设为-2,将整体偏置设为 3。结果得到如图 1-7 所示的网络。请注意,右下的与非门移动了一点,这样做只是为了在图上更方便地画箭头。

图 1-7

在这个感知机网络中,有一个部分值得注意:最左边的感知机的输出两次作为底部感知机的输入。前面定义感知机模型时,没有讲过是否允许这种双输出到同一处,实际上这并不重要。如果不想要这种形式,可以把两条线合并简化成一个权重为 -4 的连接,而不是两个权重为 -2 的连接。(如果这里不明白,需要停下来仔细思考。)改动之后,原先的网络变成如图 1-8 所示的这样,所有未标记的权重均为 -2,所有偏置均为 3,标记的单个权重为 -4。

图 1-8

前面把 这样的输入画成感知机网络左边的浮动变量,实际上可以画一层额外的感知机——输入层,来对输入进行编码,如图 1-9 所示。

图 1-9

根据这种表示方法,感知机有一个输出,但没有输入,如图 1-10 所示。

图 1-10

这是一种简化,并不表示感知机没有输入。为了说明,假设确实有一个没有输入的感知机,那么加权和 总会为 0,并且感知机在 时输出 1,在 时输出 0。这样,感知机会简单输出一个固定值,而不是目标值(上例中的 )。倒不如不要把输入感知机看作感知机,而是简单地定义为输出目标值的特殊单元

这个加法器例子演示了如何使用感知机网络模拟包含很多与非门的电路。鉴于与非门在计算中的通用性,可以想见感知机也具有通用性。

感知机在计算中的通用性既令人振奋,又令人失望。令人振奋是因为它表明感知机网络能像其他计算设备那样强大;令人失望的是,它看上去不过是一种新的与非门,并不像是重大突破。

然而,实际情况要好很多。我们可以设计学习算法来自动调整人工神经元的权重和偏置。这种调整可以自动响应外部刺激,而不需要程序员直接干预。这些学习算法让我们能够以跟传统逻辑门完全不同的方式使用人工神经元。有别于显式设计与非门或其他逻辑门,神经网络能轻松学会如何解决一些问题,这些问题有时很难直接用传统的电路设计来解决。