zoukankan      html  css  js  c++  java
  • 神经进化学的简介和一个简单的CPPN(Compositional Pattern Producing Networks)DEMO


    近期迷上神经进化(Neuroevolution)这个方向,感觉是Deep Learning之后的一个非常不错的研究领域。

    该领域的一个主导就是仿照人的遗传机制来进化网络參数与结构。注意,连网络结构都能够进化。就是不像是传统的神经网络,结构是预定义好的。


    近期这个领域研究的比較多的是 弗罗里达大学的Stanley教授,基本的贡献有NEAT,HyperNEAT以及Novelty Search。有兴趣的能够去google之。


    NEAT与HyperNEAT都是一种indirect coding算法,目的在更新神经网络的拓扑结构以及參数,而Novelty Search是指引NEAT与HyperNEAT怎样更新的一个算法。

    当中NEAT,HyperNEAT与神经网络的关系是这种:


    我们用于决策与分类的神经网络(ANN)的參数是被一个叫做Compositional Pattern Producing Networks(CPPN)的网络来决定。而CPPN的拓扑结构由NEAT与HyperNEAT算法进行进化。Novelty Search则指导NEAT与HyperNEAT算法的优化。


    CPPN网络跟传统的神经网络差点儿相同。仅仅只是激活函数比較特别,更为丰富,并且网络结构没有层的概念,输入是坐标值x, y,详细能够參考2009年提出HyperNEAT的那篇文章第5页的figure 2.


    以下是一个很easy的CPPN的demo,用Matlab写的


    clear;clc
    wid = 32;
    hei = 32;
    map = zeros(hei, wid);
    
    
    for h = 1 : hei
        for w = 1 : wid
            %map(h, w) = sin((h^2 + w^2)*pi/100) ;%+ exp(((h-hei/2)^2 + (w-wid/2)^2)/8000) + h + w;
            %map(h, w) = exp(((h-hei/2)^2 + (w-wid/2)^2)/8000);
            map(h, w) = sin((h^2 + w^2)*pi/100) + exp(((h-hei/2)^2 + (w-wid/2)^2)/800);
        end
    end
    
    map = map - min(map(:));
    map = 255 * map / max(map(:));
    imshow(uint8(map))
    


    能够从代码看出,输入是坐标值。而网络结构非常easy:就是一个高斯函数+正弦函数。最后形成的map图为



    更为复杂的CPPN生成的图像能够參见  http://picbreeder.org/




  • 相关阅读:
    BADI 笔记
    ALV 常用功能 转载
    F4字段搜索帮助
    全省各地均可拨打劳动违法投诉电话:12333
    小结SQL Server连接失败错误及解决
    sql server日志已满处理方法
    VC6.0快捷键大全
    Eclipse下UML插件及安装
    Delphi错误:"External exception C0000235"
    delphi中临界操作方法
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5056658.html
Copyright © 2011-2022 走看看