研究的基本问题
搜索深度网络的最优架构(组件结构/网络拓扑结构/超参数),
具体使用进化算法(遗传算法)完成网络结构的搜索任务。
现有问题
人工设计与优化 对 较为复杂的问题和具有复杂结构的深度网络 有所局限。
deepNEAT 设计的结构复杂,且不规则(没有原则??)
主要想法
结合NEAT与deepNEAT,在dnn层组成的小模块上和模块组成的蓝图上分别演化,利用组合网络统一评价。估计这就是“协同”的由来吧。。。
提出的三个挑战:
1.如何设计体系结构的组件
即文中的模块,1层及以上的小型网络。组件内部的每层网络的设置和整个组件的超参数由模块的演化完成。
2.如何组成网络上的拓扑
即文中的蓝图网络,以组件为单位,寻找到组件间的拓扑结构。
3.为组件及全局设计超参数
全局的超参数在蓝图网络的演化中完成。
老师说NEAT算法这一套弄得挺复杂。还真是这个样子。。。。
结果与结论
结果:设计出的网络能达到与人类设计的最好水平一样,训练收敛更快。设计的网络结构与人工设计有一定的相似性。
结论:网络的演化是可以有导向性的。
槽点
模型真的好不好不太知道,没太看得出来。但是作者描述模型是真的很不清楚。。。
提到了deepneat的缺点是结构复杂而且不规矩,但是好像也没解决啊?codeepneat也演化出了很多重复结构和很多奇奇怪怪的“人工难以设计出”的跳跃链接之类的。
摘要
深度学习的成功取决于找到适合任务的架构。深度学习任务越来越具有挑战性,手工设计架构也变得不那么容易了。这篇论文提出了一种自动化的方法,CoDeepNEAT,通过进化来优化深度学习架构。通过将现有的神经进化方法在拓扑结构、组件和超参数上进行扩展,该方法在对象识别和语言建模的标准基准中达到了与最佳人类设计相当的结果。它还能用于在杂志网站上建立一个真实世界图片自动字幕应用。鉴于可用算力的增长预期,演化深度网络是未来构建深度学习应用的极具潜力的方法。
1.绪论
自2000年以来,大型数据库(即大数据)和大量算力变得唾手可得。因此,扩大机器学习系统成为可能。有趣的是,这些系统在规模上扩大的同时,也变得更加强大。一些以前不太奏效的想法,现在用上了百万倍的计算和数据,从而变得可行。例如,深度神经网络(DNNs),即卷积神经网络和循环神经网络(特别是长短期记忆网络LSTM) 在计算机视觉、语音、语言处理和许多其他领域取得显著成果平。而他们自20世纪90年代就已经存在。
随着dnn的扩大和改进,它们变得更加复杂。因此,一个新的挑战出现了:如何构建这样的复杂系统?人类工程师可以通过实验去优化少量的参数,但是dnn有复杂的拓扑结构和数百个超参数。此外,这类设计选择很重要(模型)的成功通常取决于找到能解决问题的正确架构。深度学习领域最近的大部分工作确实都集中在针对新问题提出不同的人工设计架构。
复杂性挑战并不是神经网络所独有的。软件和许多其他工程系统已经变得过于复杂,人类无法完全优化。因此,一种新方法应运而生,用于思考这种设计。在这种方法中,人类负责高级设计,而细节则留给计算优化系统来处理。例如,人类编写一个软件系统的总体设计,参数和底层代码自动优化;人类编写程序的半成品版本,然后用进化算法来完善;人类定义网页设计的可能空间,而使用进化来找到其中有效的网页设计。
同样的方法也适用于DNN体系结构的设计。这个问题包括三个挑战:如何设计体系结构的组件,如何将它们组合成完整的网络拓扑,以及如何为组件和全局设计设置超参数。这三个方面需要针对每个新任务分别进行优化。
本文提出了一种dnn自动设计的方法。它基于现有的神经进化技术NEAT [43],该技术在过去已经成功地进化了相对小的循环网络的拓扑和权重。在本文中,NEAT被扩展到组件、拓扑和超参数的协同进化优化。进化后网络的性能是根据它们通过梯度下降训练之后执行任务的程度来定义的。该方法在对象识别和语言建模的标准基准任务中,以及在杂志网站上字幕图像的真实应用中得到演示。
结果表明,这种方法发现的设计与现有技术水平相当,并且在没有太多训练的情况下自动完成。这种方法在计算上要求极高——随着计算能力的提高,它可能会更加有效,并可能超过人类的设计。这样的算力现在在各种形式的云计算和网格计算中变得可行,从而神经网络的进化优化成为未来有前途的方法。
2.背景和相关工作
三十年来,神经网络进化技术已经成功地应用于顺序决策任务。在这样的任务中,没有可用的梯度,所以进化取代了梯度下降,被用来优化神经网络的权重。神经网络进化是一个很好的方法,特别是对POMDP(部分可观察的马尔可夫决策过程)问题,因为其递归特性:有可能进化出递归的连接来消除隐藏状态的歧义。
权重可以通过各种进化技术来优化。遗传算法是一个很自然的选择,因为交叉与神经网络具有很好的适配性:重组现有的神经网络,以寻找更好的。CMA-ES[24]是一种连续优化技术,在优化权重方面也很有效,因为它可以捕捉权重之间的交互作用。其他的方法,如SANE, ESP,和CoSyNE,局部地进化部分神经网络,并将它们结合成全功能网络。此外,诸如Cellular Encoding和NEAT[43]等技术已被用来演化神经网络的拓扑,这在明确需要循环结构时特别有效。神经进化技术已被证明在控制、机器人、游戏智能机器人和智能生活等许多任务中发挥良好作用。然而,由于需要优化的权值数量很大,它们通常局限于相对较小的网络。
进化与基于梯度下降的学习方式有几种结合,使得利用更大的网络成为可能。这些方法通常仍然应用于顺序决策任务,但是相关任务的梯度(例如来自后续感知输入的预测)可以用于帮助搜索 。很多工作是基于利用Baldwin效应【1】,即学习只影响选择。在计算上,也可以利用拉马克进化【2】。也就是说,将学到的权重变化编码回基因组中。然而,必须注意保持多样性,只有这样,当所有个体都在学习相似的行为时,进化才能继续创新。
相关任务的梯度(例如来自后续感知输入的预测) gradients from a related task (such as prediction of the next sensory inputs)
sensory inputs :感知输入?感觉输入?感知器输入??是来自它的预测,还是去预测他???
DNNs的进化不同于以前应用于梯度可用的监督域的工作,进化仅用于优化神经网络的设计。因此,深度神经网络进化与双层(或多层)优化技术更密切相关[40]。这个想法是用一个高级进化优化过程来优化一个低级进化优化过程的参数。
例如,考虑通过副翼、升降舵、方向舵和旋翼输入来控制直升机的问题。这是一个挑战性的基准,从2000年开始,各种强化学习方法为此被开发出来。最成功的例子之一是单层神经进化,直升机由通过遗传算法进化的神经网络控制。神经进化方法的八个参数(如变异和交叉率、概率和数量以及种群和精英规模)由人工优化。因为参数非线性地相互作用,所以很难包括更多的参数。因此,在单级神经进化方法中,很大一部分参数空间仍未被探索。然而,采用高级进化过程来优化这些参数的双层方法可以更有效地搜索这个空间。通过两层进化,优化后的参数数量可以扩展到15个,性能显著提高。在这种方式中,进化在这个示例任务中被利用来优化系统设计,而这个系统设计太复杂了,不能手动优化。
最近,以优化DNN为目标的研究开始出现。由于计算资源有限,他们专注于设计的特定部分。例如,Loshchilov等人使用CMA-ES优化了现有dnn的超参数,获得了物体识别等方面的最新结果。此外,Fernando等人研发了一个CPPN(合成模式产生网络)来输出自动编码器神经网络的权重。
然后,通过梯度下降进一步训练自动编码器,为CPPN训练形成梯度,然后通过拉马克适应将其训练的权重合并回CPPN基因组。Zoph和Le提出了一种相关的方法:通过策略迭代来修改深度网络和LSTM网络的拓扑和超参数。
在此基础上,本文提出了一种进化神经网络的系统方法。首先,将标准的NEAT神经进化方法应用于卷积神经网络的拓扑和超参数,然后将其扩展到组件的进化,获得了与CIFAR-10图像分类基准中的现有技术相当的结果。第二,在语言建模中,一个类似的方法被用来进化LSTM网络的结构,表明即使是组件中的小的创新也能对性能产生显著的影响。第三,这种方法被用来在一个在线杂志的网站上建立一个关于字幕图像的真实世界的应用程序。
3.深度学习框架的演化
NEAT神经进化方法[43] 首先扩展到 DeepNEAT中进化网络拓扑和深度神经网络的超参数,然后进一步扩展到CoDeepNEAT中的模块和蓝图的共同进化,以便将二者组合起来。该方法在标准的CIFAR-10对象识别基准中进行了测试,发现与现有技术相当。
3.1将NEAT扩展到深层网络(这一节讲了讲DeepNEAT【表一】)
DeepNEAT是标准神经网络拓扑进化方法NEAT对DNN的最直接的扩展。它遵循与NEAT相同的基本过程:首先,创建一个具有最小复杂性的染色体群体(每个染色体由一个图表示)。经过几代之后,结构(即节点和边)通过变异逐渐添加到图中。在杂交过程中,历史标记被用来确定两条染色体的基因如何排列。基于相似性度量将种群划分为物种(即亚种群)。每一个物种都随着它的适应度成比例地增长,进化在每一个物种中分别发生。
DeepNEAT与NEAT的不同之处在于,染色体上的每个节点不再代表一个神经元,而是DNN中的一层。每个节点包含一个实值和二进制值超参数表,分别通过均匀高斯分布和随机位翻转进行变异。这些超参数决定了层的类型(如卷积、全连通或递归)和该层的属性(如神经元数量、核大小和激活函数)。染色体中的边不再标注权重;相反,它们只是指出节点(层)是如何连接在一起的。要从一个DeepNEAT的染色体构建一个DNN,只需要遍历染色体图,用相应的层替换每个节点。染色体还包含一组适用于整个网络的全局超参数(如学习率、训练算法和数据预处理)。
当允许层间任意连接时,需要额外的复杂性。如果当前图层有多个父图层,则必须将父图层合并,以确保父图层的输出与当前图层的输入大小相同。通常,这种调整是通过串联或逐元素求和操作完成的。如果父层具有不匹配的输出大小,则所有父层必须向下采样到具有最小输出大小的父层。下采样的特定方法取决于问题域。例如,在图像分类中,最大池层被插入到特定的父层之后;在图像字幕中,一个完全连接的瓶颈层【3】将起到这个作用。
在适应度评估过程中,每个染色体都被转换成一个DNN。然后将网络训练一定轮数。训练后,网络的性能度量返回到DeepNEAT,并被指定为群体中相应染色体的适应度。
虽然DeepNEAT可以用来演化DNN,但最终的结构往往很复杂,而且没有原则。这与典型的DNN结构形成了鲜明的对比,演化后的结构重复使用基本构件。因此,DeepNEAT接下来将扩展到模块和蓝图的演化。
表一
步骤 | deepNEAT |
---|---|
个体(染色体) | 神经网络结构 |
个体编码 | 基于最小结点的图表示 (结点为层,边为层之间的连接关系,不含权重) + 全局超参数(学习率/训练算法/数据预处理) + 历史标记 |
最小结点 | DNN层 |
结点编码 | 二值(层类型/激活函数等类别属性) + 实值(通道数/核尺寸等数值属性) |
遗传算子 | 改变链接(图连接关系变异,增改边点) 改变结点(二值用随机位翻转,实值使用均匀高斯分布概率变异) |
适应度函数 | 一定轮数预训练后的性能度量 |
父体选择策略 | |
存活策略 | |
参数设置 | |
初始化 | 具有最小复杂性的种群 |
停止准则 |
3.2 模块和蓝图的协同进化(本文方法)
许多最成功的dnn,如GoogLeNet和ResNet,都是由重复多次的模块组成的。这些模块本身具有复杂的结构,具有不同层的分支和合并。受这一观察的启发,提出了DeepNEAT的一个变体,称为协同进化DeepNeat(CoDeepNeat)。代码背后的算法主要受分层SANE [37]的启发,但也受组件进化方法ESP [13]和CoSyNE [14]的影响。
在CoDeepNEAT中,模块和蓝图的两个群体分别进化,使用与上述DeepNEAT相同的方法。蓝图染色体是一个图表,其中每个结点包含一个指向特定模块种类的指针。此外,每个模块染色体是一个代表一个小DNN的图形。在适应度评估过程中,模块和蓝图是结合在一起的产生一个组合网络。如图1。蓝图中的每个节点都被一个从该节点指向的物种中随机选择的模块所替换。如果多个蓝图节点指向相同的模块种类,那么相同的模块将用于所有这些节点。组装网络的评估方式类似于DeepNEAT,此外组装网络的适应度被分配回蓝图和模块,即包含该蓝图或模块的所有组装网络的平均适应度。
这里的module就是很多网络结构中的block,只不过名字不同。还有一点区别,就是block可能是根据某些特定功能和性质预先设计与定义的块,而module是生长出来的可能具有不同功能与性质的块。
CoDeepNEAT可以有效地进化出可重复使用的模块化结构。此外,因为模块和蓝图的微小变化往往会导致组装的网络结构发生巨大变化,所以CoDeepNEAT可以探索比DeepNEAT更多样和更深入的体系结构。接下来介绍一个应用于CIFAR-10域的示例。
3.3 在CIFAR-10基准中演化网络(CoDeepNEAT 具体应用细节 表二)
在这个实验中,CoDeepNEAT被用来进化卷积神经网络的拓扑结构,以最大化其在CIFAR-10数据集上的分类性能,CIFAR-10数据集是一个通用的图像分类基准。数据集由50,000个训练图像和10,000个测试图像组成。图像由32x32个彩色像素组成,属于10个类别之一。作为比较,神经网络层类型仅限于Snoek等人[41]在CNN超参数的贝叶斯优化中使用的类型。跟Snoek等人同样地,数据增强包括将图像从RGB转换到HSV颜色空间,添加随机扰动、失真和裁剪,并将它们转换回RGB颜色空间。
CoDeepNEAT由25个蓝图和45个模块组成。从这两个群体中,每一代都收集了100个CNN用于适应度评估。模块染色体中的每个节点代表一个卷积层。它的超参数决定了层的各种属性,以及是否附加最大池化层或dropout layer(表1)。此外,为组合网络进化了一组全局超参数。在适应度评估过程中,50,000幅图像被分成42,500个样本的训练集和7,500个样本的验证集。由于训练一个DNN十分费时费力,每个网络在训练集上被训练了八轮。然后使用验证集来确定分类的准确性,即网络的可靠性。经过72代进化,得到了种群中最好的网络。
表二
步骤 | CoDeepNEAT-模块 | CoDeepNEAT-蓝图 |
---|---|---|
个体(染色体) | 模块 | 蓝图 |
个体编码 | DNN层的图表示 + 历史标记 + 模块全局超参数 |
模块的图表 + 历史标记 + 全局超参数 |
最小结点 | DNN层 | 模块 |
结点编码 | 二值(层类型/激活函数等类别属性) + 实值(通道数/核尺寸等数值属性) |
模块号及其指针 |
遗传算子 | 改变链接(连接关系变异,增改边点) 改变结点(二值用随机位翻转,实值使用均匀高斯分布概率变异) |
改变链接(连接关系变异,增改边点) 改变结点(改变其模块种群) |
适应度函数 | 组合网络的平均适应度 | 组合网络的平均适应度 |
父体选择策略 | 每次收集100个CNN | 每次收集100个CNN |
存活策略 | ||
参数设置 | 种群数量(45) | 种群数量(25) |
初始化 | 具有最小复杂性的种群(45) | (25) |
停止准则 |
原论文表一
结点超参数 | 范围 |
---|---|
Number of Filters | 32-256 |
Dropout Rate | 0-0.7 |
Initial Weight Scaling | 0-0.2 |
Kernel Size | 1-3 |
Max Pooling | {True, False} |
全局超参数 | 范围 |
Learning Rate | [0.0001,0.1] |
Momentum | [0.68,0.99] |
Hue Shif | [0,45] |
Saturation/Value Shif | [0,0.5] |
Saturation/Value Scale | [0,0.5] |
Cropped Image Size | [26,32] |
Spatial Scaling | [0,0.3] |
Random Horizontal Flips | {True, False} |
Variance Normalization | {True, False} |
Nesterov Accelerated Gradient | {True, False} |
进化完成后,在所有50,000个训练图像上训练300轮得到最佳网络,并测量分类误差。该误差为7.3%,与Snoek等人[41]报告的6.4%误差相当。有趣的是,因为在进化过程中只能进行有限的训练,所以代码进化出的最佳网络训练速度非常快。Snoek等人的网络需要超过30轮才能达到20%的测试误差,需要超过200轮才能收敛,而进化中最好的网络只需要12轮能达到20%的测试误差,需要大约120轮能收敛。该网络多次使用相同的模块,产生了许多成功的神经网络所具有的典型的深度和重复结构(图2)。
也就是说,预训练几轮 这种评估方式属于 训练速度导向;倾向于产生训练速度快的网络。那么如何用其他指标指导评估?比如,精度好,参数少?一项其他工作指出,给一个网络随机赋予10套参数的平均测试结果与其最终训练结果是具有一致的方向性的,也就是说在随机参数平均表现较好的网络,最终结果也往往较好。这个可以看作是一定程度的精度导向??还有参数少,往往可以同时影响模型的时空复杂度,立体式地精简模型。
从如何减少演化神经网络巨大的时间开销问题考虑,预训练是一种可行的办法。其他如权共享等方法也可以结合起来。
从结果看,演化出来的网络与手工设计的具有相似性,一方面说明人类手工设计的网络确实走在最优的路上,但是为什么依旧就说不清或者说他的可解释性依旧不完备。另一方面演化具有他的优势,在不依靠专家与先验知识的情况下,演化出的结构与最流行的结构相似。 但是貌似适应度函数/模块化的基本结构/种群的初始设定 都可以认为是领域知识的引入,那么二者再进行一个深入的结合会不会还有什么奇效。
4.LSTM结构的演变(略)
我们只需要CNN图像部分的算法。LSTM文字部分略过。
大致看了一下,说了两个点:
1.模块演化是指单个lstm存储单元的变化,蓝图演化是lstm层拼接成网络的结构演化。lstm的链接是线性结构为基础的。
2.修改后的lstm层具有跳跃链接的能力,并针对跳跃链接设计变异算子。于是针对蓝图的变异算子根据连接类型有两类:
1.启动/禁用 层间链接 2.增加/删除跳跃链接。
最后演化发现了带有跳跃链接的最优架构。
5.真实应用研究:图像理解(略)
LSTM+CNN+DNN 混着构建。
6.讨论和未来工作
本文的结果表明,进化方法优化深层神经网络是可行的:在基准任务上,其结果与手工设计的体系结构相当;并且有可能基于该方法构建现实世界的应用。必须指出的是,这种方法尚未充分发挥潜力。在最先进的GPU上训练每个深层神经网络需要几天时间,在进化过程中,需要训练成千上万个深层神经网络。因此,结果受到可用计算能力的限制。值得注意的是,由于在进化过程中只需要部分训练网络,进化偏向于发现快速学习者,而不是最佳表现者。这本身就是一个有趣的结果: 进化可以用多样的目标来指导,不仅仅是准准确率,还包括训练时间、执行时间或网络的内存需求。
在不久的将来,可能会有更多的计算资源可用。亚马逊网络服务等,基于云的服务已经以合理的成本提供了GPU计算,利用游戏中心GPU空闲周期的工作也正在进行中。例如,在 Sentient公司,一个名为DarkCycle的分布式人工智能计算系统正在建设中,该系统目前利用了世界各地的2M个 CPU和5000个GPU,其峰值性能为9pb,与世界上最快的超级计算机相当。没有多少方法可以充分利用这种能力,但深度神经网络的进化可以。可以扩展不同组件和拓扑的搜索空间,并优化更多的超参数。根据本文的结果,这种方法可能会发现优于当今手工开发的设计;这也有可能使将来将深度学习应用于更广泛的任务和应用成为可能。
7.结论
进化优化使得构建比手工更复杂的深度学习架构成为可能。架构的拓扑、组件和超参数都可以同时优化,以满足任务的要求,从而获得卓越的性能。这种自动化设计可以使深度学习在视觉、语音、语言和其他领域的新应用成为可能。目前这样的设计与最好的人类设计相当;随着计算能力的预期增长和对算力的充分利用,进化优化的设计将很快超过人工设计。
1.Baldwin效应:鲍德温效应,如果一个物体在一个变化的环境中进化,那么进化的压力会支持有学习能力的个体。即如果父代个体学到或获得某些有用的特性,那么它的后代获得同样特性的概率就会比较高,即使这些特性本身没有通过遗传性操作传给后代。
例如,某一物种受到新捕食者的威胁,但有一种行为能令捕食者很难捕杀它们,因而这物种中的单体会很快认识到,学会这种方法对它们是有利的。随着时间推移,学会这种行为的单体会越来越多。经过若干时间后,这种行为就被看成是该物种的本能。
来自百度百科https://baike.baidu.com/item/%E9%B2%8D%E5%BE%B7%E6%B8%A9%E6%95%88%E5%BA%94/16704893?fr=aladdin
2.拉马克进化:获得性遗传。在具有神经系统的动物,环境的改变先引起生活需要的改变,生活需要的改变又引起习性的改变,新习性的发生和加强,引起身体结构的变化;凡经常使用的器官会发达进化,而经常不用的器官就会萎缩退化(即用进废退),这些后天获得的性状能够遗传给后代(即获得性遗传),这样经过一代代的积累,就会形成生物的新类型。
来自百度百科 https://baike.baidu.com/item/%E6%8B%89%E9%A9%AC%E5%85%8B%E5%AD%A6%E8%AF%B4/8265713?fr=aladdin
3.瓶颈层:Bottleneck layer ,1*1的卷积层。在残差网络中,构成block的一层(一个block含两层,将维度降下来,再升回去),用于缩放卷积通道。达到减少训练参数的作用.
https://zhuanlan.zhihu.com/p/98692254
1.关于进化算法的实现细节没有完全已知。比如选择策略,是如何选取出100个cnn的,蓝图种群数目是25,蓝图的每一个结点对应种群选出的模块甚至都是一样,也就是说1对应的模块选出来的结构都是同一个,也就是说一个蓝图解码出一个网络,100是如何来的?每一代产生100个子代,还是子代父代共100个等等都没有说明。算法的参数没有给出,只给出了种群大小,其他的如变异率/交叉率都没有给出,甚至总共有多少种变异算子也没有明确说明。
2.codeepneat 有一个很重要的是, 模块是分1/2/3……不同种的,示意图中的1/2是怎么来的没有说明。最简单的情况,模块的种类数目是固定的,即给定N个初始模块种群。那么是每个种群都是45? 另一种可能的情况,总共模块是45个,根据模块相似度分亚种?这个可能是真的采取的办法。但是不论那种方法,这个N的选取挺重要。
2.0.1 回顾翻译发现: 蓝图的指针是指向物种的(模块种群中子划分)。也就是说文章方法采用的是 物种种群45,再根据相似度划分亚种(即物种)的方法。
3.蓝图和模块是分层的。蓝图之间有边,实际是模块和模块之间有链接,也就是两模块的层之间有链接。那是不是就要要求模块内必须满足一个输入一个输出的基本结构。如果不满足的话,模块与模块之间的链接就能有好多好多种情况了。
4.给出了模块中层结点的数值编码方式,和蓝图中模块的图表编码方式。但是模块中层之间的拓扑关系,蓝图中模块间的拓扑关系如何编码?显然不是一个简单的线性顺序关系。按照图结构编码会不会有点复杂,如何将结点间的拓扑关系融合到结点本身的线性编码中是个可以考虑的问题。
5.适应度函数与评价过程是个很有趣的东西。
文章指出,预训练是训练速度导向的方法。那么也可以扩展到其他有意义的数据指标作为导向,比如精度与参数数目,那这样的导向的评价又该如何完成。直接写到适应度函数里吗?那适应度函数是不是又可以看成一种目标函数了,能加正则化吗23333
预训练还是一个缩减演化时间的方法。可以找找其他策略,比如权值共享或者更换训练算法等等。
6.演化算法是不借助梯度和领域专家知识的。那么能不能考虑引入这些呢?
文中介绍了借助梯度的方法,但是没看懂23333
适应度函数也是个很好的引入专家知识的入口,就是各种导向。
可以在种群初始化中也引入先验的各种人工设计的模型,在引入块状结构的基础上再进一步。
6.0.1 回顾发现:文章中介绍的进化与梯度的结合方法是 进化 与 “基于梯度的学习方法” 的结合。也就是说 演化过程 与 网络训练过程 的一个结合。基于 鲍德温效应,学习只影响选择。可以理解为:学习的参数结果不保留,只保留学习效果决定的选择结果。基于 拉马克遗传,学习的参数被保留到基因(模块)中。但是要注意,这样会使种群学习相似的东西,即 问题8,此时要注意多样性扰动.
7.演化算法本身也是有参数的,这些参数也影响着算法结果与性能发挥。
利用演化算法演化演化算法?(禁止套娃23333)
一些参数比如种群个数,亚种的个数,都是在演化过程中逐步更改的。变异率等也可以随着形势而变动。可以考虑自适应的参数实现
8.文中提到了拉马克遗传和鲍德温效应。即要把训练好的权值写到基因里,能够遗传。就是权共享。但是没有说明codeepneat里面到底有没有用。如果使用了,那么初始化中较好的模块训练10轮,参数传给了子代。子代再被选取,就会再次训练10轮。以此类推那么在初代中只是稍微有些优势的结构会随着演化的过程逐步拥有趋于训练完成而带来的优势。会掩盖别的拥有潜力的模型。。。吧?
1.NEAT
Kenneth O. Stanley and Risto Miikkulainen. 2002. Evolving Neural Networks
Through Augmenting Topologies. Evolutionary Computation 10 (2002), 99–127.
2.deepNEAT
咦?deepNEAT没有出处,也是作者他们同时提出来的吗。。。
3.协同 的启发
David E. Moriarty and Risto Miikkulainen. 1997. Forming Neural Networks Trough Efcient and Adaptive Co-Evolution. Evolutionary Computation 5 (1997), 373–399.
Faustino Gomez and Risto Miikkulainen. 1999. Solving Non-Markovian Control Tasks with Neuroevolution. In Proceedings of the 16th International Joint Conference on Artifcial Intelligence. Morgan Kaufmann, San Francisco, 1356–1361.
Faustino Gomez, J¨ urgen Schmidhuber, and Risto Miikkulainen. 2008. Accelerated Neural Evolution Trough Cooperatively Coevolved Synapses. Journal of Machine Learning Research 9 (2008), 937–965.
4.对比试验
J. Snoek, O. Rippel, K. Swersky, R. Kiros, N. Satish, N. Sundaram, M.M.A. Patwary, M. Prabhat, and R. P. Adams. 2015. Scalable Bayesian Optimization Using Deep Neural Networks. In Proc. of ICML. 2171–2180.
1.https://blog.csdn.net/weixin_41697507/article/details/89792542
2.尚迪雅,孙华,洪振厚,曾庆亮.基于无梯度进化的神经架构搜索算法研究综述[J].计算机工程,2020,46(09):16-26.