感知机
什么是神经网络?开始,我们介绍一种人工神经元——感知机。感知机是1950-1960年被科学家 Frank Rosenblatt 发明的,主要受到早期 Warren McCulloch和Walter Pitts 工作的启发。今天,通常使用是的其他的人工神经元——在本书中,和现代神经网络中,主要使用的神经元模型叫Sigmoid神经元。我们将很快说到Sigmoid神经元。但为了理解为什么会出现Sigmoid神经元,我们需要花点时间来理解感知机。
那么感知机是如何工作的呢?一个感知机有许多二进制输入,,,...,并产生一个二进制输出:
在上面的例子中展示的感知机有三个输入,,,。通常它可以有更多和更少的输入。Rosenblatt推荐了一个简单的计算输出的规则。他引进了权重(weights),,,...,表达各输入对输出重要程度的实数。神经元的输入,0或1,由权重和是比阈值小还是大决定的。和权重一样,阈值是神经元参数之一的实数。用更严格的数据公式表示:
这就是感知机的工作方式。
这些都是基本的数学模型。你可以把感知机理解成通过权衡证据做出决策的机器。让我们举个栗子。虽然是一个不太现实的栗子,但比较容易理解,而且我们马上就会遇到一个非常实际的栗子。假设周末就要到了,并且你听说市上要举办奶酪节。你喜欢吃奶酪,并试着决定是否参加这个节日。你可能将你的决定通过三个因素来权衡:
1.天气好不好?
2.你的BF或GF是否想陪你去?
3.节日举办地是否离公交站比较近?(你没车....)
我们可以将这三个因素对应成二进制变量,和。例如:如果天气好的话我们让,不好的话则。相似的,如要BF或FG想去则,否则。相似地对和公交车站一样。
现在,假设你非常喜欢奶酪,就算你的BF或GF不感兴趣、节日举办地很难去,你也非常想参加奶酪节。但或许你真得是讨厌坏天气,完全不能接受在坏天气下参加节日。你可以使用感知机处理这种决策制定模型。一种方式是是选择一个天气权重,其他条件为,。的值比较大表明,比起你的BF或GF和你一起或离公交站比较近,你更关心天气。最后,假设你为感知机选择的阈值是5。使用这些选择,感知机实现了期望中的决策制定模型,当天气好的时候总输出1,不好的时候是0。你的BF或GF是否去,离公交站是否近对输出没有任何影响。 通过不同的权重和阈值,我们可以得到不同的决策制定模型。例如,假设我们将阈值替换为3。然后感知机在决定你去参加节日的条件为,只要天气好或者你的BF或GF和你一起并且离公交站比较近。也就是说,这是一个不同的决策制定模型。减小阈值意味着你去参加节日的意愿更加强烈。
显然,感知机并不是一个完备的人类决策制定模型!但是这个例子阐明了感知机是如何为了制定决定而权衡不同证据的。并且一个复杂的感知机网络看上去可以做一些非常微妙的决策: 在这个网络里,感知机的第一列——我们将其叫做感知机的第一层——通过权衡输入的证据做三种非常简单的决策。那感知机的第二层呢?它们的每一个都通过权衡第一层决策结果做决策。这样感知机就可以在第二层里做一些比第一层更复杂更抽象的决策。乃至通过感知机的第三层做更复杂的决策。通过这种方式,一个多层网络感知机可以从事复杂的决策制定工作。
顺便,当定义感知机的时候我说过一个感知机只有一个输出。在上面的感知机网络里看上去它们好像有多个输出。实际上,它们仍然只有一个输出。那此多个输出的箭头仅仅是用来表示,一个感知机的输出做为其他感知机的输入。比起为了只画一条输出线而把它们分成多个,这样做要轻快很多。
让我们简化一下对感知机的描述。这个条件太繁琐了,我们可以做两个符号上改变去简化它。第一个改变是将写成点积的形式,,这里的和分别是权重和输入的向量。第二个改变是将阈值移到不等号的另一边,并将其换作感知机的偏差,。使用偏差替换阈值后,感知机的规则可以被重新写成:
你可以将偏差理解成感知机输出1的容易程度。或者更生动一点,偏差就是感知机点火的容易程度。为感知机设置一个十分大的偏差,那么它将非常容易输出1。但如果偏差是个非常小的负数,那么感知机将很难输出1。显然,刚介绍的偏差对于感知机的描述来说只是一个很小的改变,但后面我们将看到它带来符号上的进一步简化。也正由于这样,本书剩下的部分将不再使用阈值这个概念,而总会使用偏差。
我已经将感知机描述为通过证据权重做出决策的一种方法。另外感知机还可以被用来做基本的逻辑运算,像我们通常的基本运算如与、或和非。例如,假设一个感知机有两个输入,每一个的权重都是-2,整体偏差是3。下面是我们的感知机:
然后我们看到输入将输出,因为是正数。这里通过符号来明确了乘法计算。相似的计算过程可以展示出输入和会输出1。但输入将输出0,因为是负数。因此我们的感知机实现了一个与非门!
与非门的例子显示出我们可以使用感知机做简单的逻辑运算。实际上,我们可以使用感知机网络做所有逻辑运算。因为与非门是一个通用的运算,也就是说,我们可以在与非门的基础上构建任何一种运算。例如,我们可以使用与非门构建一个两位相加的电路,和。这就要计算按位求和,,也需要考虑进位标志位,当和都是的时候设置为,即进位标志位只是的位运算:
这个感知机网络里需要注意的一方面是,最左边感知机的输出被用来做为最下面感知机的两次输入。当我定义这个感知机模型的时候,我并没有说这种两次输出到同一位置的情况是否被允许。实际上,这并无大碍。如果我们不允许这种情况的发生,那么可以简单地合并两条线,将两条权重是-2的连接换成一条权重是-4的连接。(如果你不能明显的发现它,那么你应该停下来证明这是等价的。)通过这个改变,网络看上去像下面这样,所有未标记的权重为-2,所有的偏差是-3,而有一个权重是-4被标记了出来:
到目前为止我一直将像和这样的输入作为变量,画在感知机网络的左侧。实际上,更常见的是将其画做感知机的额外一层——输入层——用来对输入进行编码:
做为感知机的输入需要注意的是,它只有输出没有输入, 是一种简写形式。但并不意味着感知机真的没有输入。来看这个,假设感知机没有输入,那么权重和将会总是0,所以感知机的输出在的情况下为,的情况下为。也就是说,感知机只会简单的输出固定值,不是期望值(在上面的例子里是)。最好是理解感知机的输入根本不是真正的感知机,更确切地说它是简单定义为输出期望值的特殊单位,,,....
这个加法的例子示范了一个感知机可以被用来模拟包含多个与非门的电路。并且由于与非门是普遍的计算形式,因而感知机也是普遍的计算形式。感知机的计算通用性即让人欣慰又让人失望。让人欣慰的是感知机网络可以像其他计算设备一样强大。但这也是让人失望的地方,因为看起来感知机只不过是一种新的与非门而以。这几乎不是一个大新闻!
不管怎样,形势要比看上好得多。原来我们可以计算一种可以自动调整人工神经元权重和偏差的学习算法。这种调优发生在应对外部的刺激,没有程序员的直接介入。这此学习算法让我们能够让人工神经元有一种与传统逻辑门根本不同的使用方式。与直接布局电路的与非或其它门不同,我们的神经网络可以简单了学习去解决问题,有时问题对于直接设计一个传统了电路来说非常困难。