SOM神经网络
自组织竞争神经网络SOM

本章主要介绍自组织竞争型神经网络的结构 学习算法;及相关理论
1
第四章自组织竞争型神经网络
§4 1 前言 §4 2 竞争学习的概念和原理 §4 3自组织特征映射神经网络 §4 4自组织特征映射神经网络的设计 §4 5 对偶传播神经网络 §4 6小结
2
§4 1 前言
在生物神经系统中;存在着一种侧抑制现象;即一 个神经细胞兴奋以后;会对周围其他神经细胞产生 抑制作用 这种抑制作用会使神经细胞之间出现竞 争;其结果是某些获胜;而另一些则失败 表现形式 是获胜神经细胞兴奋;失败神经细胞抑制
在网络结构上;它一般是由输入层和竞争层构成的 两层网络 两层之间各神经元实现双向连接;而且网 络没有隐含层 有时竞争层各神经元之间还存在横 向连接
4
在学习算法上;它模拟生物神经元之间的兴奋 协调 与抑制 竞争作用的信息处理的动力学原理来指导 网络的学习与工作;而不像大多数神经网络那样是 以网络的误差或能量函数作为算法的准则
X1
0.8 0.6
X2
00.1.9783468
X3
00..770077
X4
00..3943297
X5
0.6 0.8
解:为作图方便;将上述模式转换成极坐标形式 :
X113.68o9X2180oX314.4 5X4170oX515.31o3
竞争层设两个权向量;随机初始化为单位向量:
W1(0)1010o W2(0)01118o0
7
24 -130
8
34 -130
w2
9
34 -100
10
44 -100
11
40.5 -100
12
40.5 -90
滚动轴承振动诊断的SOM神经网络方法

