C# 基于遗传算法的神经网络权值优化

C# 基于遗传算法的神经网络权值优化,c#,machine-learning,neural-network,artificial-intelligence,genetic-algorithm,C#,Machine Learning,Neural Network,Artificial Intelligence,Genetic Algorithm,我被告知使用神经网络进行预测。所以我用反向传播算法创建了一个前馈多层感知器,它工作得很好。但我需要越来越快地得到结果。所以我想到了遗传算法在训练中优化权重 你建议如何对染色体进行编码 我已经做了一个随机生成的权重表——100,100,但它没有给出特别的结果。我想问题在于,即使变异概率很高,生成随机权重表也会限制解空间 你知道如何在chromosme中对权重进行编码以使遗传算法发挥更大的作用吗 提前感谢。简而言之,评论中已经建议:不要这样做。遗传算法是一种简单的元优化器,用于解决无法有效优化的问题

我被告知使用神经网络进行预测。所以我用反向传播算法创建了一个前馈多层感知器,它工作得很好。但我需要越来越快地得到结果。所以我想到了遗传算法在训练中优化权重

你建议如何对染色体进行编码

我已经做了一个随机生成的权重表——100,100,但它没有给出特别的结果。我想问题在于,即使变异概率很高,生成随机权重表也会限制解空间

你知道如何在chromosme中对权重进行编码以使遗传算法发挥更大的作用吗


提前感谢。

简而言之,评论中已经建议:不要这样做。遗传算法是一种简单的元优化器,用于解决无法有效优化的问题,因为它们速度慢、启发式且需要大量资源。特别是,他们不应该被起诉训练神经网络,为此我们有许多非常有效的训练方法SGD、Rmsprop、Adam。它们可以用于优化一些更抽象的部分,比如网络架构等,在这些部分中,人们无法计算有效的梯度,甚至无法使用其他定义良好的数学过程

简而言之,评论中已经建议:不要这样做。遗传算法是一种简单的元优化器,用于解决无法有效优化的问题,因为它们速度慢、启发式且需要大量资源。特别是,他们不应该被起诉训练神经网络,为此我们有许多非常有效的训练方法SGD、Rmsprop、Adam。它们可以用于优化一些更抽象的部分,比如网络架构等,在这些部分中,人们无法计算有效的梯度,甚至无法使用其他定义良好的数学过程

如果您想使用任何进化算法来优化神经网络权重,
可能更好的方法是使用反向传播学习网络一次,然后使用权值的最大值和最小值作为编码限制。假设权重分布在-1.0988333,1.2982293之间,我将取[-2,2]/-2,2,这样在这个区间内可以生成染色体,它将更倾向于更好的解,并且可以通过算法进一步优化。[-100100]的间隔在生成最佳解决方案时会很慢。当然,如何定义适应度函数对获得最优解很重要。一种方法是获得给定权重的最小rms值

如果您想使用任何进化算法来优化神经网络权重,
可能更好的方法是使用反向传播学习网络一次,然后使用权值的最大值和最小值作为编码限制。假设权重分布在-1.0988333,1.2982293之间,我将取[-2,2]/-2,2,这样在这个区间内可以生成染色体,它将更倾向于更好的解,并且可以通过算法进一步优化。[-100100]的间隔在生成最佳解决方案时会很慢。当然,如何定义适应度函数对获得最优解很重要。一种方法是获得给定权重的最小rms值

更快的收敛速度?然后使用批量标准化。使用遗传算法可能需要更多的资源,例如时间和cpu,而不仅仅是使用梯度下降或其他分析学习方法。你试过使用RMSprop或adagrad吗?我以前一直在研究进化神经网络,我觉得将网络权重表示为位向量,然后在这两种表示之间执行一些转换位向量/权重列表被证明是最有效的搜索策略。如果反向传播收敛,它应该比遗传算法收敛得更快,因为它利用了梯度信息。我只会在反向传播不收敛的情况下使用遗传算法。更快的收敛速度?然后使用批量标准化。使用遗传算法可能需要更多的资源,例如时间和cpu,而不仅仅是使用梯度下降或其他分析学习方法。你试过使用RMSprop或adagrad吗?我以前一直在研究进化神经网络,我觉得将网络权重表示为位向量,然后在这两种表示之间执行一些转换位向量/权重列表被证明是最有效的搜索策略。如果反向传播收敛,它应该比遗传算法收敛得更快,因为它利用了梯度信息。我只会在反向传播不收敛的情况下使用遗传算法。