进化算法、遗传编程和学习

一、说明

        进化算法是一系列搜索算法,其灵感来自自然界(达尔文主义)进化过程。所有不同家庭成员的共同点是,通过应用受自然遗传学和自然选择启发的

  •         算子,通过进化出最初
  •         随机的候选解决方案群体来解决问题,以便及时出现更合适(即更好)的问题解决方案。

        该领域的起源可以追溯到 1950 年代和 1960 年代,在过去的二十年中已经独树一帜,证明成功地解决了来自高度多样化领域的众多问题,包括(仅举几例):优化、自动编程、电子电路设计、电信、网络、金融、经济学、图像分析、信号处理、音乐和艺术。

        有趣的是,研究人员——包括我自己——发现进化算法可以以有益的方式与机器学习和深度学习相结合。稍后会详细介绍。

二、遗传算法的结构

        以下是基本的进化算法的样子:

  1. 产生最初的个体群体,后者是手头问题的候选解决方案
  2. 根据寻求解决方案的问题评估每个人的适合性
  3. 终止条件未满足时,选择
    更合适的个体进行繁殖
    重组交叉)个体 - 突变个体

    评估修改个体的适应性

让我们盘点一下进化算法的主要成分:

基因组(染色体)。进化算法本质上是基于群体的。群体中的个体被称为基因组或染色体。它可以采用多种形式,包括位串、实值向量、基于字符的编码、计算机程序等。设计适合手头问题的表示对于进化算法的成功至关重要。

健身,或健身功能。总体中候选解决方案质量的度量。正确定义此函数对于进化算法的成功也至关重要。

一代。上面 while 循环的单次迭代。

选择。进化算法选择(通常是概率上)高适应性个体为下一代贡献遗传(嗯,“遗传”)物质的运算符。

交叉。两种主要遗传算子之一,其中两个(或多个)候选溶液(亲本)以某种预定义的方式组合以形成后代。

突变。第二主要遗传算子,其中一种候选溶液被随机改变。

是时候举一个简单的例子了。让我们考虑一个由 4 个个体组成的群体,它们是长度为 10 的位串(基因组)。适应度值等于
位字符串中的 1 个数。当然,在实际应用中,种群规模和基因组长度更大。

在这种情况下,适应度计算非常简单:只需计算一个人的 1 数量。对于现实世界的问题,我们通常必须执行一些繁重的计算来获得适应度值。

初始随机总体可能如下所示(适应度值在括号中):0000011011 (4)、1110111101 (8)、0010000010 (2)、0011010000 (3)。

然后,选择可以选择作为父对:1110111101 (8) 与0011010000 (3),0000011011 (4) 与1110111101 (8)。请注意,有些人比其他人更容易被选中,而有些人可能根本没有——选择是概率性的,这取决于健康状况。适合度越高,被选为父母的概率就越高。

交叉运算符在一对父级之间交换随机块,然后是随机翻转少量位的突变运算符。

一旦我们完成了选择-交叉-突变,我们就有了新一代。在我们的例子中,它可能看起来像这样:1111010000 (5)、0010101101 (5)、0000011011 (4)、1110111111 (9)。是的,有点这个父母,有点那个父母,有点改变,瞧——一个改进的解决方案,健身 9(而以前最好的是 8)。

现在怎么办?只要继续循环几代人——选择-交叉-突变-适应——直到你得到一个足够好的解决方案。甚至可能是最佳的。

三、遗传算法编程

        现在让我们让事情变得更有趣。为什么要发展简单的位串?进化算法中的主要子领域之一称为遗传编程,它专注于使用更复杂的表示。传统上,这些是计算树,但多年来已经提出了许多其他表示。

        计算树如下所示:

        我通过遗传编程进化了这棵树,它实际上计算(递归)等效的数学表达式:x⁴ + x³ + x² + x + 1。有时进化会产生更复杂的树,例如:

四、机器学习和深度学习

        正如我和其他人在过去几年中发现的那样,进化算法的主要优势之一是它们如何“玩”机器学习和深度学习——如果使用得当的话。

        例如,在机器学习环境中,我设计了许多基于进化的分类器,它们与XGBoost,LightGBM和深度神经网络竞争。以下是全文。

        在深度学习环境中,我们使用了一种所谓的协同进化算法,其中多个种群协同进化,为深度网络进化激活函数。我们没有使用标准的ReLU,sigmoid等,而是将进化的激活函数插入深度网络,并表明它们的性能提高了。以下是全文。

        在对抗性深度学习领域,研究人员调查了深度模型对攻击的脆弱性,既试图改进模型防御,又设计新的攻击。输入图像中的微小变化,我们无法检测到,可能会导致网络出错。

        在一项工作中,我们使用进化来生成物理上合理的对抗性补丁,这些补丁是高性能的,看起来很逼真——没有使用梯度。我们使用了GAN(生成对抗网络)生成器。给定一个预训练的生成器,我们寻找一个输入潜在向量,对应于生成的图像,这会导致对象检测器出错。我们利用潜在空间的(相对)小维度,使用进化策略算法近似梯度,通过查询目标对象检测器反复更新输入潜在向量,直到发现适当的对抗补丁。

        下面见证我才华横溢的研究生拉兹·拉皮德(Raz Lapid)站在他的另一半旁边,展示进化的补丁(打印的,即物理的)如何将他隐藏在深度学习模型(没有边界框)之外。全文在这里。

欢迎您仔细阅读我的网站以获取更多详细信息和完整论文。

开始使用进化算法有多难? 好吧,我会从众多优秀的软件包之一开始。毫不掩饰地,我想推荐我发起的项目 - 以及我出色的合作者和研究生 - EC-KitY