Trn a t n nEn ryCo v rinv1 n J n ,0 3:4 - 51 a sci s eg n eso , 8,2,u e2 0 2 5 2 o o
4 Ma i L p r k Y, o a o KA. u a- e wo k a p o c a l d t c in a i g o Ne r l n t r p r a h t f u t ee to ndd a n — o ss ni d ti r c s e . EEE Tr n a t n n Co to y t msT c n l- i n usra p o e s s I i l a s ci so n r l se e h o o o S
g,9756 :2~ 4 Y 19 ,( )5 95 1
5 吴希军 、 胡春海. 基于核主元分析与神经网络的传感器故障诊断方法. 传感
技术学报,0 621 ) 2 0 ,(9
第1 期
吴 涛等 : 滚动轴承振 动诊 断 的 S OM神 经 网络 方 法
19 9
量纲参数指标依赖历史数据并且对载荷和转速的变化 比较敏感 ,
l。 m ne i 凡 Me 凡 。 dt h eo r e w £ d n . s “
过 ,图 所 。动 承 作 , 感 拾 的 动 号 程如 1示滚 轴 工 时由 器 取 振 信 成 传
1 故障轴承振动与信号的关 系
A - 来稿 日 :0 9 0 — 0 ★ 期 20—3 1 基金项 目: 陕西省 自然科学基金 (0 7 8 , 2 0 E 1)西安建筑科技大学科技基金资助(C 7 1 J0 1)
习 样本 。
由于原始 的采集数据值 比较大 ,而且不便 于后期的分析 , 故
som分类算法

som分类算法
SOM(Self-Organizing Map,自组织映射网络)是一种非监督学习的人工神经网络算法,主要用于数据可视化和特征分析。
它通过将高维输入空间中的样本数据映射到低维的二维或一维阵列(称为地图或网格)上,使得相似的数据点在映射后的空间中距离较近,从而保持了原始数据的拓扑结构。
SOM通过竞争学习和协作训练过程,使每个映射单元代表特定区域的数据模式,并能反映数据集的内在结构和分布情况。
该算法广泛应用于聚类分析、数据挖掘、图像压缩等领域。
SOM神经网络原理

1 . SOM是由输入层和竞争层组成的单层神经网络,输入层是一维的 神经元,有n个节点。竞争层是二维的神经元,按二维的形式排列成 节点矩阵,有M=m^2个节点。
视频名称:SOM神经网络理论及其matlab实现 会员:Hgsz2003
2013-10-29 10 我 版权申明:视频归原创作者跟Matlab中文论坛所有,可以在Matlab中文论坛下载或者观看,请勿转载! !
视频名称:SOM神经网络理论及其matlab实现 会员:Hgsz2003
SOM是由芬兰赫尔辛基大学神经网络专家Kohonen教授在1981年提 出的。这种网络模拟大脑神经系统自组织特征映射的功能,是一种竞 争型网络,并在学习中能无导师进行自组织学习。
2013-10-29 我 版权申明:视频归原创作者跟Matlab中文论坛所有,可以在Matlab中文论坛下载或者观看,请勿转载! !5
在网络结构上,自组织竞争网络一般是有输入和竞争层构成的单层网 络,网络没有隐藏层,输入和竞争层之间的神经元实现双向连接,同 时竞争层各神经元之间还存在横向连接。
视频名称:SOM神经网络理论及其matlab实现 会员:Hgsz2003
2013-10-29 我 版权申明:视频归原创作者跟Matlab中文论坛所有,可以在Matlab中文论坛下载或者观看,请勿转载! !4
Matlab&Simulink为美国mathworks公司注册商标!版权归mathworks公司所有!
SOM算法是一种无导师的聚类法,它能将任意维输入模式在输出层映 射成一维或者二维离散图形,并保持其拓扑结构不变,即在无导师的 情况下,通过对输入模式的自组织学习,在竞争层将分类结果表示出 来,此外,网络通过对输入模式的反复学习,可以使连接权值空间分 布密度与输入模式的概率分布趋于一致,即连接权向量空间分布能反 映输入模式的统计特征。
自组织特征映射神经网络.(SOM)

六、SOM网络应用于模式分类
%用训练好的自组织竞争网络对样本点分类 Y=sim(net,p); %分类数据转换输出 Yt=vec2ind(Y) pause %待分类数据 dataConvert=importdata('SelfOrganizationCompetitionSimulation.dat'); data=dataConvert'; %用训练好的自组织竞争网络分类样本数据 Y=sim(net,data); Ys=vec2ind(Y) 由于自组织特征映射神经网络采用的是无教师学习方式,没有期望输出,因此训 练过程中不用设置判断网络是否结束的误差项。只要设置网络训练次数就可以了, 并且在训练过程中也只显示训练次数。运行上述程序后,系统显示运行过程,并 给出聚类结果:
ijijijsommatlabmatlab中自组织神经网络的重要函数和基本功能函数名newsom创建一个自组织特征映射神经网络plotsom绘制自组织特征映射网络的权值矢量vec2ind将单值矢量组变换成下标矢量compet竞争传输函数midpoint中点权值初始化函数learnsom自组织特征映射权值学习规则函数sommatlabmatlab中自组织神经网络的重要函数和基本功能newsom功能
I’m Teuvo Kohonen
与自组织竞争网络不同的是,在自组织映射神经网络 中邻近的神经元能够识别输入空间中邻近的部分。
二.自组织特征映射神经网络结构
SOM神经网络结构
三、自组织特征映射学习算法原理
Kohonen自组织特征映射算法,能够自动找出输入数据之间的 类似度,将相似的输入在网络上就近配置。因此是一种可以构成对
d
j
(x
i 1
n
SOM神经网络极其matlab实现

SOM神经⽹络极其matlab实现⼀、算法流程拓扑关系确定后,开始计算过程,⼤体分成⼏个部分:1)初始化:每个节点随机初始化⾃⼰的参数。
每个节点的参数个数与Input的维度相同。
2)对于每⼀个输⼊数据,找到与它最相配的节点。
假设输⼊时D维的,即 X={x_i, i=1,...,D},那么判别函数可以为欧⼏⾥得距离:3) 找到激活节点I(x)之后,我们也希望更新和它临近的节点。
令S_ij表⽰节点i和j之间的距离,对于I(x)临近的节点,分配给它们⼀个更新权重:简单地说,临近的节点根据距离的远近,更新程度要打折扣。
4)接着就是更新节点的参数了。
按照梯度下降法更新:迭代,直到收敛。
⼆、实现⽅法1 . SOM是由输⼊层和竞争层组成的单层神经⽹络,输⼊层是⼀维的神经元,有n个节点。
竞争层是⼆维的神经元,按⼆维的形式排列成节点矩阵,有M=m^2个节点。
输⼊层的神经元和竞争层的神经元都有权值连接,竞争层节点相互间也可能有局部连接。
竞争层也叫输出层。
⽹络中有两种连接权值,⼀种是神经元对外部输⼊反应的连接权值,另外⼀种是神经元之间的特征权值,它的⼤⼩控制着神经元之间交互作⽤的强弱。
SOM算法是⼀种⽆导师的聚类法,它能将任意维输⼊模式在输出层映射成⼀维或者⼆维离散图形,并保持其拓扑结构不变,即在⽆导师的情况下,通过对输⼊模式的⾃组织学习,在竞争层将分类结果表⽰出来,此外,⽹络通过对输⼊模式的反复学习,可以使连接权值空间分布密度与输⼊模式的概率分布趋于⼀致,即连接权向量空间分布能反映输⼊模式的统计特征。
SOM依据拓扑⽅程排列神经元。
girdtop ( )⽹格拓扑结构hextop( )六⾓形拓扑结构randtop( )随机拓扑结构神经元之间的距离通过距离函数计算,如:dist( )boxdist( )linkdist( )mandist( )和⾃组织竞争⽹络⼀样,som⽹络可以⽤来识别获胜神经元i*。
不同的是,⾃组织竞争⽹络只修正获胜神经元,⽽SOM⽹络依据Kohonen学习规则,要同时修正获胜神经元附近区域Ni(d)内所有神经元。
数据挖掘之神经网络SOM算法

