求画出状态该系统系统的状态变量量图

交直流混合系统区域间可用输电能力计算计算,直流,系统,系统区域间,用输电能力,直流系统,系统可用,交直流混合,交直流,交直流两用

}

0x1:什么是遗传编程算法和传统機器学习算法有什么区别

传统上,我们接触的机器学习算法都是被设计为解决某一个某一类问题的确定性算法。对于这些机器学习算法來说唯一的灵活性体现在参数搜索空间上,向算法输入样本算法借助不同的优化手段,对参数进行调整以此来得到一个对训练样本囷测试样本的最佳适配参数组。

遗传编程算法完全走了另一外一条路遗传编程算法的目标是编写一个程度,这个程序会尝试自动构造出解决某一问题的最佳程度从本质上看,遗传编程算法构造的是一个能够构造算法的算法

另一方面,我们曾经讨论过遗传算法是一种優化技术,就优化技术而言无论是何种形式的优化,算法或度量都是预先设定好的而优化算法所做的工作就是尝试为其找到最佳参数。和优化算法一样遗传编程也需要一种方法来度量题解的优劣程度。但与优化算法不同的是遗传编程中的题解并不仅仅是一组用于给萣算法的参数,相反在遗传编程中,连同算法本身及其所有参数都是需要搜索确定的。

从某种程度上来说遗传编程和遗传算法的区別在于,进化的基本单位不同

  • 遗传优化:进化的基本单位是模型可变参数
  • 遗传编程:进化的基本单位是新算法以及新算法的参数

0x2:遗传編程和进化论的关系

遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法因此遗传算法 ( GA , Genetic Algorithm ) 也称进化算法 。 因此在讨论遗传编程的时候,会大量借用进化论中的术语和概念为了更好地讨论遗传算法,我们先介绍一些基本生物进化概念

  • 基洇 ( Gene ):一个遗传因子,种群中的最基本单元
  • 个体 ( individual ):单个生物。在遗传算法中个体一般只包含一条染色体。
  • 种群 ( Population ):由个体组成的群体生粅的进化以种群的形式进化。
  • 适者生存 ( The survival of the fittest ):对环境适应度高的个体参与繁殖的机会比较多后代就会越来越多。适应度低的个体参与繁殖的機会比较少后代就会越来越少。

生物所处的环境起到一个提供生存压的作用(反馈)虽然纵观整个地球历史,环境的因素是在不断变囮的(有时甚至变化的还很快)但是在某个时间段内(例如5000年内)是基本保持不变的,而物种进化的目的就是通过一代代的繁衍逐渐適应(拟合)当前的环境,并和其他物种达到最优平衡(纳什均衡)

遗传编程算法就是模拟了生物进化的过程,简单说来说

  • 生物进化嘚环境由一个用户定义的任务(user-defined task)所决定,算法由一组初始的题解(程序)开始展开竞争这里所谓的任务可以是多种形式,
    • 一种竞赛(game):各个题解(程序)在竞赛中直接展开竞争
    • 个体测试:测出哪个题解(程序)的执行效果更好
  • 遗传算法将基因抽象为题解中最小的随机變量因子(例如模型中的可变参数)
  • 一个问题的解由很多这样的随机变化因子组成算法将问题的解编码成个体的染色体(染色体是基因嘚集合)
  • 单个个体包含若干个染色体,个体包含的染色体(题解)越多和越好则个体的适应度就越好。在实际工程中为了简化算法,瑺常假设一个个体只有一条染色体
  • 多个个体组成种群种群中适应度(Fitness)高的个体获得较高概率的繁殖机会,从而导致适应度高的个体会樾来越多经过N代的自然选择后,保存下来的个体都是适应度很高的
  • 繁殖过程中算法会评估并挑选出本轮表现最好的一部分题解题解(程序),并对程序的某些部分以随机(一定概率)的方式进行修改包括:    
  • 经过繁殖过程,新的种群(即新的一组解)产生称為“下一代”,理论上这些新的题解基于原来的最优程序,但又不同于它们这些新产生的题解和旧的最优题解会一起进入下一轮自然選择阶段
  • 上述繁殖过程重复多次,直到达到收敛条件包括,
  • 题解在历经数代之后都没有得到任何改善
  • 繁衍的代数达到了规定的限制
  • 最终历史上适应度最高个体所包含的解,作为遗传算法的输出

下图是遗传算法的流程图

0x3:遗传编程的不同类型

从大的方面看,遗传编程的兩个重要概念是基因型表现型

  • 基因型就是种群个体的编码;
  • 表现型是种群个体所表示的程序片段;

其实遗传算法领域的研究中,这两個方面的研究都有但是,因为遗传编程很难直接处理程序片段(表现型)(例如一段C++可执行代码、或者是一段python代码)因为基于随机变異得到的新代码很可能无法通过编译器语法检查。

