(无导师学习神经网络)竞争神经网络、SOFM神经网络

神经网络分类

  • 有导师神经网络:

    对于有导师学习神经网络,例如BP神经网络、RBF神经网络,事先需要知道与输入相对应的期望输出,根据期望输出与网络输出间的偏差来调整网络的权值与阈值。

  • 无导师学习神经网络

    与有导师学习神经网络不同,无导师学习神经网络在学习过程中无需知道期望的输出。其与真实人脑中的神经网络类似,可以通过不断地观察、分析与比较,自动揭露样本中的内在规律和本质,从而可以对具有近似特征(属性)的样本进行准确地分类和识别。竞争神经网络和自组织特征映射(SOFM)神经网络属于无导师学习神经网络。

竞争神经网络

  • 竞争神经网络结构

    竞争神经网络一般由输入层和竞争层组成;

    与RBF等神经网络类似,输入层仅实现输入模式的传递,并不参与实际的运算;

    竞争层的各个神经元以相互竞争的形式来赢得对输入模式的响应,最终只有一个神经元赢得胜利,并使与该获胜神经元相关的各连接权值和阈值向着更有利于其竞争的方向发展,而其他神经元对应的权值和阈值保持不变;

    竞争神经网络结构如下图所示:
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第1张图片

  • 权值、阈值更新

    获胜神经元 k k k对应的权值和阈值分别按以下公式修正,
    I W k 1 , 1 = I W k 1 , 1 + α ( p − I W k 1 , 1 ) IW_k^{1,1}=IW_k^{1,1}+\alpha(p-IW_k^{1,1}) IWk1,1=IWk1,1+α(pIWk1,1)
    b 1 = exp ⁡ ( 1 − l o g [ ( 1 − β ) e 1 − l o g ( b 1 ) + β ∗ a 1 ] ) b^1=\exp({1-log[(1-\beta)e^1-log(b^1)+\beta *a^1]}) b1=exp(1log[(1β)e1log(b1)+βa1])
    其余神经元的权值和阈值保持不变。
    其中 α \alpha α表示权值的学习速率, β \beta β表示阈值的学习速率;
    I W k 1 , 1 IW_k^{1,1} IWk1,1 1 , 1 ^{1,1} 1,1的第 k k k行,即表示与获胜神经元 k k k对应的权值;
    a 1 a^1 a1为竞争层神经元的输出,即 a 1 = [ a 1 1 , a 2 1 , . . . , a S 1 1 ] ,    a i 1 = { 0 ,    i ≠ k 1 ,    i = k ,    i = 1 , 2 , . . . , S 1 a^1=[a_1^1,a_2^1,...,a_{S^1}^1],\ \ a_i^1=\{^{1,\ \ i=k}_{0,\ \ i\not=k}, \ \ i=1, 2,...,S^1 a1=[a11,a21,...,aS11],  ai1={0,  i=k1,  i=k,  i=1,2,...,S1

  • competlayer函数
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第2张图片
    参数numClasses为竞争层神经元个数
    kohonenLR为权值的学习速率(默认为0.01)
    conscienceLR为阈值的学习速率(默认为0.001)

SOFM神经网络

  • SOFM神经网络

    自组织特征映射(self-organizing feature mapping, SOFM)神经网络根据神经元有序的排列可以反映出所感觉到的外界刺激的某些物理特性而提出的。

    其主要思想是在学习过程中逐步缩小神经元之间的作用邻域,并依据相关的学习规则增强中心神经元的激活程度,从而去掉各神经元之间的侧向连接,以达到模拟真实大脑神经系统“近兴奋远抑制”的效果。

  • SOFM神经网络结构

    SOFM神经网络的结构与竞争神经网络的结构类似,是一个由输入层和自组织特征映射层(竞争层)组成的两层网络。
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第3张图片
    在竞争神经网络中,每次仅有一个神经元获胜,即只有一个神经元的权值和阈值得到修正。在SOFM神经网络中,不仅与获胜神经元对应的权值和阈值得到调整,其邻近范围内的其他神经元也有机会进行权值和阈值调整,这在很大程度上改善了网络德 学习能力和泛化能力。

  • 权值更新

    根据公式: { I W j 1 , 1 = I W j 1 , 1 ,    j ∉ N c ( t ) I W j 1 , 1 = I W j 1 , 1 + η ( t ) ( p − I W j 1 , 1 ) ,    j ∈ N c ( t ) , \{^{IW_j^{1,1}=IW_j^{1,1}+\eta(t)(p-IW_j^{1,1}), \ \ j\in N_c(t)}_{IW_j^{1,1}=IW_j^{1,1},\ \ j\notin N_c(t)}, {IWj1,1=IWj1,1,  j/Nc(t)IWj1,1=IWj1,1+η(t)(pIWj1,1),  jNc(t),对获胜神经元惊醒权值更新。

  • 学习速率及邻域更新

    η = η ( 1 − N T ) \eta=\eta(1-\frac{N}{T} ) η=η(1TN)
    N c = 「 N c ( 1 − N T ) ] N_c=「N_c(1-\frac{N}{T})] Nc=Nc(1TN)], 「   ] 「 \ ]  ]表示向上取整

  • selforgmap函数
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第4张图片
    参数dimensions为网络的拓扑结构(默认[8 8]);
    coverSteps为邻近距离递减到1的步数(默认100);
    initNeighbor为初始的邻近距离(默认3);
    topologyFcn为网络的拓扑函数(默认’hextop’);
    distanceFcn为网络的距离函数(默认’linkdist’);

  • SOMF模型解释

    左图,是4*4的拓扑结构;右图,16个神经元之间的连接关系:
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第5张图片(无导师学习神经网络)竞争神经网络、SOFM神经网络_第6张图片
    神经元编号从下往上,从左往右
    [ 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 ] \begin{bmatrix}13&14&15&16\\9&10&11&12\\5&6&7&8\\1&2&3&4\end{bmatrix} 13951141062151173161284
    相邻神经元的距离关系,颜色越深距离越远
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第7张图片
    神经元与对应的样本的关系,如某个神经元空白即是“死神经元”
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第8张图片
    每个输入样本与对应的神经元的距离关系
    (无导师学习神经网络)竞争神经网络、SOFM神经网络_第9张图片

