原创文章,转载请说明来自《老饼讲解神经网络》:www.bbbdata.com
目录
本文讲解LVQ的具体算法流程和细节,算法流程扒自matlab2014神经网络工具箱,是《LVQ-重现matlab实现代码》的具体讲解。
一、符号说明
- W21:代表网络第1层(输入层)到第2层(隐层)的权重矩阵。size:隐神经元个数*输入个数。每i行代表所有输入到第i个神经元的权重。
- W32:代表网络第2层(输入层)到第3层(隐层)的权重矩阵。size:输出个数*隐神经元个数。每i行代表所有隐神经元到第i个输出的权重。
二、主流程
LVQ的训练主要使用单样本训练方式,它的的主流程如下:
- 1、初始化权重w21和w32。
- 2、循环迭代训练,直到达到退出条件(误差足够小或达到最大训练次数)
- ----不放回随机抽取N个样本,每次使用一个样本训练:
- ---------按训练规则lvq1或lvq2计算隐节点更新量dw21。
- ---------更新w21 = w21+dw21
- ----计算本轮误差,如果是历史最优,则将当前w21作为历史最优w21。
- 返回历史最优的w21。
训练流程图如下:
三、初始化说明
(一) W21权重初始化
W21是输入层到隐层的权重,它的采用中心点方式初始化。
即所有隐神经元都初始化为输入的中心点,即
W21权重初始化计算实例 :
2个输入,3个隐节点。
X的输入范围 :
则
(1) 算出x1,x2的中心点分别为5和4.
(2)则W21初始化为
(二) W32权重的初始化
W32不直接设置,依靠输出节点与隐节点连接占比pc进行初始化。
例如,3个隐节点,2个输出,当pc = [0.4,0.6]时,第1个节点占floor(0.4*3) = floor(1.2)=1个隐节点,第二个输出则占2个。
PASS: 在代码实现上,先算得pc累积值,再按累积值映射到隐神经元编号结束位置,从而确定隐神经元的具体分配,即可确定W32。
W32计算实例解说:
隐节点个数hn: 8,输出个数out_n = 3 ,分配占比pc=[0.3,0.2,0.5]
(1)计算pc累积值
(2)映射到隐神经元编号结束位置
由此可得, 1-2号隐节点连接到输出1,3-4号隐节点连接到输出2,5-8号隐节点连接到输出3.
(3)确定 W32
四、训练规则说明(LVQ1,LVQ2)
(一) LVQ1
(1) 初始化dw21全为0(size与w21一致)
(2) 如果用于训练的样本(注意,每次只有一个样本)预测正确,则竞争成功的隐神经元权重(位置)调整量为样本方向,否则为样本反方向.说明:
- k : 竞争成功的隐神经元编号。
- dW21(k,:) : 代表dW21的第k行。
- lr: 学习率,可设为0.01,
- x: 本次训练的输入样本,
- w: 为竞争成功的隐神经元对应的权重,即W21的第k行。
(二) LVQ2
(1) 获取最近聚类中心点和次近聚类中心点的编号k1和k2
(2) 如果训练样本到k1和k2的距离d1与d2过小,即满足则进行更新。
五、网络的预测
LVQ网络输出y的直接按数学表达式计算即可:
其中,dist为欧氏距离,compet则为向量竞争函数,即向量中最大值者为1,其实为0.
相关文章