如何使用遗传算法演化神经网络的权重?
我正在做一项任务,我需要演变我神经网络的权重。 我的神经网络是工作,但我不确定如何演化我的网络,这将使我获得良好的结果。如何使用遗传算法演化神经网络的权重?
我知道我的AI老师说我需要使用sigmoid函数并将我的权重*输入加起来,但我对其余部分并不完全确定。
谢谢。
编辑: 我需要使用GA来训练权重。对不起,我没有说清楚。
有很多方法可以做到这一点,通常不会有(只是作业)被告知要在没有给予算法实现的情况下发生。
一个在AI或神经网络类教的常用方法是反向传播:
http://en.wikipedia.org/wiki/Backpropagation
UPDATE:哦,我明白了。现在我可以至少指出你正确的方向。在stackoverflow的答案空间中提供的讨论有点长,但基本思想是产生一堆随机神经网络(非常糟糕!)解决你的问题,然后将遗传算法应用到网络(即,将神经网络与可以突变的染色体,交叉/重组等等,根据它们的适应性),并让整个系统从原始软泥中引导出来。可以这么说。
有由福格尔写的很不错的论文约一个特定的应用(国际象棋)等,在这里:http://www.aics-research.com/ieee-chess-fogel.pdf
对不起,我想我在我的问题中提到我需要使用GA,但我没有说清楚。我知道后向传播,但在我的问题中,我没有数据集来训练权重,所以这就是我使用GA的原因。 – Undefined 2012-03-02 21:10:46
有许多方法进化神经网络。您可以演进拓扑,权重或两者(这是特别在强化学习领域完成的,请参阅EANT或NEAT)。
你说你应该发展你的网络的权重。一般来说,您可以为此应用任何优化算法。但是存在不同类别的问题和优化算法。在监督式学习中,计算训练集上的错误和误差函数相对于权重的梯度通常是有意义的。使用梯度信息的优化算法通常比遗传算法更快(例如Backprop,Quickprop,RProp,Conjugate Gradient,Levenberg-Marquardt ...)。
如您所说,您没有训练集,因此您没有错误功能,因此无法计算渐变。那么,你需要什么来演化你的神经网络的权重是一种适应度函数。如果您没有任何健身功能,您将无法通过调整重量来改善任何情况。所以,基本上你有一个函数F(W),其中w为你连续权重向量你有关于F.来优化你的算法应该做这样的事情:
- 初始化神经网络
- 生成N权重向量
- 计算权重向量的适应值
- 重复2。直到满足一些停止标准
从你的描述我猜你可能需要解决某种强化学习问题。在这种情况下,你可以e。 G。将一集的累积奖励作为适应值。如果您对这个主题感兴趣:最近有一些关于将遗传算法应用于神经网络来解决强化学习问题的研究(这被称为神经元进化)。通常人们使用遗传算法,如CMA-ES(CMA-NeuroES)或CoSyNE。
我希望我可以帮忙。
您GA的适应度函数应该能够优化神经网络的权重,例如解决逻辑与单层感知问题,需要一个功能像这样:
适合度= 1 - (输入1 *重量1 +输入2 * 1加权)
越接近你的健身到达0越好,用(输入1 * 0.5 +输入2 * 0.5)
如果我们更换输入1和输入2与价值观,如和权重的最佳解决方案在每个神经元上为0.5%
INPUT1 = 1,输入2 = 1 =>健身= 0
INPUT1 = 0,输入2 = 1 =>健身= 0.5
INPUT1 = 1,输入2 = 0 =>健身= 0.5
INPUT1 = 0,输入2 = 0 =>健身= 1
这些生成的权重 然后可转移到用于每个神经元的索引的重物。本质上,你不会创建许多神经网络,但是NN的权重组合很多,并使用GA来优化它们。
请改善您的问题。这太“开放式”了。你确定你想用遗传算法来演化神经网络吗? (并不是说这不一定是个坏主意,但是在介绍类的背景下,这似乎是对这些类型的不必要的混合。另外,你的教师的建议似乎没有暗示GA的方法)。 – mjv 2012-03-02 20:28:54
对不起,我想我在我的问题中提到我需要使用GA,但我没有说清楚。我没有数据集来训练权重,所以这就是我使用GA的原因。 这项工作是我的人工智能任务的扩展,我们假设要创建一个基本的遗传算法。 – Undefined 2012-03-02 21:11:42