多层感知机模型
之前说单层的感知机模型不能处理线性不可分问题,多层感知机却可以成功胜任。下面再从异或入手解决问题。
如上图两层的感知机就能完成对XOR问题的正确划分。第一层的上侧是函数:2*p1+2*p2-1,下侧是函数-2*p1-2*p2+3,第二层是函数And就是与操作。可以得出它们对问题的划分如下:
即多层感知机把不能一次线性区分的问题分几次来解决,先解决分开解决各个部分再统一解决各个部分。有了这样的思路之后,关于神经网络的研究又开始如火如荼了。
BP神经网络
sigmoid函数
BP(Back Propagation)神经网络也是用的多层感知机模型,训练方法是误差逆传播,就是从输出层计算误差,反向向前传播,逐层修改连接权重的权值。
神经网络用的函数f是sigmoid函数(之前有说过)。
BP算法
一个普通的三层BP网络如下所示
我们定义误差函数
其中 E d 是训练样本中第 d 个观测的误差,通过对输出层所有单元的求和得到:
下面我们就要求梯度了(要分层求解,输出层,隐藏层),梯度向量中的各元素求解如下:
1 )当单元 j 是一个输出单元时:
于是得到:
2 )当单元 j 是一个隐藏层单元时,有如下推导:
实现
可以看到迭代到第932291代收敛了,可以区分异或问题了。第一次写net,写得不是很好,可以再改进改进