原创文章,转载请说明来自《老饼讲解神经网络》:www.bbbdata.com
目录
LVQ(Learning Vector Quantization)神经网络是Kohonen于1989年提出基于竞争网络的学习矢量量化网络,主要用于做分类。
本文介绍LVQ神经网络的结构、运作与训练,是LVQ的入门教程,是LVQ原理理解、代码实现、实际应用的理论基础。
- 在matlab 中使用工具箱使用LVQ,请查看《LVQ-matlab工具箱使用》
- 挖出工具箱源码,重写LVQ,请查看《LVQ-matlab工具箱源码重写》,你没看错,是挖出源码重写,不挖源码重现,你怎么知道有没有学习到位呢?
笔者:
- 本文前面按传统神经网络角度讲解LVQ神经网络,其实从神经网络角度理解有些晦涩,最好从聚类中心点的角度理解,整个LVQ其实就是一两句话的事(放在文未)。
- 神经网络往往就是这样, 明明是一个很简单的算法,但就要强套到“神经网络”上,搞得云里雾里, 但一个小算法也因此而得以摇身一变。
一、LVQ的网络结构
LVQ的网络结构如下:
它是固定的三层网络,输入层,隐层,与输出层。
其中,
- (1) 输入层与隐层全连接,
- (2) 隐层与输出层是部分连接,隐层与输出层的连接权重固定为1。
- (3) 输出神经元取值只为0或1.
二、LVQ输出的计算方法
LVQ网络输出y的数学表达式为:
其中,dist为欧氏距离,compet则为向量竞争函数,即向量中最大值者为1,其实为0.
例子解说
(1) 先计算隐神经元值,即 x与W21各行的距离的相反数
(2) 计算隐神经元激活值
(3)计算输出
实际上以上计算就是如下过程:
三、LVQ的本质与意义
LVQ的本质就是,每个隐神经元代表一个中心点,x离哪个神经元(中心点)近,就属于哪个该隐神经元所连接的类别。
- 它的本质就是找出k个中心点,每个中心点都代表一个类别,然后用中心点去判别样本的类别。
- 隐节点就是中心点,隐节点个数就是中心点的个数,而隐节点与输入的权重就是中心点的位置,而隐节点与输出的权重(连接),就是隐节点所代表的类别。
- LVQ的训练就是调整隐层与输入层的权重,也就是调整隐节点的位置。
总的来说,是如下对应
- 隐节点:聚类中心点。
- 隐节点与输入层的权重:聚类中心点的位置。
- 隐节点与输出层的连接(权重w32):隐节点所属类别。
LVQ的预测
- 判断 样本 离哪个聚类中心点最近,就判为该聚类中心点所指标的类别。
四、LVQ的网络构建
LVQ网络结构的确定主要有两个参数
- (1)确定隐节点个数。
- (2) 确定隐节点与输出节点的连接结构。
确定连接结构即确定输出层与隐层的权重矩阵w32。为1时,代表第i个输出与第j个隐节点连接。
一般不直接设置w32,而是通过设置隐节占比pc来间接设置w32。
通过pc设置w32的例子:
有2个输出,10个隐节点,pc=[0.4,0.6]。
则与输出1连接的隐神经元为0.4*5=2个,与输出1连接的隐神经元为0.6*5=3个。
则
PASS:实际上该点就是确定初始化多少个聚类中心点,与各个聚类中心点对应的类别。
五、LVQ的网络训练主流程
LVQ的训练过程只对w21(输入层到隐层的权重)进行训练。本质就是优化k个聚类中心点的位置。
PASS:隐层到输出层的权重经预设后不会再变动,也即聚类中心点所代表的类别,是不会在训练中改变的。
LVQ的训练采用逐样本训练方式,主流程如下:
循环迭代次数:
循环n次(n为样本数量个数),每次随机抽取一个样本训练网络:
根据抽到的样本,使用lvq1,或lvq2计算w21的调整量dw21。
更新w21 = w21+dw21
计算本轮误差,如果是历史最优,则将当前w21作为历史最优w21。
返回历史最优的w21。其中,lvq1和lvq2为dw21常用的两种计算规则
六、dw21的计算(lvq1,lvq2)
w21的调整规则常用的有两种算法:LVQ1和LVQ2.
(一) LVQ1规则
lvq1比较简单,就是如果网络对当前样本预测错误,则将当前胜出的隐节点远离样本,如果预测正确,则往样本靠近。
即竞争胜出的隐节点与输入对应的权重(即该隐节点所代表的聚类中心位置) 调整量为:
(二) LVQ2规则
LVQ2主要解决LVQ1训练后,有些样本属于中心A,又差不多属于中心B这种场景。这样的结果虽然是正确的,但未必“界限”得非常清晰。
因此,引入lvq2,尽量使样本点更“清晰”地划分于某一个中心点。
符号说明:
- 以k1标为样本所判中心点(即最近的中心点)
- 以k2代表样本次近的中心点
- d1,d2分别代表样本到k1,k2的距离
LVQ2规则如下:
如果
则对中心点作如下更新(一般取0.25,此时s=0.6 ):
如果样本实际真属于k1,则将k1往样本靠近,将k2远离样本。
如果样本实际不属于k1,而属于k2,则将k2往样本靠近,k1远离样本。
相比于LVQ1,LVQ2考虑了次近节点的位置,使界限更为清晰。
七、用聚类中心思想重看LVQ
我们用聚类中心点的角度来总结LVQ神经网络。
(一)LVQ1法
- (1) 先初始化k个聚类中心点,并指定每个聚类中心点所属的类别
- (2) 随机选择一个样本训练聚类中心点的位置。如果离该样本最近的聚类中心点与该样本同一类别,则调整该聚类中心点,使它离样本更近,否则,让它离样本更远(LVQ1规则)。
- (3)重复(2),直到分类误差达到目标值或达到最大迭代次数。
(二) LVQ2法
可以使用LVQ2法对LVQ1结果进一步优化,使样本对类别中心的归属更加“清晰”:
- (1) 承接LVQ1的结果
- (2) 随机选择一个样本训练聚类中心点的位置,如果样本离最近中心点与次近中心的距离差别不大,则如下调整:如果类别属于最近的中心点,则让最近中心点更加靠近,次近聚类中心点远离。如果样本类别不属于最近中心点,而属于次近中心点,则让最近中心点远离,次近中心点靠近。
- (3)重复(2),直到分类误差达到目标值或达到最大迭代次数。
PASS:用聚类中心点理解该方法是很简单的,但套到神经网络框架,搞得云里雾里。
相关文章