上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.9 线性神经网络处理异或问题
首先我们先来回顾一下异或运算:
(1)0与0异或等于0;
(2)0与1异或等于1;
(3)1与0异或等于1;
(4)1与1异或等于0。
线性神经网络处理异或问题的代码如代码3-5所示。
代码3-5:线性神经网络处理异或问题
运行结果如下:
从运行结果我们能够看出用一条直线并不能把异或问题中的两个类别给划分开来,因为这是一个非线性的问题,所以可以使用非线性的方式来进行求解。其中一种方式就是我们可以给神经网络加入非线性的输入。代码3-5中的输入信号只有3个信号,即x0,x1,x2,我们可以利用这3个信号得到带有非线性特征的输入,即x0,x1,x2,x1×x1,x1×x2,x2×x2,其中x1×x1,x1×x2,x2×x2为非线性特征。引入非线性输入的线性神经网络如图3.10所示。
图3.10 引入非线性输入的线性神经网络
线性神经网络引入非线性特征解决异或问题的代码如代码3-6所示。
代码3-6:线性神经网络引入非线性特征解决异或问题
运行结果如下:
从输出的预测值中我们可以看出,预测值与真实标签的数值是非常接近的,几乎相等,说明预测值很符合我们想要的结果。而从输出图片中也能观察到两条曲线的内部是负样本所属的类别,两条曲线的外部是正样本所属的类别。这两条曲线很好地把两个类别区分开了。
线性神经网络可以通过引入非线性的输入特征来解决非线性问题,但这并不是一种非常好的解决方案。
下一章我们将介绍一种新的神经网络,即BP神经网络。通过学习BP神经网络,我们可以获得更好的解决问题的思路。