双输入感知器(Perceptron)的决策空间

来源:互联网 发布:约瑟夫环算法python 编辑:程序博客网 时间:2024/06/12 05:08

感知器(Perceptron)

感知器是一种二元分类器,它是神经网络的基石。感知器是对神经细胞的模拟,如权量(突触)、偏置(阈值)及激活函数(细胞体)。

输入以向量的形式表示 x=(x_0, x_1, x_2),你可以把它们理解为不同的特征维度,其中的 x_0 是偏置单元(bias unit), 相当于线性回归中的常数项。在经过 “神经元”(激活函数)的计算后,感知器会输出一个大于 0 或小于 0 的数。箭头上的数字代表每个特征的权量(weights),相当于线性回归模型的参数,是收集信息的神经突触。

例如,上图列出了每个特征的权量,于是我们有这样的模型:

hθ(x)=-3+2*x_1+2*x_2

当 x_1 和 x_2 同时为 1 时,输出为 1,而不同时都将得到负数。这实际上就是逻辑与或称为与门。

我们的感知器将根据输出大于或小于 0 来对输入进行分类:

这是一个单层的感知器。通过修改权量,我们也可以建立或门(weights=[2,2], bias=-1)、非门(weights=[-2],bias=1,只有一个输入端)。但是,无论如何,你都无法通过一个单层的感知器来建立 “异或门”(XOR),即两个输入相同时输出 1,否则输出 0。这种情况下,我们就需要更复杂的神经网络了,即多层神经网络,也被称为前馈神经网络(feedforward neural network)。

前馈神经网络

前馈神经网络是多个感知器的组合,这些感知器以不同的方式产生连接,并由不同的激活函数控制激活。

图 6: 前馈神经网络示意图 

我们来认识下前馈神经网络:

  • 它包括输入层(input layer)、输出层(output layer)和一个或多个隐藏层(hidden layers)。上图的神经网络由 3 个单元的输入层,4 个单元的隐藏层和 2 个单元的输出层组成。单元等于感知器。

  • 输入层的单元是隐藏层单元的输入,隐藏层单元的输出是输出层单元的输入。

  • 两个感知器之间的连接有一个权量。

  • 第 t 层的每个感知器与第 t-1 层的每个感知器相互关联。当然,你也可以设置权量为 0,从而在实质上取消连接。

  • 在加工输入数据时,你将输入数据赋予输入层的每个单元,而隐藏层的每个单元是输入层每个单元的加权求和。也就是说,输入层的数据会被前向传播到隐藏层的每个单元。同理,隐藏层的输出作为输入会前向传播到输入层,计算得到最后的输出,即神经网络的输出。

  • 多个隐藏层的神经网络同理。

超越线性

在 “感知器” 中我们谈到,单层感知器虽然可以建立与门、或门、非门等,但无法建立更为复杂的异或门(XOR),即两个输入相同时输出 1,否则输出 0。

为了更为直观地理解这个问题,我们可以看下图:

图 7: 双输入感知器的决策空间

模型有两个输入(input1 和 input2),我们可以线性地区分或门的两类情况:即同时为 0 时在左下角,其它情况在右上角;与门的情况也可以线性地区分,即输出同时为 1 时在右上角,其它情况在左下角。但异或门呢?这种情况是无法作出线性区分的,也就是说,单层感知器无法实现异或门。

多层感知器吗?

先来分析输入和输出的情况。最左边两列列出了输入的 4 种情况。异或门的输出是最右边一列的情况,即两个输入相同时输出 1,否则为 0。我们在输入层和输出层之间加入两个单元的隐藏层,那么,它给输出层的输入应该是什么呢?答案如下图。你可以发现,对于隐藏层的 a_1 单元(上标 2 代表这是第 2 层)来说,它实际上是且门(都为 1 时才输出 1);对 a_2 单元来说,它的逻辑是 (not x_1) and (not x_2),即同时为 0 时才输出 1。而从隐藏层到输出层,是逻辑或。前馈神经网络可以实现异或门!

图 8: 异或门输入输出下推导隐藏层

于是我们建立如下的神经网络,但是其输出并非我们想要。为什么?

图 9: 线性激活函数下的前馈神经网络

这是因为上面感知器的激活函数是线性函数。这种情况下,神经网络的输出也只是输入的某种线性函数,只不过是通过网络的形式来进行加权。线性函数的线性组合仍然是线性函数。也就是说,即便是多层的感知器,激活函数为线性时也无法实现输入 00 和输入 11 时的输出比输入 01 和 10 时大,即非线性。

如果激活函数是线性函数,前馈神经网络将不会比单层感知器强大多少,不管它有多少层。

我们需要 logistic 函数的帮助。大部分神经网络会使用非线性激活函数,比如 logistic 函数(也被称为 Sigmoid 函数,这是就其形状而言的)。此外,由于训练神经网络要使用微积分,而要使用微积分,就得使用光滑函数(在反向传播时我们会详细讲解)。logistic 函数也满足这一要求。

在 logistic 函数的作用下,线性函数的输出值将被转化到 0 到 1 之间。从下图右上角的 logistc 曲线可以看到,输入值越大,输出越接近 1,输入为 4 时输出为 0.99;输入值越小,输出越接近 0,输入值为 - 4 时,输出为 0.01。

下图是单层感知器的激活函数为 logitic 函数时与门的示例。

图 10: 激活函数为 logitic 函数时的与门单层感知器

综上,我们可以通过前馈神经网络和 logistic 函数解决异或门的问题:

图 11: 非线性神经网络实现异或门

原创粉丝点击