1.2 S 型神经元
学习算法听上去非常棒。但是我们怎样给一个神经网络设计这样的算法呢?假设我们有一个感知器网络,想要用它来解决一些问题。例如,网络的输入可以是一幅手写数字的扫描图像。我们想要网络能学习权重和偏置,这样网络的输出能正确分类这些数字。为了看清学习是怎样工作的,假设我们把网络中的权重(或者偏置)做些微小的改动。就像我们马上会看到的,这一属性会让学习变得可能。这里简要示意我们想要的(很明显这个网络对于手写识别还是太简单了!):
如果对权重(或者偏置)的微小的改动真的能够仅仅引起输出的微小变化,那我们可以利用这一事实来修改权重和偏置,让我们的网络能够表现得像我们想要的那样。例如,假设网络错误地把一个“9”的图像分类为“8”。我们能够计算出怎么对权重和偏置做些小的改动,这样网络能够接近于把图像分类为“9”。然后我们要重复这个工作,反复改动权重和偏置来产生更好的输出。这时网络就在学习。
问题在于当我们的网络包含感知器时这不会发生。实际上,网络中单个感知器上一个权重或偏置的微小改动有时候会引起那个感知器的输出完全翻转,如 变到 。那样的翻转可能接下来引起其余网络的行为以极其复杂的方式完全改变。因此,虽然你的“9”可能被正确分类,网络在其它图像上的行为很可能以一些很难控制的方式被完全改变。这使得逐步修改权重和偏置来让网络接近期望行为变得困难。也许有其它聪明的方式来解决这个问题。但是这不是显而易见地能让一个感知器网络去学习。
我们可以引入一种称为 S 型神经元的新的人工神经元来克服这个问题。 S 型神经元和感知器类似,但是被修改为权重和偏置的微小改动只引起输出的微小变化。这对于让神经元网络学习起来是很关键的。
好了, 让我来描述下 S 型神经元。我们用描绘感知器的相同方式来描绘 S 型神经元:
正如一个感知器, S 型神经元有多个输入,。但是这些输入可以取 和 中的任意值,而不仅仅是 或 。例如, 是一个 S 型神经元的有效输入。同样, S 型神经元对每个输入有权重,,和一个总的偏置,。但是输出不是 或 。相反,它现在是 ,这里 被称为 S 型函数1,定义为:
把它们放在一起来更清楚地说明,一个具有输入 ,权重 ,和偏置 的 S 型神经元的输出是:
初看上去, S 型神经元和感知器有很大的差别。如果你不熟悉 S 型函数的代数形式,它看上去晦涩难懂又令人生畏。实际上,感知器和 S 型神经元之间有很多相似的地方,跨过理解上的障碍, S 型函数的代数形式具有很多技术细节。
为了理解和感知器模型的相似性,假设 是一个很大的正数。那么 而 。即,当 很大并且为正, S 型神经元的输出近似为 ,正好和感知器一样。相反地,假设 是一个很大的负数。那么 。所以当 是一个很大的负数, S 型神经元的行为也非常近似一个感知器。只有在 取中间值时,和感知器模型有比较大的偏离。
的代数形式又是什么?我们怎样去理解它呢?实际上, 的精确形式不重要 —— 重要的是这个函数绘制的形状。是这样:
这个形状是阶跃函数平滑后的版本:
如果 实际是个阶跃函数,既然输出会依赖于 是正数还是负数2,那么 S 型神经元会成为一个感知器。利用实际的 函数,我们得到一个,就像上面说明的,平滑的感知器。的确, 函数的平滑特性,正是关键因素,而不是其细部形式。 的平滑意味着权重和偏置的微小变化,即 和 ,会从神经元产生一个微小的输出变化 。实际上,微积分告诉我们 可以很好地近似表示为:
其中求和是在所有权重 上进行的,而 和 符号表示 分别对于 和 的偏导数。如果你对偏导数感到不自在,不用惊慌。上面全部用偏导数的表达式看上去很复杂,实际上它的意思非常简单(这可是个好消息): 是一个反映权重和偏置变化 —— 即 和 —— 的线性函数。这一线性使得选择权重和偏置的微小变化来达到输出的微小变化的运算变得容易。所以当 S 型神经元有更多和感知器相同的本质的行为时,计算如何变化权重和偏置来使输出变化会更加容易。
如果对 来说重要的是形状而不是精确的形式,那为什么要在公式 (3) 中给 使用特定的形式呢?实际上,在这本书的后面我们会碰巧考虑到为其它激活函数 输出为 的神经元。当我们使用一个不同的激活函数,最大的变化是公式(5) 中用于偏导数的特定值的改变。事实证明当我们后面计算这些偏导数,用 会简化数学计算,这是因为指数在求导时有些可爱的属性。无论如何, 在神经网络的工作中被普遍使用,并且是这本书中我们最常使用的激活函数。
我们应该如何解释一个 S 型神经元的输出呢?很明显,感知器和 S 型神经元之间一个很大的不同是 S 型神经元不仅仅输出 或 。它可以输出 和 之间的任何实数,所以诸如 和 的值是合理的输出。这是非常有用的,例如,当我们想要输出来表示一个神经网络的图像像素输入的平均强度。但有时候这会是个麻烦。假设我们希望网络的输出表示“输入图像是一个9”或“输入图像不是一个9”。很明显,如果输出是 或 是最简单的,就像用感知器。但是在实践中,我们可以设定一个约定来解决这个问题,例如,约定任何至少为 的输出为表示 “这是一个9”,而其它小于 的输出为表示 “不是一个9”。当我们正在使用这样的约定时,我总会清楚地提出来,这样就不会引起混淆。
练习
- S 型神经元模拟感知器,第一部分
假设我们把一个感知器网络中的所有权重和偏置乘以一个正的常数,。证明网络的行为并没有改变。
- S 型神经元模拟感知器,第二部分
假设我们有上题中相同的设置 —— 一个感知器网络。同样假设所有输入被选中。我们不需要实际的输入值,仅仅需要固定这些输入。假设对于网络中任何特定感知器的输入 , 权重和偏置遵循 。现在用 S 型神经元替换所有网络中的感知器,并且把权重和偏置乘以一个正的常量 。证明在 的极限情况下, S 型神经元网络的行为和感知器网络的完全一致。当一个感知器的 时又为什么会不同?
1. 顺便提一下, 有时被称为逻辑函数,而这种新的神经元类型被称为逻辑神经元。既然这些术语被很多从事于神经元网络的人使用,记住它是有用的。然而,我们将继续使用 S 型这个术语。 ↩
2. 实际上,当 ,感知器输出 ,而同时阶跃函数输出 。所以严格地说,我们需要修改阶跃函数来符合这点。但是你知道怎么做。 ↩