我想多了解一些训练神经网络的其他方法,我能找到不少关于使用遗传算法(GA)训练网络的文献,但关于PSO训练的资料却很少。PSO是如何工作的呢?
我有一个大致的想法:你创建一个包含许多粒子的群体,并使用网络的损失函数(例如均方误差MSE)作为启发式方法。粒子会移动到MSE最低的区域,然后你就得到了网络的权重。
我理解对于在线普通反向传播网络,训练的一般思路如下:
for each epoch: for each training example d: feed-forward d through layers 0..n find error e as a function of expected vs. actual output back-propagate e through layers n..0 update weights w as a function of w, e, learning and momentum rates endforendfor
我就是找不到太多关于使用PSO来训练神经网络的信息,或者它在算法中的位置。除了我那薄弱的(可能不正确的)假设之外,我不知道它是用于在线学习还是批量学习,如何在没有BP的情况下找到内层错误,PSO是替代还是伴随BP等。
我希望能得到一些正确的指引,但不一定是代码,因为我更感兴趣的是先了解它,然后再进行实现。
回答:
为了记录和以防其他人也遇到这个问题:PSO是通过替代BP来集成到神经网络中的训练中的。使用MSE误差函数和一组训练样本,你有一个连续且有界的搜索空间和一个适应度函数,这正是PSO所需要的。
initialize a set of random particles in n-dimensions (n = # of weights in network)perform PSO using swarm of particlesPSO fitness function is network MSE functionMSE function should (always?) uses feed forward to generate sum of errors of found vs targetover time, particles (as an encoding of weights) will find a minimum of MSEreturn the best particle after so many iterations, initialize network weights as position
你还可以将PSO与神经网络结合用于其他应用,比如超参数选择或模型结构选择。不过,我最感兴趣的是训练方面。