近期迷上神经进化(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/

神经进化学的简介和一个简单的CPPN(Compositional Pattern Producing Networks)DEMO的更多相关文章

  1. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  2. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  3. 1.1(学习笔记)Servlet简介及一个简单的实例

    一.Servlet简介 Servlet是使用Java语言编写的服务器端程序,可以生产动态的Web界面. 主要运行在服务器端,Servlet可以方便的处理客户端传来的HTTP请求,并返回一个响应. 二. ...

  4. php 的路由简介 (一个简单的路由模式)

    <?php $_SERVER['REQUEST_URI'] = '/post/edit/1024?foo=bar'; $uri = explode('/', parse_url($_SERVER ...

  5. 手写一个简单版的SpringMVC

    一 写在前面 这是自己实现一个简单的具有SpringMVC功能的小Demo,主要实现效果是; 自己定义的实现效果是通过浏览器地址传一个name参数,打印“my name is”+name参数.不使用S ...

  6. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  7. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  8. Dubbo简介---搭建一个最简单的Demo框架

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  9. 使用springboot实现一个简单的restful crud——01、项目简介以及创建项目

    前言 之前一段时间学习了一些springboot的一些基础使用方法和敲了一些例子,是时候写一个简单的crud来将之前学的东西做一个整合了 -- 一个员工列表的增删改查. 使用 restful api ...

随机推荐

  1. C Tricks(十八)—— 整数绝对值的实现

    为正还是为负:(对 int 类型而言,第一位为符号位,其余为数值,则右移 31 位,再与 1 求与) 如果为正 ⇒ 返回原值 如果为负 ⇒ 对其二进制形式各位取反 + 1 int abs(int x) ...

  2. 3.lombok系列3:lombok的实验类特性

    转自:https://blog.csdn.net/54powerman/article/details/72516755 lombok除了已经推荐使用的基本功能,还维护了一个创新型的注解,有些功能有违 ...

  3. select下拉列表选中后,跳转新链接

    1.在当前页面打开新链接 <select onchange="location.href=this.options[this.selectedIndex].value" na ...

  4. M1卡操作

    M1卡操作时,读取的时候,是将卡里面的1块(占16个字节)数据以十六进制字符的形式读取出来的啊!一个字节占两位16进制,因为读出来是字符.如果放在byte[]数组里,因为一个字符占一个字节,所以要用长 ...

  5. noi25 最长最短单词(为什么会出现运行时错误)

    noi25 最长最短单词(为什么会出现运行时错误) 一.总结 一句话总结:比如除以零,数组越界,指针越界,使用已经释放的空间,数组开得太大,超出了栈的范围,造成栈溢出 1.c++报runtime er ...

  6. stm32关于.o的错误

    是因为没有加入官方库的原因,而且编译出错之后不能跳转到那里.

  7. IOS获取preferreces偏好设置plistname名称的方法

    //获取preferreces偏好设置plistname名称的方法1 -(NSArray*)loadSpecifiersFromPlistName:(NSString*)plistName targe ...

  8. [D3] Create Chart Axes with D3 v4

    Most charts aren’t complete without axes to provide context and labeling for the graphical elements ...

  9. swift项目第一天:环境部署

    一:项目部署 项目部署 一.开源中国(OSChina) 网站地址:https://git.oschina.net/ 开源中国社区成立于2008年8月,其目的是为中国的IT技术人员提供一个全面的.快捷更 ...

  10. ASCII码的问题

    数字0在ASCII的不同进制下表示: