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

SKM*_*SKM 6 matlab machine-learning neural-network particle-swarm

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

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

(2)在很多论文中训练曲线我已经看到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
Run Code Online (Sandbox Code Playgroud)

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

buz*_*jwa 4

  1. 与大多数机器学习方法一样,PSO 中的迭代次数就是解决方案更新的次数。对于 PSO,这是所有粒子的更新轮数。这里的成本函数是在每个粒子更新后评估的,因此比迭代次数要多。大约,(# 成本函数调用) = (# 迭代) * (# 粒子)。
  2. 这里的图比较了不同的分类器、图 (a) 的模糊认知图和图 (b) 的神经网络。因此,X 轴显示每个学习迭代的相关度量。
  3. 每次运行神经网络时,都会使用不同的随机值对其进行初始化,因此结果永远不会相同。事实上,每次运行的结果差异很大,这意味着您存在收敛问题。在这种情况下要做的第一件事是尝试运行更多迭代。一般来说,收敛是一个相当复杂的问题,并且解决方案随应用程序的不同而有很大差异(请仔细阅读艾萨克在其他问题上给您的答案和评论)。如果增加迭代次数后问题仍然存在,您可以将其作为新问题发布,并提供数据示例以及用于构建和训练网络的实际代码。