目录
SOM是无监督式的机器学习算法,它的结果不会涉及到具体的分类。例如最近在做一个场景中垃圾检测的项目,结果只要告诉我们有无垃圾,安排人去清扫就可以,无需再细分类地告诉我们具体是哪一类垃圾,这样太繁琐而且性价比不高。SOM等无监督式的网络就很适合于这类情况的使用。而竞争神经网络是基于无监督学习方法的神经网络的重要类型,常常作为基本的网络形式构成一些具有自组织能力的网络,如SOM。
竞争神经网络
我们注意到,结构上和RBF等网络是比较像的。这里的距离是负数距离,||ndist||中带一个n,表示negative。在matlab中计算方法是ngedist。
它的计算过程是:待分类样本输入后,和样本(就是输入权值向量IW)计算负距离。||ndist||计算后输出是S1x1维的列向量,列向量中每个元素为输入向量p和IW距离的负数。之后,再和一个阈值b1相加,得到n1。接下来就进入了最重要的竞争层,在竞争层中,只有值最大的一个输入才能“崭露头角”,输出为1,其它菜鸡的输入都会变成0。
举个例子:
如上图,只有在输入4的位置处,对应的输出才是1,其它都是0。这就是竞争层的作用。
通过这样的方法,对于n1中最大的元素,可以获胜,竞争层输出1。如果b1=0,即没有阈值向量作用,那么只有当神经元的权值向量IW与输入向量最接近时,它在n1中各元素的负值最小,而值最大,所以能赢得竞争。这就是为什么要用负距离。
就使得不是每次迭代就把所有神经元的权重都更新一遍,而是每次迭代只更新一个隐含层神经元的权重。例如上面这个例子的输出a1,a1是S1x1的维度,其中就一个值为1,其它为0,那么就只有1的位置对应的那个神经元的权重才会得到更新(只有获胜的神经元才有机会跳转权值)。
这样不断迭代,势必会带来一个问题:获胜的神经元通过调整能够不断缩小误差,导致它们取胜几率不断增大,导致最后整个网络中只有一部分胜利的神经元取得成功,其他神经元始终没有取得训练,成为“死神经元”。
解决这个问题的办法:设置较大的b1,帮助被冷落的神经元们获得竞争胜利的机会。针对某个竞争神经元而言,如果偏置b1取得比较大,那么就能帮助输入p在竞争中获得更大的取胜概率。当然,这个b也是会动态调整的,通过学习函数learncon来帮助动态调整b:Update the biases with the learning function learncon so that the biases of frequently active neurons become smaller, and biases of infrequently active neurons become larger.
权重IW{1,1}如何设定?
-
are initialized to the centers of the input ranges with the function midpoint.也就是说是取输入向量的中心。
中心怎么理解呢?简单的说是最大最小值的平均值。
而midpoint在matlab里的效果:W = midpoint(S,PR)