NEAT原理及事例驱动
所谓NEAT算法即通过增强拓扑的进化神经网络(Evolving Neural Networks through Augmenting Topologies),算法不同于我们之前讨论的传统神经网络,它不仅会训练和修改网络的权值,同时会修改网络的拓扑结构,包括新增节点和删除节点等操作。 NEAT算法几个核心的概念是:
基因:网络中的连接
基因组:基因的集合
物种:一批具有相似性基因组的集合
Fitness:有点类似于增强学习中的reward函数
generation:进行一组训练的基因组集合,每一代训练结束后,会根据fitness淘汰基因组,并且通过无性繁殖和有性繁殖来新增新的基因组
基因变异:发生在新生成基因组的过程中,可能会出现改变网络的权重,增加突出连接或者神经元,也有可能禁用突触或者启用突触
但和简单的遗传算法以及进化算法不同,其重点在于拓扑结构的进化以及改变上:
增强拓扑的神经网络既可以有深度网络的分布式表达能力,又可以拥有CNN这样具有权重共享特性的神经网络的简洁性,广泛运用于强化学习(例如机器人,仿生人等),但在本项目中,项目组将其运用在自然语言分析之中。
此外,和主流强化学习框架一样,NEAT的算法往往可以被设计为事例驱动,而不是传统深度学习算法的“数据驱动”或是“模型驱动”。例如,RNN和CNN往往将更多的注意力集中在网络拓扑结构上,而NEAT的拓扑结构由事例以及进化决定。总而言之,这种不算是太古老但充斥着暴力美学的算法值得在领域内更多地被尝试。