1.1概述
自组织竞争神经网络是一种无监督的学习方法。与之前不同的是,前几节讲述的神经网络都是有标签,并且更新所有权值,但是他们并没有考虑到人体神经元的侧抑制现象,也就是在很多情况下,某一个神经元刺激仅能激活很少一部分神经元而不是所有神经元,这就体现了一种竞争的思想。竞争神经网络每次只更新一个被激活的权值并且没有标签去告诉他应该怎么做,这更像是一种聚类方法。
典型的竞争神经网络有:
ART(Adaptive Rseonance Theory)
SOFM(Self-Organization Feature Mapping)
PCA(Principle Components Analysis)
SNN(Synergetic Neural Network)
为了构建带有竞争学习规则的神经网络(这是此类人工神经网络的标准技术),有3个基本元素是必需的:
(1) 一组神经元:它们具有相同的结构、且与最初随机选择的权重连接起来。因此,对于给定的输入样本集,神经元可以有不同的响应。
(2) 一个极限值:决定每个神经元强度的极限值。
(3) 一个机制:允许神经元竞争对给定输入子集的响应,这样每次只能激活一个输出神经元。竞争成功的神经元称为"赢家通吃"神经元。
1.2竞争学习及其特点
竞争学习的概念
-训练模式集合为{x^1,x2,x3,x4,x5,…,xn},所有这些模式分别属于按照某种标准设定的m类模式之一(无先验知识)
-通过竞争学习,网络实现自组织模式分类。每个输出节点代表一类模式,具体哪一个节点对应哪一类模式不是事先指定的,需要竞争而出。
-每个节点就像一个pattern detector 或feature detector,对输入的解释是通过有无相应节点,而不是相应幅度或输入输出变换(像前反馈网络或反馈网络)
-与该节点相连的权向量包含了该类模式的基本信息
1.3竞争学习的目的
竞争学习过程是对输入矢量的聚类过程,是使得获胜节点获得最大响应的过程,是使获胜节点与输入节点之间的权矢量逐渐逼近输入矢量。
当训练结束后,对于某类输入模式P,一定有一个网络输出节点有最大响应(输出值为1),其余输出节点无响应(输出值为0)。该最大响应输出节点与输入节点之间的权矢量等于或代表此输入矢量。(这里最迷惑的地方是什么是权矢量,我个人理解为此权矢量是权值组成的向量,放个图,后面会解释怎么来的,它的意思就是weight vector和input vector重合或者最逼近的向量为最大响应的输出节点)(插眼!)
1.3竞争学习的过程
1.确定winner(competitive phase):按一定的准则计算每个输出节点与输入节点之间的权矢量与输入矢量之间的逼近度,最逼近的为winner。
2.调整权矢量(reward phase):按一定的准则调整winner的权矢量
-在简单的竞争学习中,只有winner被允许去改变权值。
-在自组织学习中,winner和winner旁边的其它神经元可以learn(改变权值)
2,网络模型
自组织竞争神经网络共有三层:输入层、竞争层、输出层。
第一层为输入层: 输入方式为线性输入。
第二层为竞争层
竞争层规则:1.每次只更新获胜神经元的权值。
2.与输入层全连接,层内神经元间无连接。
第三层为输出层:输出函数为线性函数,将训练好的权值线性输出。
2.1计算步骤(简化)
(我就用课上的例子去边举例子边计算辣~)
1.首先我们假设有一个两输入,三输出的竞争网络。同时我们将权重取随机数。
2.我们计算每个输出就是简单的输入乘以权重再相加。举一个例子,计算出每一个输出。
3.我们假设神经元3是winner,然后我们进行权值的更新。
Weight update (scalar): 𝑊+ = 𝑊 + 𝜂 (input − 𝑊 )where 𝑊+ is the new (trained)
weight. 𝑊 is the initial weight and 0 < 𝜂 ≤ 1 is the learning rate.
权值的更新公式为𝑊+ = 𝑊 + 𝜂 (input − 𝑊 )
(*这里的W为原始的我们取得随机数权值, 𝜂为学习率这个是要自己去确定的,为了避免学习率过大,同时为了避免学习速度过慢,我们可以在权值更新的过程中逐渐减小学习率)
2.3计算步骤(加入归一化)
不要慌,稳一手,上面写的简化是为了更好的理解避免加入了归一化就懵懵的。
先放归一化公式:
∗
i
n
p
u
t
1
=
i
n
p
u
t
1
/
i
n
p
u
t
1
2
+
i
n
p
u
t
2
2
*input1=input1/\sqrt{{input1}^2+{input2}^2}
∗input1=input1/input12+input22
∗
i
n
p
u
t
2
=
i
n
p
u
t
1
/
i
n
p
u
t
1
2
+
i
n
p
u
t
2
2
*input2=input1/\sqrt{{input1}^2+{input2}^2}
∗input2=input1/input12+input22
(*input是归一化后的)
我们来具体了解一下为什么要归一化,回到上面我们解释权向量的地方,一开始看到这个图可能会疑惑为什么是一个圆,这就是我们归一化的目的,将输入数据,权值,输出都归一化,最后的向量不就成为一个圆了嘛(拔眼!)
我们首先将两个输入放到图里(这个输入就是一开始举例的那个竞争网络),两个输入构成这个vector,而这个vector的长度L为
i
n
p
u
t
1
2
+
i
n
p
u
t
2
2
\sqrt{{input1}^2+{input2}^2}
input12+input22,然后我们将两个权重也放进去,因为我们一个最佳响应对应两个输入所以有两个输出。
同理,我们将三个权重向量都放入一张图中,我们可以一眼看出weight3 vector是最靠近input的权值向量。
了解上面之后我们来简述一下我们计算的过程是干了什么其实很简单我们就是将去让训练一组vector(每次可能不同,后面写自组织竞争的时候会解释)让它更加逼近我们的input vector。
2.3实例
1.Suppose in this network we set all weights randomly as shown. The current state of the weight vectors is obtained by plotting them on a graph
假设在该网络中,我们随机设置了所有权重,如图所示。权重向量的当前状态是通过将它们绘制在图形上获得的
2.归一化权重
具有标准权重的网络如下图所示。 我们还绘制了与3个神经元相对应的3个权重向量。
假设input1 = 0.8,input2 = 0.5馈入神经网络。
归一化后我们得到:
i
n
p
u
t
1
=
0.8
/
0.8
2
+
0.5
2
=
0.85
input1=0.8/\sqrt{{0.8}^2+{0.5}^2}=0.85
input1=0.8/0.82+0.52=0.85
i
n
p
u
t
2
=
0.5
/
0.8
2
+
0.5
2
=
0.53
input2=0.5/\sqrt{{0.8}^2+{0.5}^2}=0.53
input2=0.5/0.82+0.52=0.53
在这种情况下,输入最接近神经元1的权重向量,因此我们希望神经元1能够“获胜”。 让我们通过检查网络的输出进行验证。
由于我们只对输出量最大的神经元感兴趣,因此无需对神经元应用 sigmoid或者 threshold squashing function
输出:
神经元1is"winner"!
so ,we set the 𝜂 = 0.6(learn rate),and continue calculating
由于公式不保留长度,因此我们需要标准化新的权重向量
w
e
i
g
h
t
1
=
0.554
/
0.554
2
+
0.714
2
=
0.61
weight1=0.554/\sqrt{{0.554}^2+{0.714}^2}=0.61
weight1=0.554/0.5542+0.7142=0.61
w
e
i
g
h
t
2
=
0.714
/
0.554
2
+
0.714
2
=
0.79
weight2=0.714/\sqrt{{0.554}^2+{0.714}^2}=0.79
weight2=0.714/0.5542+0.7142=0.79
最后,让我们绘制一个图表,看看发生了什么。
我们看到权重向量已移向输入。
嘿,先去约个会回来再写代码和后面的~(插眼)
有兴趣加个公众号哈~
---------------------------------------------------------