能够实现快速和灵活实验的工具使机器学习研究大众化和加速。雷竞技是骗人的以自动分化库的开发为例,如Theano,咖啡,TensorFlow,PyTorch:这些库在催化机器学习研究方面发挥了重要作用,使梯度下降训练无需手工计算导数的繁琐工作。雷竞技是骗人的在这些框架,它的简单实验通过调整神经网络的规模和深度,通过改变误差函数进行优化,甚至通过发明新的建筑元素,如层和激活函数,而不必担心如何推导结果改善的梯度。
到目前为止,一个尚未受到自动分化工具影响的领域是进化计算。原因是大多数进化算法都是非常宽:它们不遵循任何明确的数学梯度(即数学上最优的改进局部方向),而是通过生成-测试启发式进行。换句话说,他们创造新的变体,测试它们,并保留最好的。
然而,最近关于深度强化学习的进化算法的令雷竞技是骗人的人兴奋的研究强调了一类特定的进化算法是如何从自动分化中获益的。从OpenAI工作证明了一种形式的自然演变策略(NES)是大规模可扩展的,与现代化的深度加强学习算法竞争。后续工作超级人工智能专注于突出NE的基本属性(例如,如何它有关对传统的梯度下降),添加基于创新的探索,以提高网元的性能,利用NES创建可扩展的开放式进化算法。生态系统与传统的进化方法不同,因为每一代生态系统的进化都寻求遵循一个明确的数学梯度。
为了更容易地建立类似nes的算法原型,优步人工智能研究人员建立了雷竞技是骗人的EvoGrad是一个Python库,使研究人员能够区分雷竞技是骗人的随机变量的期望(和嵌套的期望),这是估计NES梯度的关键。这个想法是为了能够更快地探索NE的变种,类似于Tensorflow如何实现深度学习研究。雷竞技是骗人的我们相信这静脉中有许多有趣的算法尚未发现,我们希望该图书馆有助于促进机器学习界的进展。除了Evograd之外,这个博客帖子还宣布雷竞技到底好不好用进化es.这是一种新的基于nes的元学习算法,由优步人工智能研究人员开发,促成了EvoGrad的诞生。雷竞技是骗人的
自然进化策略
在描述NE之前,审查进化算法通常如何工作是有用的。传统的进化算法主题A.人口(一种并行探索的潜在解决方案的进化集合)到一种启发式的适者生存竞争。得分较高的人适应度函数(目标函数引导搜索)给予更多后代在下一代中(轻微的自我复制或自我与其他个体的组合)。相比之下,得分较低的个体被从人群中剔除。
NES对演进施加了正式的概率结构。NES将人口摘要作为一个有限的人口,而不是将人口视为一个人口概率分布搜索空间,通常是一个围绕单一参数集的高斯分布。然后可以从这个分布中对个体进行抽样(实际上是通过在种群中心添加高斯扰动)并进行评估。这种观点认为,一个种群就像是一个概率云,这反映了一种直觉,即在任何进化种群中,产生一些新个体的可能性大于产生其他个体的可能性(例如,突变可能更有可能改变你眼睛的颜色,而不是赋予你翅膀)。NES的目标是迭代更新种群分布,使从种群中提取的个体的平均适应度最大化- - - - - -换句话说,继续将人口云移动到更环保的牧场(可视化这里)。
结果证明,这个云改善目标函数可以被区分,因为种群分布是平滑的,而离散个体集合则不是。结果是一个数学公式的显式梯度改进,一个可以估计的通过评估来自人群的样本;毫不奇怪,采样更多个体产生更好的梯度估计。这可以被视为集成来自所有样本的信息来决定移动人口云的最佳方向,这有点像一个相结合所有个人的交配操作。令人兴奋的好处是,通过足够的样本,算法保证以类似的方式梯度遵循与随机梯度血统(我们从深度学习的研究中知道是一个强大的工具),雷竞技是骗人的即使问题进化正在解决,也可能是不可分辨差异的!
重要的是,象征性的形式的梯度估计必须分别表示人口分布的不同的选择(例如,与固定方差高斯,高斯和协方差,柯西,或混合模型,仅举几例选项)和优化度量的人口是什么(例如,平均健身,最大的健身,或表达行为的多样性如在进化的状态,我们在这篇文章后面描述了它。手动执行这种衍生可能是乏味的并且需要特定的数学知识,这减缓了NES研究的速度。雷竞技是骗人的
介绍evograd库
在这个项目中,我们创建了一个简单的Python库EvoGrad用于原型化NES样算法,使用PyTorch作为一个后端。EvoGrad提供的主要特性是区分的能力随机变量的期望(和嵌套的期望,扩展工作由其他人上随机计算图),这是估算NES梯度的关键(因为NES的目标是最大化预期整个人口分布的适合度)。
我们在开发新形式的NES时创建了这个库可发展性西文这是为了进化出能够最大限度地展现多样化行为的种群。这种观点认为,这样的种群可能是进化适应性的宝库,随时可以适应新的环境。这种模型在元学习,一个越来越多的机器学习的子场,专注于学习如何学习。在下一节中,我们将通过一组EvoGrad示例来介绍这种可进化的ES算法。
一个简单的例子:实现网元
作为第一个示例,我们将实现简化的NES算法Salimans等人(2017)在evograd。Evograd提供了几种可用于期望功能的概率分布。我们将使用正常分布,因为它是实践中最常见的选择。
让我们考虑在一个简单的一维搜索空间中寻找适应度峰值的问题。
我们可以用下面的Python代码来定义这个搜索空间的总体分布,以1.0为中心,固定的方差为0.05:
mu = torch.tensor(1.0, requires_grad=True)
p =正常(mu,0.05)
接下来,让我们定义一个简单的健身功能,即奖励个人用于在搜索空间中接近位置5.0:
def健身(x):
返回-(x - 5.0) ** 2
NE中的每一代进化都从人口分布中取样,并评估每个样本的每个样品的适应性。在这里,我们可以从分布中查阅和评估100个人:
Sample = P.Sample(n = 100)
健身=健身(样本)
或者,我们可以应用美白的转换到适应度(一种经常提高NES性能的预处理形式),像这样:
fitses = (fitses - mean()) / fitses .std()
现在我们可以使用这些计算的健身值来估计对我们人口分布的平均健身:
均值=期望(适应度,样本,p=p)
虽然我们可以直接用代码片段估计平均值:意味着= fitnesses.mean (),我们利用的是使用evograd的期待功能就是backpropagate通过吝啬的。然后,我们可以使用产生的自分化梯度来优化一维高斯总体分布的中心(μ),通过梯度下降(这里,增加种群的预期适应度值):
mean.backward ()
与torch.no_grad ():
+= * Mu。grad
mu.grad.zero_()
另一个例子:最大化人口中行为的方差
作为一个更复杂的例子,比起最大化平均适合度,我们可以最大化方差的行为在人口。而健康是衡量质量对于一个固定的任务,在某些情况下,我们希望为未知做准备,而是可能希望我们的人口包含多样性的行为,这些行为可以很容易地调整以解决广泛的未来未来任务。
要做到这一点,我们需要一个量化的行为,我们可以称之为行为表征。类似于如何评估单个参数向量来自人口分布建立其健身(如多远这个控制器使机器人走路?),你可以评估这样的平局并返回一些量化的行为(例如,什么位置这个神经网络移动机器人控制的?)。
凭借这种行为的想法,我们可以寻找所产生的人口分布的人口参数空间中的观点,其中包含最广泛的行为多样性。这是EvoGrad的自动分量能力更容易实现的旨在的旨在。
对于这个例子,让我们选择一个简单但具有说明性的一维行为表征,即两个正弦波的乘积(一个频率比另一个快得多):
def行为(x):
返回5 *火炬。sin(0.2 * x) *火炬。sin (20 * x)
现在,我们可以计算一个反映抽样行为多样性的统计数据,而不是估计平均适应度。一个分布的方差是多样性的一个度量,而演化性ES的一个变体度量并优化了从种群分布中取样的行为的方差:
Sample = P.Sample(n = 100)
行为=行为(样本)
Zscore = (behaviors - behaviors.mean()) / behaviors.std()
方差=期望(Zscore ** 2,样本,p = p)
这方差变量可以在优化期间使用,就像以前一样。下面的动画显示了这种优化的进展,它正确地揭示了最可进化的行为。
最后一个例子:最大化熵的行为
在前面的示例中,梯度将通过手计算相对简单。但是,有时我们可能需要最大化其衍生品更具挑战性的目标。特别是,这个最后的例子将寻求最大化熵行为分布(一种不断变化的变体ES)。我们认为熵是更具原则的多样性衡量标准,因为熵通过均匀覆盖所有可能的行为而最大化。
为了创建熵的可微估计,我们首先计算不同行为之间的成对距离。接下来,我们通过拟合a来创建一个平滑的概率分布核密度估计:
dists = scipy.spatial.distance.squareform(scipy.spatial.distance.pdist(行为,“sqeuclidean”))
内核= torch.tensor (scipy。Exp (-dist / k_sigma ** 2), dtype=torch.float32)
P_x =期望(kernel, sample, p=p, dim=1)
然后,我们可以使用这些概率来估计分布的熵,然后像之前一样在上面运行梯度下降:
熵=期望(-torch.log(P_X),样本,p = p)
如果您不了解熵计算的具体细节,那么最重要的一点是,EvoGrad能够通过整个过程进行区分,从而更容易地探索新算法。软件包和这个演示代码可以在我们的github存储库。
可进化的ES:可进化种群的可扩展的一代
作为这个库的补充,我们发布了一个纸,在GECCO学术会议,描述可发展性西文,这项工作激励我们创建EvoGrad库。进化计算(受生物进化启发的算法研究)的一个长期目标是创建生成算法不可溶解解决方案(换句话说,能够迅速适应新挑战的解决方案)。
动物物种具有令人印象深刻的进化适应能力。以狗的多样性为例,人类在相对较短的时间内就从狼繁殖了下来。我们希望我们的机器学习算法能够产生同样的自适应能力,一方面是因为从头开始训练新解决方案的成本很高,另一方面是因为现实世界的任务经常会随着时间的推移而变化。然而,虽然这种可进化性在自然进化中很常见,但对于像NES这样的进化算法来说,产生它仍然是一个挑战。
尽管那里是其他有趣的方法为了生成ES是一种新的、高效的、可扩展的直接优化演化能力的算法。其主要思想是应用改良版的NES(如上面最后两个例子所详述),使单个进化种群的行为多样性最大化。实际上,演化性ES寻找搜索空间中高度可演化的部分,在那里中心参数向量的轻微扰动会给出高度不同的行为(可以被视为流行的进化适应MAML元学习算法查查我们的论文有关这一点的进一步讨论)。由此产生的算法易于并行化和优势,从以下几个最大化的近似梯度之后。Evograd由于通过期望实现了图书馆的预期而自动差异,evograd是一体的,因为可以通过图书馆实现(因为它使我们迅速测试这里和许多其他人的想法)。
在我们的研究论文中详述的一个实验中,进化性ES为一个模拟的四足机器人雷竞技是骗人的进化了一群神经网络控制器,这些控制器编码了不同的行走行为。NES通常会发现一个单一的高性能行为,而进化性ES则会发现一个曲目在所有不同方向上有效地走路的行为,都是通过扰乱一个中央参数矢量产生的!为了了解这在实践中的样子,下面的视频显示了通过扰乱相同参数向量产生的两个行为。
此外,下面的动画展示了经过几代进化,种群在进化能力ES中表现出的行为(即中心参数向量的扰动)如何更好地适应不同方向的行走任务:
一个有趣的事实这些结果突出显示了深度神经网络的参数空间的高度不可溶解的区域,其中小随机的参数的扰动导致高度不同,但适应良好的行为(这里,在许多方向上行走的行为)。这种回声(实际上有效地走了一个超越)与MAML的类似激励,发现参数向量,可以通过梯度下降的附加步骤来快速适应新任务。
我们相信这是一个令人兴奋的(和意外)的结果,未来通过evograd和其他图书馆的进一步努力进一步探索更多复杂的多模态种群分布和组合更多的富有表现力的基因编码。
前进
除了驱动EvoGrad的可演化ES算法,我们相信还有许多其他类似nes的算法有待通过这个包创建和探索。特别有趣的是混合动力车的新经济学院(或其他进化算法)和标准的基于梯度的搜索,它可以利用进化的灵活性(例如处理不可微的问题域)和确定性梯度的效率。
Evograd源代码仅在非商业许可证下共享,以进行研究目的。雷竞技是骗人的
这项工作是由Alex Gajewski领导的,他是AI实验室的一名本科生暑期研究实习生。雷竞技是骗人的如果从事这样的机器学习研究让你感到兴奋,雷竞技是骗人的了解更多关于我们的实习项目。