GitHub - EC-KitY/EC-KitY:EC-KitY是一个scikit-learn兼容的Python工具包,用于执行...

EC-KitY是一个用于进行进化计算的Python工具包,它与scikit-learn兼容。目前我们有...

我们对这个项目有多个目标,因此EC-KitY是:

  • 运行进化算法的综合工具包;
  • 用蟒蛇编写;
  • 可以在有或没有scikit-learn的情况下工作,也就是说,它同时支持sklearn和非sklearn模式;
  • 设计时考虑了现代软件工程;
  • 旨在支持所有流行的进化算法范式。

您只需 3 行代码即可运行进化算法:


algo = SimpleEvolution(Subpopulation(SymbolicRegressionEvaluator()))algo.evolve()print(f'algo.execute(x=2,y=3,z=4): {algo.execute(x=2, y=3, z=4)}')

EC-KitY也与scikit-learn兼容,如以下代码片段所示:

X, y = make_regression(n_samples=100, n_features=3)terminal_set = create_terminal_set(X)algo = SimpleEvolution(Subpopulation(creators=FullCreator(terminal_set=terminal_set),evaluator=RegressionEvaluator()))regressor = SKRegressor(algo)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)regressor.fit(X_train, y_train)print('MAE on test set:', mean_absolute_error(y_test, regressor.predict(X_test)))

        让我以查尔斯·达尔文(Charles Darwin)的一句名言来结束——《物种起源》的结束语:

        这种生命观是宏伟的,它有几种力量,最初被呼吸成几种形式或一种形式;而且,虽然这个星球按照固定的万有引力定律循环,但从如此简单的开始,最美丽和最美妙的形式已经并且正在进化。摩西·西珀博士

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/110284.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之哈希表、哈希桶的实现

哈希表、哈希桶的实现 哈希概念哈希冲突哈希函数哈希冲突解决闭散列哈希表闭散列实现哈希表的结构哈希表的插入哈希表的查找哈希表的删除 开散列开散列概念哈希表的结构哈希表的插入哈希表的查找哈希表的删除 哈希概念 顺序结构以及平衡树中,元素关键码与其存储位置…

Vue自动生成二维码并可下载二维码

遇到一个需求,需要前端自行生成用户的个人名片分享二维码,并提供二维码下载功能。在网上找到很多解决方案,最终吭哧吭哧做完了,把它整理记录一下,方便后续学习使用!嘿嘿O(∩_∩)O~ 这个小东西有以下功能特点…

HomeAssistant接入天猫精灵

通过巴法云让HomeAssistant接入天猫精灵,实现天猫精灵控制小米等其他第三方智能家具设备。 原文地址:HomeAssistant接入天猫精灵 1、巴法云注册 在https://cloud.bemfa.com/user/index.html?c2 里进行注册, 注册完成后进行登录&#xff…

持安科技孙维伯:零信任理念下的实战攻防:ISC2023数字小镇演讲

近日,在ISC 2023第十一届互联网安全大会上,持安科技联合创始人孙维伯作为零信任办公安全赛道代表,亮相数字小镇New50,并发表《全方位防御:零信任理念下的实战攻防》主题演讲。 以下是本次演讲实录: 这几年…

Redis-渐进式遍历scan的使用

目录 1、为什么使用渐进式遍历? 2、scan的使用 3、渐进式遍历的缺点 4、补充知识点:redis中也区分database 1、为什么使用渐进式遍历? 前面的博客中,我们有提到使用keys *来获取所有的key,但这种办法,…

UE5学习笔记(1)——从源码开始编译安装UE5

目录 0. 前期准备1. Git bash here2. 克隆官方源码。3. 选择安装分支4. 运行Setup.bat,下载依赖文件5. 运行GenerateProjectFiles.bat生成工程文件6. 生成完成,找到UE5.sln/UE4.sln7. 大功告成 0. 前期准备 0.1 在windows的话,建议装一个Git…

HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明

一、文件-新建-新建项目 二、传统应用形态与IDE自带的模板可供选用与免安装的元服与IDE中自带模板的选择 三、以元服务,远程模拟器为例说明IDE整体结构 1区是工程目录结构,是最基本的配置与开发路径等的认知。 2区是代码开发与修改区,是开发…

Vim的基础操作

前言 本文将向您介绍关于vim的基础操作 基础操作 在讲配置之前,我们可以新建一个文件 .vimrc,并用vim打开在里面输入set nu 先给界面加上行数,然后shift ;输入wq退出 默认打开:命令模式 在命令模式中&#xff1a…

Nautilus Chain 引入 $NAUT 通证,延续 $ZBC 的价值

近日,在 Zebec 治理系统中上线了一个全新的提案,即社区投票是否推出 $NAUT 通证,以作为 Nautilus Chain 上的原生通证。该提案以 98% 以上的支持率投票通过,这意味着 Nautilus Chain 将在 Nautilus Chain 上推出 $NAUT 通证。不过…

golang for循环append的数据重复

原因,因为使用了& 需要增加一行,问题解决

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录 一、使用深度学习中的循环神经网络(RNN)或长短时记忆网络(LSTM)生成诗词二、优化:使用双向 LSTM 或 GRU 单元来更好地捕捉上下文信息三、优化:使用生成对抗网络(GAN)或其他技术…

大数据技术准备

Hbase:HBase 底层原理详解(深度好文,建议收藏) - 腾讯云开发者社区-腾讯云 Hbase架构图 同一个列族如果有多个store,那么这些store在不同的region Hbase写流程(读比写慢) MemStore Flush Hbas…