神经网络变异不如预期

我正在 Lua 上开发一个神经进化系统。在创建一个神经网络的一代时,我会变异一个父网络多次,以创建各种新的子网络。代码如下:

    function MutateNetwork(net)

        for i=2,#net.neurons do
            for j=1,#net.neurons[i] do
                --变异偏置
                if (math.random()) > 0.30 then
                    mut = (math.random() - 0.5) * 2
                    net.neurons[i][j].bias = net.neurons[i][j].bias + mut
                end

                --变异权重
                for o=1,#net.neurons[i][j].connections do
                    if (math.random()) > 0.30 then
                        mut = (math.random() - 0.5) * 2
                        net.neurons[i][j].connections[o].weight = net.neurons[i][j].connections[o].weight + mut
                    end
                end
            end
        end

        return net

    end

    function CreateGeneration(parent)
        local gen = {}

        for i=1,childCount do
            gen[i] = MutateNetwork(parent)
        end

        return gen
    end

执行 CreateGeneration() 函数之后,我得到了一组新的网络,但所有的变异都完全相同。我做错了什么?

点赞
用户33252
用户33252

你正在为所有孩子使用相同的网络。事实上,这个网络和父母的网络是一样的。也许你应该像这样做:

gen[i] = MutateNetwork(DuplicateNetwork(parent))

新的函数 DuplicateNetwork 应该制作一个网络的深层副本。

2016-08-29 02:09:51