数据挖掘之神经⽹络SOM算法/*神经⽹络SOM算法思想:分为输⼊层和竞争层,输⼊层就是样本的输⼊,假如我现在有5个样本A,B,C,D,E,他们是5维向量,竞争层是10*10的⼆维平⾯,相当于100个神经元,这些神经元也是5维向量,这些神经元对输⼊向量进⾏竞争,最后只有⼀个*/#include<fstream.h>#include<iomanip.h>#include<stdio.h>#include<cstdlib.h>#include<math.h>using namespace std;#define InputLayerNum 35#define OutputLayerRow 8#define OutputLayerColumn 12#define total_iteration_Num 80#define error_limit 0.0001#define efficiency 0.9int i,j,k,l,m,n;int inputMode[26][7][5];double weight[OutputLayerRow*OutputLayerColumn][InputLayerNum];int current_iteration_num=0;double study_efficiency=efficiency;double distance[OutputLayerRow*OutputLayerColumn];int neighbor_width=OutputLayerColumn;int neighbor_height=OutputLayerRow;int row[OutputLayerRow],column[OutputLayerColumn];int flag[OutputLayerRow][OutputLayerColumn];int temp_row,temp_column;int winner_row,winner_column;double min_distance=1000.0;/****************************************************///该函数初始化距离变量为0,初始化保存⽣胜出节点的位置的变量/****************************************************/void init_distance(){for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++)distance[i*OutputLayerColumn+j]=0.0;}/****************************************************///该函数⽤于计算欧⽒距离,并找到获胜神经元/****************************************************/void eula_distance(){int ttLow,ttUp,ppLow,ppUp;ttLow=winner_column-neighbor_width/2;ttUp=winner_column+neighbor_width/2;ppLow=winner_row-neighbor_height/2;ppUp=winner_row+neighbor_height/2;if(ttLow<0) ttLow=0;if(ttUp>=OutputLayerColumn) ttUp=OutputLayerColumn-1;if(ppLow<0) ppLow=0;if(ppUp>=OutputLayerRow) ppUp=OutputLayerRow-1;for(i=ppLow;i<=ppUp;i++)for(j=ttLow;j<=ttUp;j++){if(!(flag[i][i]==100)){for(m=0;m<7;m++)for(n=0;n<5;n++)distance[i*OutputLayerColumn+j]+=pow((inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n]),2);if(distance[i*OutputLayerColumn+j]<min_distance){min_distance=distance[i*OutputLayerColumn+j];temp_row=i;temp_column=j;}}}if(current_iteration_num>0){if(min_distance<=error_limit){row[temp_row]=temp_row;row[temp_column]=temp_column;flag[temp_row][temp_column]=100;}}}/****************************************************///调整权值/****************************************************/void weight_change(){int ttLow,ttUp,ppLow,ppUp;winner_row=temp_row;winner_column=temp_column;ttLow=winner_column-neighbor_width/2;ttUp=winner_column+neighbor_width/2;ppLow=winner_row-neighbor_height/2;ppUp=winner_row+neighbor_height/2;if(ttLow<0) ttLow=0;if(ttUp>=OutputLayerColumn) ttUp=OutputLayerColumn-1;if(ppLow<0) ppLow=0;if(ppUp>=OutputLayerRow) ppUp=OutputLayerRow-1;for(i=ppLow;i<=ppUp;i++)for(j=ttLow;j<=ttUp;j++){if(!(flag[i][j]==100)){for(m=0;m<7;m++)for(n=0;n<5;n++)weight[i*OutputLayerColumn+j][m*5+n]+=study_efficiency*(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n]);}}}/****************************************************///调整学习效率以及获胜节点的邻域⼤⼩/****************************************************/void paraChange(){study_efficiency=study_efficiency*(1.0-((double)current_iteration_num)/total_iteration_Num);neighbor_width=(int)(neighbor_width*(1.0-((double)current_iteration_num)/total_iteration_Num));neighbor_height=(int)(neighbor_height*(1.0-((double)current_iteration_num)/total_iteration_Num));}/****************************************************///该函数⽤于将所有输⼊模式从⽂件中读⼊,并存放在数组inputMode中//同时进⾏权值的初始化,采⽤随机赋值的⽅法/****************************************************/void initialize(){for(i=0;i<OutputLayerRow;i++) row[i]=100;for(j=0;j<OutputLayerColumn;j++) column[j]=100;for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++) flag[i][j]=0;FILE *pf=fopen("输⼊数据.txt","a+");if(pf==NULL){cout<<"Can not input file!\n";exit(0);}for(i=0;i<26;i++)for(j=0;j<7;j++)for(k=0;k<5;k++) fscanf(pf,"%d",&inputMode[i][j][k]);//⽤于测试是否能够正确读⼊输⼊模式char character[26];for(i=0;i<26;i++) character[i]=(65+i);ofstream mode("输出数据.txt",ios::out);for(i=0;i<26;i++){mode<<character[i]<<'\n'<<endl;for(j=0;j<7;j++){for(k=0;k<5;k++) mode<<inputMode[i][j][k]<<"";mode<<"\n";}mode<<"\n\n\n";}//权值随机初始化,采⽤随机赋值的⽅法for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++)for(k=0;k<InputLayerNum;k++)weight[i*OutputLayerColumn+j][k]=(double)(rand()%101)/100.0;//⽤于测试是否能够正确初始化权值ofstream quan("初始权值.txt",ios::out);for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){quan<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n";for(k=0;k<InputLayerNum;k++){if(k%5==0) quan<<"\n";quan<<setprecision(6)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<"";}quan<<"\n\n\n";}}int main(){int iteration_numbers[26];int total_num=0;char character[26];void test_netWork_1();void test_netWork_2();for(l=0;l<26;l++){iteration_numbers[l]=0;character[l]=(65+l);}initialize();for(l=0;l<26;l++){winner_row=OutputLayerRow/2;winner_column=OutputLayerColumn/2;while(current_iteration_num<total_iteration_Num){//迭代次数控制init_distance();eula_distance();weight_change();if(min_distance<=error_limit) break;++current_iteration_num;paraChange();}iteration_numbers[l]=current_iteration_num+1;neighbor_width=OutputLayerColumn; //修改邻域的宽度neighbor_height=OutputLayerRow; //修改邻域的⾼度study_efficiency=efficiency; //学习率重置current_iteration_num=0; //重置迭代次数min_distance=1000.0; //重置最⼩距离}/***********************************///输出部分/***********************************/for(l=0;l<26;l++) total_num+=iteration_numbers[l];ofstream iteration_num("迭代次数.txt",ios::out);for(l=0;l<26;l++){iteration_num<<character[l]<<"迭代"<<iteration_numbers[l]<<"次!\n"<<endl;if(l==25) iteration_num<<"整个训练过程共迭代"<<total_num<<"次!\n"<<endl;}ofstream all_weight("训练后所有权值.txt",ios::out);ofstream winner_weight("训练后胜出权值.txt",ios::out);for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){printf("\n\n\n");all_weight<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n";for(k=0;k<InputLayerNum;k++){if(k%5==0){printf("\n");all_weight<<"\n";}if(weight[i*OutputLayerColumn+j][k]>0.9999999) weight[i*OutputLayerColumn+j][k]=1.0;if(weight[i*OutputLayerColumn+j][k]<0.0000001) weight[i*OutputLayerColumn+j][k]=0.0;printf("%f ",weight[i*OutputLayerColumn+j][k]);all_weight<<setprecision(8)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<"";}}ofstream winner_node("获胜节点.txt",ios::out);for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){if(flag[i][j]==100){ //获胜节点printf("\n\n\n");winner_weight<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n";for(k=0;k<InputLayerNum;k++){if(k%5==0){printf("\n");winner_weight<<"\n";}if(weight[i*OutputLayerColumn+j][k]>0.9999999) weight[i*OutputLayerColumn+j][k]=1.0;if(weight[i*OutputLayerColumn+j][k]<0.0000001) weight[i*OutputLayerColumn+j][k]=0.0;printf("%f ",weight[i*OutputLayerColumn+j][k]);winner_weight<<setprecision(8)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<""; }winner_node<<"Node["<<i+1<<"]["<<j+1<<"]"<<endl;}}printf("\n");test_netWork_1();test_netWork_2();return0;}void test_netWork_1(){ofstream test1("标准测试.txt",ios::out);char character[26];for(i=0;i<26;i++) character[i]=(65+i);for(l=0;l<26;l++){for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0;min_distance=1000;for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){for(m=0;m<7;m++)for(n=0;n<5;n++)distance[i*OutputLayerColumn+j]+=pow(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n],2);if(distance[i*OutputLayerColumn+j]<min_distance){min_distance=distance[i*OutputLayerColumn+j];temp_row=i;temp_column=j;}}test1<<character[l]<<"'s winner is Node["<<temp_row+1<<"]["<<temp_column+1<<"]"<<endl<<endl;}}/****************************************************///利⽤⾮标准数据测试训练后的⽹络/****************************************************/void test_netWork_2(){ofstream test2("⾮标准测试.txt",ios::out);char character[26];FILe *pf=fopen("⾮标准数据测试.txt","a+");if(pf==NULL){cout<<"Can not open input file!\n";exit(0);}for(i=0;i<26;i++)for(j=0;j<7;j++)for(k=0;k<5;k++) fscanf(pf,"%d",&inputMode[i][j][k]);for(i=0;i<26;i++) character[i]=(65+i);for(l=0;l<26;l++){for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0;min_distance=1000;for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){for(m=0;m<7;m++)for(n=0;n<5;n++)distance[i*OutputLayerColumn+j]+=pow(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n],2);if(distance[i*OutputLayerColumn+j]<min_distance){min_distance=distance[i*OutputLayerColumn+j];temp_row=i;temp_column=j;}}test2<<character[l]<<"'s winner is Node["<<temp_row+1<<"]["<<temp_column+1<<"]"<<endl<<endl;}}。
[医学]自组织神经网络(SOM)方法及其应用
![[医学]自组织神经网络(SOM)方法及其应用](https://img.taocdn.com/s3/m/94ede3855022aaea998f0fb3.png)
4.1竞争学习的概念与原理
4.1.1 基本概念
分类——分类是在类别知识等导师信号的指 导下,将待识别的输入模式分配到各自的 模式类中去。
聚类——无导师指导的分类称为聚类,聚类 的目的是将相似的模式样本划归一类,而
将不相似的分离开。
4.1.1 基本概念
• 相似性测量_欧式距离法
X X i (X X i)T(X X i)
w1
训练 次数
W1
W2
1 18.43 -180
2 -30.8 -180
3 7 -180
4 -32 -180
5 11 -180
6 24 -180
7 24 -130
8 34 -130
9 34 -100
10 44 -100
11 40.5 -100
12 40.5 -90
3 7 -180
4 -32 -180
5 11 -180
6 24 -180
7 24 -130
8 34 -130
9 34 -100
10 44 -100
11 40.5 -100
12 40.5 -90
13 43 -90
14 43 -81
15 47.5 -81
6 24 -180
7 24 -130
8 34 -130
9 34 -100
10 44 -100
类1
类2
类1
类2
T
T
(a)基于欧式距离的相似性测量 (b)基于余弦法的相似性测量
4.1.1 基本概念
• 相似性测量_余弦法
cos
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SOM神经网络第4章 SOM自组织特征映射神经网络生物学研究表明,在人脑的感觉通道上,神经元的组织原理是有序排列的。
当外界的特定时空信息输入时,大脑皮层的特定区域兴奋,而且类似的外界信息在对应的区域是连续映像的。
生物视网膜中有许多特定的细胞对特定的图形比较敏感,当视网膜中有若干个接收单元同时受特定模式刺激时,就使大脑皮层中的特定神经元开始兴奋,输入模式接近,与之对应的兴奋神经元也接近;在听觉通道上,神经元在结构排列上与频率的关系十分密切,对于某个频率,特定的神经元具有最大的响应,位置相邻的神经元具有相近的频率特征,而远离的神经元具有的频率特征差别也较大。
大脑皮层中神经元的这种响应特点不是先天安排好的,而是通过后天的学习自组织形成的。
据此芬兰Helsinki大学的Kohonen T.教授提出了一种自组织特征映射网络(Self-organizing feature Map,SOM),又称Kohonen网络[1-5]。
Kohonen认为,一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式有不同的响应特征,而这个过程是自动完成的。
SOM网络正是根据这一看法提出的,其特点与人脑的自组织特性相类似。
4.1 竞争学习算法基础[6]4.1.1 自组织神经网络结构1.定义自组织神经网络是无导师学习网络。
它通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构。
2.结构层次型结构,具有竞争层。
典型结构:输入层+竞争层。
如图4-1所示。
…竞争层…图4-1 自组织神经网络结构·输入层:接受外界信息,将输入模式向竞争层传递,起“观察”作用。
竞争层:负责对输入模式进行“分析比较”,寻找规律,并归类。
4.1.2 自组织神经网络的原理1.分类与输入模式的相似性分类是在类别知识等导师信号的指导下,将待识别的输入模式分配到各自的模式类中,无导师指导的分类称为聚类,聚类的目的是将相似的模式样本划归一类,而将不相似的分离开来,实现模式样本的类内相似性和类间分离性。
由于无导师学习的训练样本中不含期望输出,因此对于某一输入模式样本应属于哪一类并没有任何先验知识。
对于一组输入模式,只能根据它们之间的相似程度来分为若干类,因此,相似性是输入模式的聚类依据。
2.相似性测量神经网络的输入模式向量的相似性测量可用向量之间的距离来衡量。
常用的方法有欧氏距离法和余弦法两种。
(1)欧式距离法设iX X ,为两向量,其间的欧式距离Ti i i X X X X X X d ))((--=-=(4-1)d越小,X 与iX 越接近,两者越相似,当0=d 时,iX X =;以T d =(常数)为判据,可对输入向量模式进行聚类分析:由于312312,,d d d 均小于T ,465645,,d d d 均小于T ,而)6,5,4(1=>i T d i, )6,5,4(2=>i T d i , )6,5,4(3=>i T d i ,故将输入模式654321,,,,,X X X X X X 分为类1和类2两大类,如图4-2所示。
(2)余弦法设iX X ,为两向量,其间的夹角余弦iTX X XX =ϕcos(4-2)ϕ越小,X 与i X 越接近,两者越相似;当ϕ=0时,ϕcos =1,iX X =;同样以0ϕϕ=为判据可进行聚类分析。
X 1X 2X 6类1类2X 3X 5X 4图4-2 基于欧式距离法的模式分类3.竞争学习原理竞争学习规则的生理学基础是神经细胞的侧抑制现象:当一个神经细胞兴奋后,会对其周围的神经细胞产生抑制作用。
最强的抑制作用是竞争获胜的“唯我独兴”,这种做法称为“胜者为王”(Winner-Take-All ,WTA )。
竞争学习规则就是从神经细胞的侧抑制现象获得的。
它的学习步骤为:(1)向量归一化对自组织网络中的当前输入模式向量X 、竞争层中各神经元对应的内星权向量jw (m j ,,2,1Λ=),全部进行归一化处理,如图4-3所示,得到X ˆ和jW ˆ:XX X=ˆ,jj j W W W=ˆ(4-3)jW 1jW ijX 1X iX W njkjy ……图4-3 向量归一化(2)寻找获胜神经元将X ˆ与竞争层所有神经元对应的内星权向量),,2,1(ˆm j WjΛ=进行相似性比较。
最相似的神经元获胜,权向量为*ˆj W: {}jn j j WX W X ˆˆmin},,2,1{*-=-∈Λ)) T j j T j T T j j j W W X W X X W X W X W X ******ˆˆˆˆ2ˆˆ)ˆ)(ˆ(ˆˆ+-=--=-⇒)ˆˆ1(2*T jX W -=)ˆˆ(max ˆˆ*T j jT jX W X W =⇒(4-4)(3)网络输出与权调整按WTA 学习法则,获胜神经元输出为“1”,其余为0。
即:⎪⎩⎪⎨⎧≠==+**01)1(j j j j t y j(4-5)只有获胜神经元才有权调整其权向量*j W 。
其权向量学习调整如下:⎪⎩⎪⎨⎧≠=+-+=∆+=+*)(ˆ)1()ˆˆ()(ˆ)(ˆ)1(*****j j t W t W W X t W W t W t W j j j j j j j α(4-6)10≤<α为学习率,α一般随着学习的进展而减小,即调整的程度越来越小,趋于聚类中心。
(4)重新归一化处理归一化后的权向量经过调整后,得到的新向量不再是单位向量,因此要对学习调整后的向量重新进行归一化,循环运算,直到学习率α衰减到0。
为了更好地说明竞争学习算法的聚类分析效果,下面以一具体实例进行计算[6]。
【例4-1】用竞争学习算法将下列各模式分为两类)6.0,8.0(1=X ,)9848.0,1736.0(2-=X , )707.0,707.0(3=X , )9397.0,342.0(4-=X ,)8.0,6.0(5=X ,学习率α=0.5。
【解】 将上述输入模式转换为极坐标形式:ο89.3611∠=X ,ο8012-∠=X ,ο4513∠=X ,ο7014-∠=X ,ο13.5315∠=X 。
如图4-4所示。
1X 2X 3X 4X 5X 1W 2W图4-4 模式向量图要求将各模式分为两类,则竞争层为两个神经元,设两个权向量,随机初始化为单元向量:ο01)0,1()0(1∠==W ,ο1801)0,1()0(2-∠=-=W ,其竞争学习过程如下:(1)1X=1d ο89.361)0(11∠=-W X ,=2dο89.2161)0(21∠=-W X21d d <,神经元1获胜,1W 调整。
ο43.18189.365.00))0(()0()1(1111∠=⨯+=-+=W X W W αο1801)0()1(22-∠==W W (2)2X=1d ο43.981)1(12∠=-W X ,=2dο1001)1(22∠=-W X21d d <,神经元1获胜,1W 调整。
ο8.301)43.1880(5.043.18))1(()1()2(1211-∠=--⨯+=-+=W X W W αο1801)1()2(22-∠==W W (3)3X=1d ο8.751)2(13∠=-W X ,=2dο2251)2(23∠=-W X 21d d <,神经元1获胜,1W 调整。
ο71)8.3045(5.08.30))2(()2()3(1311∠=+⨯+-=-+=W X W W αο1801)2()3(22-∠==W W (4)4X=1d ο771)3(14∠=-W X ,=2dο1101)3(24∠=-W X 21d d <,神经元1获胜,1W 调整。
ο5.311)770(5.07))3(()3()4(1411-∠=--⨯+=-+=W X W W αο1801)3()4(22-∠==W W (5)5X=1d ο63.841)4(15∠=-W X ,=2dο87.1261)4(25∠=-W X 21d d <,神经元1获胜,1W 调整。
ο111)5.3113.53(5.05.31))4(()4()5(1511∠≈+⨯+-=-+=W X W W αο1801)4()5(22-∠==W W (6)1X=1d ο89.251)5(11∠=-W X ,=2dο89.2161)5(21∠=-W X21d d <,神经元1获胜,1W 调整。
ο24189.255.011))5(()5()6(1111∠≈⨯+=-+=W X W W αο1801)5()6(22-∠==W W(7)2X=1d ο1041)6(12∠=-W X ,=2dο1001)6(22∠=-W X12d d <,神经元2获胜,2W 调整。
ο1301)18080(5.0180))6(()6()7(2222-∠=+-⨯+-=-+=W X W W αο241)6()7(11∠==W W (8)3X=1d ο211)7(13∠=-W X ,=2dο1751)7(23∠=-W X21d d <,神经元1获胜,1W 调整。
ο341)2445(5.024))7(()7()8(1311∠≈-⨯+=-+=W X W W αο1301)7()8(22-∠==W W (9)4X=1d ο1041)8(14∠=-W X ,=2dο601)8(24∠=-W X12d d <,神经元2获胜,2W 调整。
ο1001)13070(5.0130))8(()8()9(2422-∠=+-⨯+-=-+=W X W W αο341)8()9(11∠==W W (10)5X=1d ο13.191)9(15∠=-W X ,=2dο13.1531)9(25∠=-W X21d d <,神经元1获胜,1W 调整。
ο441)3413.53(5.034))9(()9()10(1511∠≈-⨯+=-+=W X W W αο1001)9()10(22-∠==W W一直循环运算下去,其前20次学习结果如表4-1所示。
表4-1 竞争学习结果学习次数 W 1 W 2 学习次数W 1 W 21 18.43° -180° 11 40.5° -100°2 -30.8° -180° 12 40.5° -90°3 7°-180° 1343° -90° 4 -32° -180° 1443° -81°5 11° -180° 15 47.5° -81°(续表)学习次数 W 1 W 2 学习次数W 1W 26 24° -180° 16 42°-81°7 24° -130° 1742° -80.5°8 34° -130° 18 43.5° -80.5° 9 34° -100° 19 43.5° -75° 1044° -100° 20 48.5° -75°从表4-1可见,在运算学习20次后,网络权值1W ,2W 趋于稳定:οο75,4521-→→W W 。