神经网络进化

一句话理解

神经进化( Neuro Evolution ):将进化的思想使用到神经网络参数优化的更迭中

铺垫

人工神经网络与生物神经网络重要不同点

人工神经网络大多是计算机能够理解的数学模型,通过将输入值正向传播得到自己的判断,对比自己的判断与真实值将误差反传更新自身的网络参数

生物神经网络并没有反向传播的过程,而是通过刺激产生新的网络连接以更透彻地理解事物(NE的实现思路与生物神经网络更贴近)

与用传统梯度下降生成的网络对比

监督学习中,梯度下降法指明了最优的方向,不断朝此方向更迭即可。而进化理论下的神经网络使用的是用原始的点创造新点,通过挑选确定下一代的起始点,不断更迭。因此在监督学习中,使用梯度下降进行参数更新的网络更快,但进化理论下的神经网络能够更好地避免陷入局部最优的。比起梯度下降,进化理论中的算法能够并行可以大大减少训练时间。

进化策略+神经网络

固定神经网络A的结构,利用A生成多个结构相同但网络间连接强度稍有不同的子代。
通过适者生存规则进行打分后,给每个子代网络一个比例值,得分高的比例值高。将子代按照比例组合成一个神经网络,作为下一次迭代的父代。

核心:
固定神经网络形态 (Topology), 改变参数 (weight)

通过不断尝试变异, 修改网络中节点间的权重, 改变神经网络的预测结果, 保留预测结果更准确的, 淘汰准确率低的.

OpenAI 2017年发表的Evolution Strategies as a Scalable Alternative to Reinforcement Learning表明利用并行的特点,ES+Neuro Network在数量级较大的场景下能够优于传统的强化学习

此论文中整体思路最简单的诠释:
import numpy as np
solution = np.array([0.5, 0.1, -0.3])  #神经网络中的参数
def f(w): return -np.sum((w - solution)**2)

npop = 50      # 种群数
sigma = 0.1    # 噪点标准差(变异强度)
alpha = 0.001  # 学习率(步长)
w = np.random.randn(3) # 对 solution 的初始猜测
for i in range(300):   #一共300代
  N = np.random.randn(npop, 3)  # 产生噪点
  R = np.zeros(npop)
  for j in range(npop):
    w_try = w + sigma*N[j]      #生成子代
    R[j] = f(w_try)             # 得到环境奖励
  A = (R - np.mean(R)) / np.std(R)  # 归一化奖励
  w = w + alpha/(npop*sigma) * np.dot(N.T, A)   # 更新参数(下一代的weight)

遗传算法+神经网络

取出来自父亲A和母亲B的神经网络,通过交叉和变异产生子代C,对生成的所有子代进行适者生存不适者淘汰的选择,迭代循环。

核心:
修改参数 (weight)和形态(Topology)

不仅可以修改权重和偏置还可以修改整个网络的结构,获得更多的自由度,探索大的可能性,更易于找到全局最优

NEAT是运用此思路的典型算法,将遗传算法与神经网络结合。原始paper Evolving Neural Networks through Augmenting Topologies, 浓缩版Efficient evolution of neural network topologies.

关于NEAT:(下图全部来自论文)
1.基因编码(有两条链A/B)
A:Node Genes,用于存储网络中节点的信息(是第几个节点,是input node还是hidden node等)
B:Connection Genes,用于存储节点间的信息(哪两个点,权重是多少,是不是直连,Innovation number在交叉过程中作为识别的ID)
这里写图片描述

2.变异(两种方式:加连接/加节点)
这里写代码片

3.交叉
通过Innovatrion number“对齐”父母的基因序列:
若某连接父母都有,则随意选二选一传给子代
若某连接只有一方有,则将有的基因传给子代
(孩子的基因序列是父母的并集)
这里写图片描述

参考:莫烦进化理论系列视频

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值