感知机

    那么,感知机是怎么工作的呢?感知机的输入是几个二进制,,输出是一位单独的二进制:

    本例中的感知机有三个输入,。通常,它可以有更多或者更少的输入。Rosenblatt提出了一种计算输出的简单的规则。他引入了权重(weight),,等实数来表示各个输入对于输出的重要程度。神经元的输出是0还是1,由加权和是否小于或者大于某一个阈值(threshold value)。和权重一样,阈值也是一个实数,同时它是神经元的一个参数。使用更严密的代数形式来表示:

    \begin{eqnarray} \mbox{output} & = & \left\{ \begin{array}{ll} 0 & \mbox{if } \sum_j w_j x_j \leq \mbox{ threshold} \\ 1 & \mbox{if } \sum_j w_j x_j > \mbox{ threshold} \end{array} \right. \tag{1}\end{eqnarray}

    这就是感知机的工作方式!

    这是一个基础的数学模型。你可以这样理解感知机,它是一个通过给evidence赋予不同权重从而作出决策的机器。让我们来举一个例子,或许这不是一个真实的例子,但是它很容易理解,稍后我们会举一个更实际的例子。假设周末就要到了,你听说你所在的城市将会举办一个奶酪节。你非常喜欢奶酪,你正在犹豫是否要去参加这个节日。你可能需要权衡以下几个因素来作出决定:

    假设你真的超级喜欢奶酪,即便是你的男朋友或者女朋友的对此没兴趣并且交通也不方便的情况下,你也依然很想去。不过,你非常在意天气情况,如果天气不好的话你就不会去参加了。你可以用感知机来为这样的决策建立模型。一种方式是,你可以为天气赋予权重,为另外两个条件赋予权重和。相对来说值比较大的表明了天气情况对你的决策影响更大,胜过了你的男朋友或者女朋友是否会陪你去,以及交通的便捷程度。最后,假设你选择作为感知机的阈值。这样,这个感知机就构建起了一个决策模型,只要天气好就输出,只要天气不好就输出。你的男朋友或者女朋友是否会去,以及公共交通是否方便,都不会影响输出的结果。

    通过调整权重和阈值的大小,我们可以得到不同的决策模型。例如,假设我们选择的阈值为。那么此时,如果要让感知机做出你应该去参加这个节日的决策,就需要满足天气很好或者交通方便的同时你的男朋友或者女朋友也会陪你去。也就是说,这个决策模型与之前不同了。阈值的降低意味着你参加这个节日的意愿越强。

    显然,感知机不能完全建模人类的决策系统!不过,这个例子阐明的是感知机如何赋予不同evidence权重来达到做出决策的目的。一个由感知机构成的复杂网络能够做出更加精细的决策,这貌似看上去是说得通的:

    tikz1

    顺便提一句,当我之前定义感知机的时候,我说到感知机只有一个输出。在上面这个网络中,感知机似乎看上去有多个输出。实际上,它们仍然只有一个输出。多个输出箭头仅仅是用来方便表示它的输出被用作其它几个感知机的输入。如果画成一个输出分裂出几个箭头就太难看了。

    让我们来简化一下对感知机的描述。的条件太笨重了,我们可以通过使用两个新记法来简化它。第一是使用点乘来代替。我们有,其中和都是向量,它们的元素分别代表了权重和输入。第二是将阈值移到不等号的另一侧,并使用偏置(bias)来代替阈值threshold, 。于是,感知机规则可以被重写为:

    \begin{eqnarray} \mbox{output} = \left\{ \begin{array}{ll} 0 & \mbox{if } w\cdot x + b \leq 0 \\ 1 & \mbox{if } w\cdot x + b > 0 \end{array} \right. \tag{2}\end{eqnarray}

    你可以将偏置(bias)理解为感知机为了得到输出为1的容易度的度量。如果从生物的角度来理解,偏置是使神经元被激活的容易度的度量。如果一个感知机的偏置非常大,那么这个感知机的输出很容易为1,相反如果偏置非常小,那么输出1就很困难。显然,引入偏置的概念仅仅是一个很小的改动,稍后我们会对这个公式进行进一步的简化。在本书的剩余部分,我们将不再使用阈值,而是使用偏置(bias)。

    我之前将感知机描述为通过权衡evidence做出决策的一种方法。感知机的另一种用途是计算初等逻辑函数,例如、ORNAND。例如,假如一个感知机有两个输入,每一个权重都是,偏置为,如图:

    那么,对于输入,输出为,因为(-2)<em>0+(-2)</em>0+3 = 3的结果是正的。这里我用<em>符号显式写出了运算过程。类似地,对于输入和,输出都是。但是对于输入,输出为,因为(-2)</em>1+(-2)*1+3 = -1的结果是负的。从而,这个感知机就实现了NAND门!

    这个的例子表明了我们可以使用感知机来计算初等逻辑函数。实际上,我们可以使用感知机网络计算任何逻辑函数,因为NAND门在计算上是通用的,这意味着我们可以使用NAND门构建任意逻辑运算。例如,我们可以使用NAND门构造一个求和两个比特和的电路。这需要计算,以及进位:

    tikz3

    为了得到一个等价的感知机网络,我们可以将所有的门替换成一个拥有两个输入,权重均为,偏置为的感知机。下图是替换后的结果。我将右下角的NAND门对应的感知机移动了一点位置,仅仅是为了方便画箭头。

    值得注意的是,最左面的感知机的输出在作为最下面的感知机的输入时,被用到了两次。我之前定义感知机模型的时候,没有提到是否允许这种情况。实际上,这并没有什么影响。如果我们不允许这种情况发生,那么我们可以将这两条权重为的线合并成一个权重为的线。(如果你不能理解这点,你应该停下来试图证明这种替换是等价的。)通过这种变换,这个网络变成如下图的形式,所有未被标记的权重都为,所有的偏置都为,以及一条被标出的边的权重为:

    到目前为止,我都将输入和当做变量画在了感知机网络的左边。实际上,大家更习惯使用另外一层感知机——输入层(input layer)——来为输入编码:

    tikz6

    以下这个记号用来表示输入感知机,它有一个输出,没有输入,

    但这并不意味着感知机可以没有输入。我们可以这样理解,假设存在一个没有输入的感知机,那么加权和恒为0,所以如果,那么感知机输出,如果,那么感知机输出为。这意味着这个感知机仅仅输出一个固定的值,而非我们想要的值(在上面的例子中是)。所以,我们最好不要将输入感知机当做感知机,而是理解为一个特殊的单元,它能够输出我们想要的值。

    以上这个加法的例子展示了感知机网络如何模拟一个包含很多NAND门的电路。同时,由于NAND门对于计算是通用的,所以感知机对于计算也是通用的。

    感知机的计算普遍性既让人感到安心,也让人感到失望。说它是安心的,因为感知机网络与任何其它的计算设备拥有同样强大的计算能力。说它是令人沮丧的,因为它看上去不过是一种新的门,很难搞个大新闻。