如何使用GA进化神经网络的权重?

时间:2012-03-02 19:06:06

标签: artificial-intelligence neural-network genetic-algorithm

我正在进行任务,我需要改进神经网络的权重。 我的神经网络是有效的,但我不确定如何以一种能让我获得良好结果的方式进化我的网络。

我知道我的AI老师说我需要使用sigmoid函数并加上我的权重*输入,但我不确定其余的。

感谢。

编辑: 我需要使用GA来训练重量。对不起,我没说清楚。

3 个答案:

答案 0 :(得分:1)

有许多方法可以做到这一点,通常一个不是(对于家庭作业)只是被告知要在没有给出算法实现的情况下实现它。

AI或神经网络课程中常用的一种常见方法是反向传播:

http://en.wikipedia.org/wiki/Backpropagation

更新:哦,我明白了。现在我至少可以指出你正确的方向。讨论有点长,在stackoverflow的答案空间中提供,但基本的想法是生成一堆随机神经网络(非常糟糕!)解决你的问题,然后将遗传算法应用于网络(即转换神经网络到染色体,可以根据它们的适应性进行突变,交叉/重组等,并让整个系统自我脱离原始的软泥。可以这么说。

有一篇关于Fogel等人撰写的特定申请(国际象棋)的非常好的论文:http://www.aics-research.com/ieee-chess-fogel.pdf

答案 1 :(得分:0)

有许多方法可以发展神经网络。您可以发展拓扑,权重或两者(特别是在强化学习领域,请参阅EANTNEAT)。

你说你应该改进网络的权重。通常,您可以为此应用任何优化算法。但是存在不同类别的问题和优化算法。在监督学习中,通常有必要计算训练集上的误差和误差函数相对于权重的梯度。使用梯度信息的优化算法通常比遗传算法更快(例如Backprop,Quickprop,RProp,Conjugate Gradient,Levenberg-Marquardt ......)。

正如您所说,您没有训练集,因此您没有错误功能,因此您无法计算渐变。那么,你需要进一步发展你的神经网络的权重是一种健身功能。如果您没有任何健身功能,您将无法通过调整体重来改善任何功能。所以,基本上你有一个函数F(w),其中w是你的连续权重向量,你必须优化F。你的算法应该做这样的事情:

  1. 初始化神经网络
  2. 生成N个权重向量
  3. 计算权重向量的适应度值
  4. 重复2.-4。直到满足一些停止标准
  5. 根据你的描述,我猜你可能需要解决某种强化学习问题。在这种情况下你可以e。 G。将一集的累积奖励作为健身值。如果您对此主题感兴趣:最近有一些关于在神经网络上应用遗传算法来解决强化学习问题的研究(这称为神经进化)。通常人们使用遗传算法,如CMA-ES(CMA-NeuroES)或CoSyNE

    我希望我能提供帮助。

答案 2 :(得分:0)

GA的适应度函数应该能够优化您的NN权重,例如用单层解决逻辑AND问题感知器需要这样的函数:

fitness = 1 - (input1 * weight1 + input2 * weight2)

你的健康越接近0越好,最佳解决方案是(输入1 * 0.5 +输入2 * 0.5)

如果我们用每个神经元上的0.5和权重值等值替换input1和input2

  

input1 = 1,input2 = 1 => fitness = 0

     

input1 = 0,input2 = 1 =>适应度= 0.5

     

input1 = 1,input2 = 0 =>适应度= 0.5

     

input1 = 0,input2 = 0 =>健身= 1

这些已生成  然后可以将权重转移到每个神经元的索引权重中。基本上你不会创建许多神经网络,而是为NN创建许多权重组合,并使用GA来优化它们。