【例2.3】用单层感知器实现多个神经元的分类。
若将例2.2的输入矢量和目标矢量增加为10组的二元矩阵,即输入矢量为: P=[0.1 0.7 0.8 0.8 1.0 0.3 0.0 -0.3 -0.5 -1.5; 1.2 1.8 1.6 0.6 0.8 0.5 0.2 0.8 -1.5 -1.3]; 所对应的10组二元目标矢量为: T=[1 1 1 0 0 1 1 1 0 0; 0 0 0 0 0 1 1 1 1 1];
解:由于增加了矢量数组,必然增加了解决问题的复杂程度。这个问题要是用一般的方法来解决是相当困难和费时的,它需要解一个具有6个变量的20个约束不等式。而通过单层感知器来解决此问题就显示出它的优越性。和例2.2程序相同,只要输入新的P和T,重新训练感知器,即可得出训练的结果。
根据输入矢量和目标矢量可得:网络的源节点数为2,输出层节点数也为2,由此可以画出本例中所要设计的单层感知器的网络结构如图2.18所示。
x1w11w21w12w22b1b2
x2图2.18 例2.3中单层感知器的网络结构
图2.19给出了所设计的单层感知器的划分结果。其中虚线表示初始划分线,实线表示最终划分线。
39
图2.19 单层感知器的划分结果
【例2.4】线性不可分输入矢量。
由于单层感知器对输入矢量空间只能线性的进行输出0或1的分类,它们只能划分具有线性可分的输入矢量组。如果在输入矢量组和它所对应的0,1目标之间不能用直线进行划分,那么单层感知器就不能正确的分类出输入矢量。
在例2.2中,加入一个新的输入矢量,使之成为: 输入矢量为:P=[-0.5 -0.5 0.3 0 -0.8;
-0.5 0.5 -0.5 1 0];
目标矢量为:T=[1 1 0 0 0]。
可以重复使用前面的仿真程序,但是网络并没有解决问题。如图2.20所示,根据输入矢量和目标矢量关系,将它们绘制于坐标平面中。显然,一条直线无法将它们分开。在感知器的应用中,这类线性不可分问题都可归结为“异或”问题。可用多层网络结构解决。
40
图2.20 输入矢量位置图
【例2.5】设计自适应线性元件,实现从输入矢量到输出矢量的变换关系,其输入矢量和输出矢量分别为:
P=[1.0 -1.2];T=[0.5 1.0]。 解:用自适应线性元件求解问题时,首先要确定期望误差值,以及最大循环次数。对该例题可选err_goal=0.001;max_epoch=20。
如图2.21所示是在Matlab中设计的自适应线性元件进行仿真求解时,网络的学习曲线。 用线性层仿真函数simulin( )来检测训练好的网络: >> A=simulin(P,W,B) A =
0.4775 0.9901
由结果可以看出,对于特别简单的问题,采用自适应线性元件的训练不一定能够得到足够精确的解。因为当训练误差达到期望误差值后,训练即被终止。对于具有零误差的自适应线性元件,即输入/输出矢量对存在着严格的线性关系,网络的设计也可以通过采用神经网络工具箱中相对应的函数来完成。
41
图2.21 网络的学习曲线
【例2.6】用自适应线性元件解决一个较大的多神经元网络的模式联想的设计问题。输入矢量和目标矢量分别为:
P=[1 1.5 1.2 -0.3; -1 2 3 -0.5; 2 1 -1.6 0.9]; T=[0.5 3 -2.2 1.4; 1.1 -1.2 1.7 -0.4; 3 0.2 -1.8 -0.4;
-1 0.1 -1.0 0.6 ] 解:由输入矢量和目标矢量可得:网络的源节点数为3,输出层节点数为4。
若用解方程组方法来求解该例,将要解16个方程,需要花费大量的时间,甚至不太容易。对于一些实际问题,常常并不需要求出其完美的零误差的解,允许一定的误差存在。这时采用自适应线性元件求解就显示出它的优越性。可以通过选定期望误差和加长训练次数来获得趋于完美的解。
如图2.22所示是在Matlab中设计的自适应线性元件进行仿真求解时,网络的学习曲线。
42
图2.22 网络的学习曲线
可用simulin( )函数来检测训练好的网络: >> A=simulin(P,W,B) A =
0.5149 2.9869 -2.1903 1.3908 1.0892 -1.1906 1.6930 -0.3933 2.9949 0.2044 -1.8033 -0.3968 -0.9960 0.0965 -0.9974 0.5975
【例2.7】研究学习速率因子η取值不同对LMS学习算法的影响。
在例2.5和例2.6的自适应线性元件的仿真过程中,对学习速率因子η的取值,我们是通过神经网络工具箱函数maxlinlr(P),对输入P来求合适的学习速率因子值的。根据2.4节的讨论可知,学习速率因子η的取值对LMS算法的影响较大。下面我们针对例2.6,研究学习速率因子η取不同值时,LMS算法的收敛情况(也即网络的收敛情况)。网络的期望误差定为err_goal=0.001,最大训练步数为max_epoch=400,保持不变。
图2.22是η=0.9*maxlinlr(P)时,网络的学习曲线。显然,网络在290步左右收敛。 图2.23是η=0.1*maxlinlr(P)时,网络的学习曲线。显然,网络训练400步后仍未收敛。但是,通过增加训练步数,网络在2600步左右收敛,如图2.24所示,收敛很慢。
43