粒子群优化训练神经网络的概念问题

时间:2014-04-10 01:16:19

标签: matlab machine-learning neural-network particle-swarm

我有一个4输入和3输出神经网络,通过粒子群优化(PSO)训练,均方误差(MSE)作为适应度函数,使用MATLAB提供的IRIS数据库。适应度函数评估50次。该实验是对特征进行分类。我有一些疑惑

(1)PSO迭代/世代是否评估适应度函数的次数?

(2)在许多论文Training Curve中,我看到MSE与世代的训练曲线是情节。在图中,左侧的图(a)是类似于NN的模型。它是一个4输入0隐藏的第3层输出认知图。并且图(b)是由相同PSO训练的NN。本文的目的是展示新模型在(a)中对NN的有效性。

但是他们提到实验进行说Cycles = 100次,Generations = 300。在这种情况下,(a)和(b)的训练曲线应该是MSE vs Cycles而不是MSE vs PSO世代?例如,Cycle1:PSO迭代1-50 - >结果(Weights_1,Bias_1,MSE_1,Classification Rate_1)。 Cycle2:PSO迭代1-50 - >结果(Weights_2,Bias_2,MSE_2,Classification Rate_2)等等100个周期。为什么(a),(b)中的X轴是不同的,它们是什么意思?

(3)最后,对于程序的每次独立运行(通过控制台独立运行m文件几次),我从未得到相同的分类率(CR)或相同的权重集。具体地说,当我第一次运行程序时,我得到W(权重)值,CR = 100%。当我再次运行Matlab代码程序时,我可能得到CR = 50%和另一组权重!如下例所示,

%Run1 (PSO generaions 1-50) 
>>PSO_NN.m

Correlation =

     0

Classification rate = 25



FinalWeightsBias =

   -0.1156    0.2487    2.2868    0.4460    0.3013    2.5761

%Run2 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

     1

Classification rate = 100

%Run3 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

   -0.1260

Classification rate = 37.5

    FinalWeightsBias =

   -0.1726    0.3468    0.6298   -0.0373    0.2954   -0.3254

正确的方法应该是什么?那么,我最终应该采用哪个权重集,以及如何说网络已经过培训?我知道由于它们的随机性而导致的进化算法永远不会给出相同的答案,但是我如何确保网络已经过训练? 我们有义务澄清。

1 个答案:

答案 0 :(得分:4)

  1. 与大多数机器学习方法一样,PSO中的迭代次数是解决方案更新的次数。在PSO的情况下,这是所有粒子的更新轮次数。此处的成本函数在每个粒子更新后进行评估,因此超过迭代次数。大约,(#cost function calls)=(#iterations)*(#particles)。
  2. 此处的图表正在比较不同的分类器,图{a)为fuzzy cognitive maps,图(b)为neural network。因此,X轴显示每个学习迭代的相关度量。
  3. 每次运行NN时,都会使用不同的随机值对其进行初始化,因此结果永远不会相同。从一次运行到另一次运行的结果差别很大,这意味着您遇到了收敛问题。在这种情况下要做的第一件事是尝试运行更多的迭代。总的来说,融合是一个相当复杂的问题,解决方案因应用程序而异(并仔细阅读Isaac在your other question给出的答案和评论)。如果在增加迭代次数后问题仍然存在,您可以将其作为新问题发布,提供数据样本以及用于构建和训练网络的实际代码。