《神经网络和深度学习》系列文章二:感知机

出处: Michael Nielsen的《Neural Network and Deep Leraning》。本节译者:哈工大SCIR硕士生 徐梓翔 (https://github.com/endyul)

目录

1、使用神经网络识别手写数字

  • 感知机
  • sigmoid神经元
  • 神经网络的结构
  • 用简单的网络结构解决手写数字识别
  • 通过梯度下降法学习参数
  • 实现我们的网络来分类数字
  • ​关于深度学习

2、反向传播算法是如何工作的

3、改进神经网络的学习方法

4、神经网络能够计算任意函数的视觉证明

5、为什么深度神经网络的训练是困难的


什么是神经网络?在回答这个问题之前,我会先解释一种叫做感知机(perceptron)的人工神经元。感知机由科学家Frank Rosenblatt发明于1950至1960年代,他受到了来自Warren McCulloch 和Walter Pitts的更早工作的启发。现如今,我们通常使用其它种类的人工神经元模型——在这本书里,以及在许多关于神经网络的最新工作里,主要使用的是一种叫做sigmoid神经元(sigmoid neuron)的神经元模型。我们会在稍后学习sigmoid神经元。为了理解sigmoid神经元,我们首先需要花一点时间来理解感知机,这是非常有价值的。


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



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



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


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


  • 天气好不好?
  • 你的男朋友或者女朋友会陪你去吗?
  • 坐公共交通方便去吗?(假设你自己没有车)


我们可以使用x1,x2,和x3这几个二进制变量来表示这三个因素。比如,如果天气很好,那么我们令x1=1,否则如果天气不好,那么x1=0。同样地,如果你的男朋友或者女朋友也想去,那么x2=1,否则x2=0。代表公共交通的x3也用类似的方法来表示。


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


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


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



在这个网络中,第一列感知机——通常称为第一层感知机——通过赋予输入的evidence权重,做出三个非常简单的决策。第二层感知机呢?每一个第二层感知机通过赋予权重给来自第一层感知机的决策结果,来做出决策。通过这种方式,第二层感知机可以比第一层感知机做出更加复杂以及更高层次抽象的决策。第三层感知机能够做出更加复杂的决策。通过这种方式,一个多层网络感知机可以做出更加精细的决策。


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


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



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


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



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


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



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



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


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


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



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


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


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


不过,情况还是相对比较乐观的。我们可以设计学习算法(learning algorithm)使得能够自动地调整人工神经元网络的权重和偏移。这种调整能够对外部刺激作出响应,而不需要程序员的直接干预。这些学习算法使得我们能够用一种与传统逻辑门从根本上不同的方法使用人工神经元。我们不需要显式地排布NAND和其它逻辑门组成电路,取而代之的是,神经网络可以通过简单的学习来解决问题,通常这些问题用直接设计传统电路的方法来解决是非常困难的。


下一节我们将介绍 “sigmoid神经元”,敬请关注!


本文来源于哈工大SCIR

原文链接点击即可跳转


哈尔滨工业大学社会计算与信息检索研究中心

入门理论Michael Nielsen深度学习神经网络哈工大感知机