代码

水源样本数据下载
链接: https://pan.baidu.com/s/1wpRpILAPT-XLQWidHpJd6Q 提取码: xc2g

%% I. 清空环境变量
clear all
clc

%% II. 训练集/测试集产生
%%
% 1. 导入数据
load water_data.mat

%%
% 2. 数据归一化
attributes = mapminmax(attributes);

%%
% 3. 训练集和测试集划分

% 训练集——35个样本
P_train = attributes(:,1:35);
T_train = classes(:,1:35);
% 测试集——4个样本
P_test = attributes(:,36:end);
T_test = classes(:,36:end);

%% III. 竞争神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newc(minmax(P_train),4,0.01,0.01); % 参数有竞争神经元个数、权值学习率、阈值学习率

%%
% 2. 设置训练参数
net.trainParam.epochs = 500;

%%
% 3. 训练网络
net = train(net,P_train);

%%
% 4. 仿真测试

% 训练集
t_sim_compet_1 = sim(net,P_train);
T_sim_compet_1 = vec2ind(t_sim_compet_1);
% 测试集
t_sim_compet_2 = sim(net,P_test);
T_sim_compet_2 = vec2ind(t_sim_compet_2);

%% IV. SOFM神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newsom(P_train,[4 4]);

%%
% 2. 设置训练参数
net.trainParam.epochs = 200;

%%
% 3. 训练网络
net = train(net,P_train);

%%
% 4. 仿真测试

% 训练集
t_sim_sofm_1 = sim(net,P_train);
T_sim_sofm_1 = vec2ind(t_sim_sofm_1);
% 测试集
t_sim_sofm_2 = sim(net,P_test);
T_sim_sofm_2 = vec2ind(t_sim_sofm_2);

%% V. 结果对比
%%
% 1. 竞争神经网络
result_compet_1 = [T_train' T_sim_compet_1']
result_compet_2 = [T_test' T_sim_compet_2']

%%
% 2. SOFM神经网络
result_sofm_1 = [T_train' T_sim_sofm_1']
result_sofm_2 = [T_test' T_sim_sofm_2']

你可能感兴趣的:(机器学习)