我学习了使用遗传算法学习人工神经网络的基本知识。我发现基本上可以做两件事:
- 使用遗传算法设计网络结构(决定两个神经元之间是否应该有连接)。我猜我们假设只能使用一定数量的神经元到神经元的连接。
- 使用遗传算法计算最优权重。
我还了解到,遗传算法只有在不规则网络的情况下才有意义。如果网络由层组成,建议使用反向传播,因为它更快。
如果反向传播更快且需要由层组成的网络,为什么我还要选择遗传算法来学习或设计网络呢?
回答:
使用遗传算法设计网络结构(决定两个神经元之间是否应该有连接)。
一般来说,你似乎在谈论前馈网络,大概是多层感知器(MLP)。
对于这些网络,网络结构涉及神经元和层的数量以及神经元之间的连接。通常这些是完全连接的,因此第n层的每个神经元都连接到第n+1层的每个神经元。训练方法会通过将一些权重训练到零或非常小的数字来解决部分连接性问题。
根据数据复杂性和您希望它们做什么,有一些设置人工神经网络的规则。这些可以为您提供一个良好的起点。训练算法会处理神经元到神经元的连接,但不会影响神经元或层的数量。
因此,遗传算法可以用来实验影响网络大小的参数。
使用遗传算法计算最优权重。
遗传算法并不能保证做到这一点。“最优权重”并不真正存在。一个训练好的网络将在识别和错误之间取得平衡。您可以说“最优权重”以获得目标错误。
对于前馈MLP,遗传算法将比反向传播需要更多的处理时间。
我还发现,遗传算法的微调效果不如反向传播,因此使用遗传算法训练的网络可能对噪声的容忍度较低。
两种方法都不能保证找到绝对最小值,甚至是可接受的最小值。两者都可能陷入局部最小值。如果发生这种情况,有重新启动遗传算法和反向传播的技术。但请记住,您的网络架构可能不允许它在您的数据上达到可接受的错误。权重中有限的内存/空间,解决方案可能不存在。所以当您认为自己处于局部最小值时,您实际上可能处于绝对最小值,但高于可接受的错误。
我还了解到,遗传算法只有在不规则网络的情况下才有意义。如果网络由层组成,建议使用反向传播,因为它更快。
你在这里是正确的,不仅仅是反向传播。大多数具有专用训练算法的网络架构比遗传算法更适合这种情况。
但对于不规则网络,可能没有专用的训练算法。对于这些,遗传算法允许您进行实验和训练。在尝试编写专用训练算法之前,测试架构以查看是否可能找到解决方案。
请记住在发明反向传播之前,由于没有训练MLP的方法,人工神经网络经历了十年的停滞!
如果反向传播更快且需要由层组成的网络,为什么我还要选择遗传算法来学习或设计网络呢?
如果您使用的是前馈网络,反向传播通常是学习的最佳选择。然而,学习只涉及操纵权重。遗传算法可以用来设计结构,并修改其他东西,如偏置、压缩函数,…
需要注意的一点,通常被忽视的是,反向传播通过调整权重来训练单个网络。遗传算法是一个具有固定权重的多个网络的种群,它进化出一个解决方案,即一个“出生”时权重固定的网络。没有实际的网络训练/学习。
虽然单个网络的初始参数;神经元数量、层数、偏置、初始权重,可能需要关注和实验。遗传算法的参数;种群大小、初始值、变异率、交叉,… 都影响进化时间和可能或可能解决方案的结果。