LVQ神经网络基本原理与从聚类角度看本质

原创文章,转载请说明来自《老饼讲解神经网络》:www.bbbdata.com


目录

一、LVQ的网络结构

二、LVQ的输出计算方法

三、LVQ的本质与意义

四、LVQ的网络构建

五、LVQ的网络训练主流程

六、dw21的计算(lvq1,lvq2)

(一) LVQ1规则

(二) LVQ2规则

七、用聚类中心思想重看LVQ

(一)LVQ1法

(二) LVQ2法


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各行的距离的相反数

\textbf{Hv} = \textbf{dist}(x,W_{21}) = \begin{bmatrix} -\sqrt{(2-2)^2+(3-2)^2}\\ -\sqrt{(2-1)^2+(3-5)^2}\\ -\sqrt{(2-6)^2+(3-4)^2} \end{bmatrix} =\begin{bmatrix} -1\\ -\sqrt{5}\\ -\sqrt{17} \end{bmatrix}


(2) 计算隐神经元激活值

\textbf{Ha} = \textbf{compet}(\textbf{Hv} ) = \textbf{compet} \left ( \begin{bmatrix} -1\\ -\sqrt{5}\\ -\sqrt{17} \end{bmatrix} \right ) =\begin{bmatrix} 1\\ 0\\0 \end{bmatrix}


(3)计算输出
 

\text{y} = W_{32}*\textbf{Ha} =\begin{bmatrix} 1&1&0\\ 0&0&1 \end{bmatrix}*\begin{bmatrix} 1\\ 0\\0 \end{bmatrix} =\begin{bmatrix} 1\\ 0 \end{bmatrix}

实际上以上计算就是如下过程:



三、LVQ的本质与意义

LVQ的本质就是,每个隐神经元代表一个中心点,x离哪个神经元(中心点)近,就属于哪个该隐神经元所连接的类别。

  • 它的本质就是找出k个中心点,每个中心点都代表一个类别,然后用中心点去判别样本的类别。
  • 隐节点就是中心点,隐节点个数就是中心点的个数,而隐节点与输入的权重就是中心点的位置,而隐节点与输出的权重(连接),就是隐节点所代表的类别。
  • LVQ的训练就是调整隐层与输入层的权重,也就是调整隐节点的位置。

总的来说,是如下对应

  • 隐节点:聚类中心点。
  • 隐节点与输入层的权重:聚类中心点的位置。
  • 隐节点与输出层的连接(权重w32):隐节点所属类别。
     

LVQ的预测

  • 判断 样本 离哪个聚类中心点最近,就判为该聚类中心点所指标的类别。

四、LVQ的网络构建

LVQ网络结构的确定主要有两个参数

  • (1)确定隐节点个数。
  • (2) 确定隐节点与输出节点的连接结构。

确定连接结构即确定输出层与隐层的权重矩阵w32。w32_{i,j}为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个。

W^{(32)} = \begin{bmatrix} 1 &1 &0 & 0 &0 \\ 0 & 0& 1& 1 &1 \end{bmatrix}
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比较简单,就是如果网络对当前样本预测错误,则将当前胜出的隐节点远离样本,如果预测正确,则往样本靠近。


即竞争胜出的隐节点与输入对应的权重(即该隐节点所代表的聚类中心位置) 调整量为:

\text{dw}=\begin{cases} \text{lr} *(x - w) & \text{ if } \textbf{Correct} \\ \text{lr} *(w - x) & \text{ if } \textbf{Err} \end{cases}

(二) LVQ2规则

LVQ2主要解决LVQ1训练后,有些样本属于中心A,又差不多属于中心B这种场景。这样的结果虽然是正确的,但未必“界限”得非常清晰。

因此,引入lvq2,尽量使样本点更“清晰”地划分于某一个中心点。


符号说明:

  • 以k1标为样本所判中心点(即最近的中心点)
  • 以k2代表样本次近的中心点
  • d1,d2分别代表样本到k1,k2的距离


LVQ2规则如下:

如果

\dfrac{\text{d}_{1}}{\text{d}_{2}} <s=\dfrac{1-\alpha}{1+\alpha}

 则对中心点作如下更新(\alpha一般取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:用聚类中心点理解该方法是很简单的,但套到神经网络框架,搞得云里雾里。


相关文章

​《BP神经网络梯度推导》


​​​​​​《BP神经网络提取的数学表达式》


《一个BP的完整建模流程》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老饼讲解-BP神经网络

请老饼喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值