遗传算法如何在不知道搜索量的情况下优化神经网络的权重?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遗传算法如何在不知道搜索量的情况下优化神经网络的权重?相关的知识,希望对你有一定的参考价值。
我已经实现了一个由遗传算法训练的神经网络,它具有像这样的变异算子:
def mutation(chromosome, mutation_rate):
for gene in chromosome:
if random.uniform(0.00, 1.00) <= mutation_rate:
gene = random.uniform(-1.00, 1.00)
并且染色体最初是随机初始化的:
def make_chromosome(chromosome_length):
chromosome = []
for _ in range(chromosome_length):
chromosome.append(random.uniform(-1.00, 1.00))
return chromosome
[进行交换时,后代染色体只能在[-1, 1]
区间内有基因,因为亲代染色体也只有在该区间内有基因。当后代发生突变时,它同样会将其基因保持在该区间内。
这似乎可以解决某些问题,但不适用于其他问题。如果神经元的最佳权重在[-1, 1]
以内,则遗传算法可以工作,但是如果神经元的最佳权重在不同的区间内怎么办?
例如,如果我使用反向传播训练网络,且分类错误的终止条件低于5%,则可以查看网络权重,并看到-1.49
,1.98
,2.01
等值。我的遗传算法永远不会产生那些基因,因为基因在[-1, 1]
内初始化,并且交叉和突变也不会产生该范围之外的基因。
似乎我需要更好地定义搜索空间,如下所示:
# search space boundaries
S_MIN = -1.00
S_MAX = 1.00
# in mutation()
gene = random.uniform(S_MIN, S_MAX)
# in make_chromosome()
chromosome.append(random.uniform(S_MIN, S_MAX))
然后我可以根据问题设置搜索空间边界。但是,如何确定搜索空间?这些信息不是先验信息,可以通过培训网络找到。但是,如果训练需要知道搜索空间,那么我将处于停顿状态。
我可以将搜索空间设置为任意大(例如,肯定大于所需的大小),但是算法收敛缓慢。我至少需要知道搜索空间的大致数字才能使遗传算法高效。
对于反向传播,搜索空间不是先验的,也没有关系,但是对于GA来说,是这样。>
[我已经实现了一个带有变异算子的遗传算法训练的神经网络,如下所示:def突变(染色体,mutation_rate):用于染色体中的基因:if random.uniform(0.00,1.00)<= ...
这似乎是对使用神经网络进行强化学习的核心挑战的重述。您有一个损失函数,可以通过数字量化在解决方案空间的当前局部中可能采取的措施的质量,这样,当采取措施时,您将与全局最优值(答案)更加接近/远离。 {即渐变色损失函数}
以上是关于遗传算法如何在不知道搜索量的情况下优化神经网络的权重?的主要内容,如果未能解决你的问题,请参考以下文章
Matlab问题--如何用遗传算法优化BP神经网络?这篇文献(中文)是如何做的?
开盘指数预测基于matlab遗传算法优化小波神经网络股票开盘指数预测含Matlab源码 2014期