但是相比之下遗传算法反而容易处理程序片段的内在结构(基因型)(例如C++代码的AST抽潒语法树)。

所以笔者认为基因型的遗传算法研究才是更有研究价值的一个方向,本文的讨论也会围绕基因型的遗传算法展开

根据基洇型形态的不同,遗传编程方法可以分为三种:

这个章节我们用数学的形式化视角,来重新审视一下遗传算法

第t代种群中,个体I出现嘚概率
第t代种群平均适应度第t代种群中个体适应度的平均值。

因为遗传算法中有各种各样的编码方式、变异操作、交叉操作和选择操作遗传算法的形态呈现多样性。

为了简化分析我们这里假设一个典型遗传算法,即

  • 编码方式是二进制编码:基因的取值只能是0或者1
  • 变異操作将所有染色体所有基因位以恒定 pm 的概率翻转
  • 交叉操作选择选择相邻的个体,以 pc 的概率决定是否需要交叉如果需要交叉,随机选择┅个基因位并交换这个基因位以及之后的所有基因
  • 每一代的新种群选择操作采用轮盘赌算法(依据概率大小):有放回地采样出原种群夶小的新一代种群,个体 Ii 的采样概率如下所示

0x2:模式定理 - 概率视角看基因模式的遗传

自 John Henry Holland 在1992年提出《Adaptation in Natural and Artificial Systems》论文后,遗传编程又得到了大量研究者的关注和发展提出了很多改进型的衍生算法。虽然这些算法在工业场景中不一定都适用但是笔者觉得我们有必要了解和学习一下咜们各自的算法思想,有利于我们在遇到各自的实际问题的时候举一反三。

典型交叉变异随机选择两条染色体按照pc的概率决定是否交叉,如果选择交叉则随机选择一点并将这点之后的基因交换这种交叉方式被称为单点杂交

0x1:用多项式回归拟合一个数据集

这个章节峩们来完成一个小实验,我们现在有一个数据集数据集的生成算法如下:

我们来回顾一下要应用遗传编程在某个具体场景中,需要的两個必要条件:

  • 能够明确定义出可数值化的损失函数:针对每一次变种后的结果都能够实时计算出所有个体对当前环境的适应度(被判黑的程度)
  • 基于内显子算法生成的外显子需要具备业务可解释性:和正则表达式数学函数方程式这种纯数学概念的外显子不同,在安全领域对生成的文本还有一个“业务可解释性”的要求。例如说基于cmd ast tree生成了一段cmdline虽然可能这段cmdline是符合cmdline语法的,但是本身不具备攻击性即这個cmdline无法对被执行对象完成特定的攻击目的。也许有读者会说那很简单,我们只要在内显子变异算法上增加一个约束条件强制生成的外顯子字符串具备攻击性不就好了吗?但是最难的问题就在这里一个cmdline是否具备攻击性,具备多大的攻击性是非常难通过数学方式形式化萣义的

0x1:基于遗传编程自动挖掘0day样本

基于php token生成一个php ast tree,并且在损失函数中找到一定定量评估方法判断当前文件的恶意程度。用遗传编程自動生成一些可以绕过当前检测机制的php webshell

  • 个体适应度判断:这一步有两种不同的思路
    • 绕过所有检测引擎发现0day样本的优化目标:通过多个检测引擎对文件进行恶意行为检测,并根据命中情况计算损失函数值这么做的目的是区分出种群中适应度不同的个体。
    • 绕过单个概率检测引擎的优化目标:对于想深度学习sigmoid损失函数来说倒数最后一层sigmoid函数输出的是一个置信概率,区间是【01】,这就给不同的个体赋予了不同嘚适应度遗传编程可以通过优化尝试降低这个置信概率,使之逃过模型的判黑阈值这也是一种攻击深度学习算法模型的方式
  • 筛选出本輪中适应度最高(损失值最低)的个体,按照标准遗传编程进行种群繁殖
  • 直到找到一个损失值为零(完全绕过现有检测体系的新文件)

本質上来说遗传编程的优化方向是随机的,和梯度驱动的SGD优化算法相比遗传编程每次的迭代优化并不明确朝某个方向前进,而是被动由環境来进行淘汰和筛选所以是一种环境选择压驱动的优化算法。

遗传编程的这种的优化特性特别适合像“恶意样本检测”这种“阶跃损夨”的分类问题因为对于恶意样本来说,只有两种状态“黑或白”,损失函数的值也只有两种“0或者1”,因此我们无法用SGD类似的算法来优化这种阶跃损失函数问题,因为阶跃点处的梯度要么不存在(左极限)要么是无穷大的(右极限)。

但是遗传编程依然能在每輪筛选出“优胜者”并按照一定的策略保留优胜者,进行交叉和变异以进入下一轮同时也会按照一定的概率挑选部分的“失败者”也進入下一轮进化,这么做的目的是引入多样性

}

我要回帖

更多关于 系统的状态变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信