转载自:https://blog.csdn.net/qq_39217470/article/details/107640778
演化策略是一种求解参数优化问题的方法,所以我先介绍一下什么是优化。
1. 优化(Optimization)
优化就是计算一个函数的最大值或者最小值的问题,下面以求解单变量的最小值为例进行介绍。
假设函数f(x)的具体表达式是未知的,把它看作一个黑盒函数,我们只能通过向盒子输入得到输出。它可能存在局部最小点和全局最小点,很显然进行坐标点穷举然后对比出最小值的方法是不可行的,这时就需要我们根据一定的策略一步步地向我们的最小值逼近,不同策略就对应着不同的优化算法。
因为,在机器学习的过程中,根据我们搭建的模型并不是一开始就能根据输入获得我们想要的结果,所以就需要对我们的模型进行优化,以使误差函数值(loss)达到最小或者适应度函数值(fitness)达到最大。优化分为黑盒优化和白盒优化。
黑盒优化:所谓的黑盒优化就是指寻找黑盒函数的全局最优化解。非形式化的来说,一个黑盒函数 F 可以理解为从 输入 X(x1,x2,x3...) 到 输出 的一个映射.但是映射关系 F 的具体表达式及梯度信息均未知,我们只能通过不断地将数据输入到黑盒函数中然后通过得到的输出值来猜测黑盒函数的结构信息。下图表示一个黑盒问题的映射关系。
1.2 黑盒优化方法
介绍超参数优化之前先介绍一下参数的概念。模型中的参数分为模型参数和超参数,模型参数就是我们的模型根据训练数据训练学习到的参数,不需要人为设定;而超参数是模型开始训练前人为设定的参数,通过不断调整超参数使模型最后的输出越来越复合我们的预期,下面三种是常见的超参数优化方法(属于黑盒优化)。
1.2.1 网格搜索(Grid Search)
以机器学习中的分类问题为例,在模型训练过程中,我们通常需要多次调整超参数以使我们的输出准确率更高,如果涉及到参数过多就需要多次的人工修改,这时我们可以采用网格搜索---也就是多参数的交叉组合,从而在所有组合中一次性找出最优超参数,比如我们有两个超参数,设定超参数x的范围(0,1),步长0.3,y的范围(0,1),步长0.3,那么两个超参数的组合方式有3*3=9种。
1.2.2 随机搜索(Random Search)
与网格搜索相比,随机搜索并未尝试所有参数值,而是从指定的分布中采样固定数量的参数设置。它的理论依据是,如果随机样本点集足够大,那么也可以找到最优的超参数,或它的近似值。通过对搜索范围的随机取样,随机搜索一般会比网格搜索要快一些,以了sklearn中的RandomizedSearchCV接口通过设定n_iter 的值来决定采样的数量。
1.3 网格搜索和随机搜索遇到的问题
1.2.3贝叶斯优化(Bayesian Optimization)
网格搜索穷举地搜索整个超参数空间,随着待优化超参数的增加计算量呈指数增长,速度非常慢。而对于随机搜索来说,进行稀疏的简单随机抽样并不会遇到该问题,但采样过少很难找到全局最优解。贝叶斯优化算法能很好地解决前两种搜索算法遇到的问题。贝叶斯优化能利用先验知识动态缩小超参数搜索空间,并且迭代次数少,速度更快。
下面简单介绍一下贝叶斯优化:
首先明确我们的目标,通过不断调整输入(超参数)来最大化目标函数值(比如对于线性回归调优时的评估函数是均方误差(fitness),我们的目标就是最大化 -1*fitness),也即我们的目标并不是使用尽可能多的数据点完全推断未知的目标函数,而是希望能求得最大化目标函数值的参数。
贝叶斯优化用于机器学习调参的主要思想是:给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道具体的函数形式),根据已知的样本点在函数上的分布(先验知识)不断地添加样本点来更新目标函数的最大值。
上图可以直观地解释贝叶斯优化。其中红色的曲线为实际的目标函数,并且我们并不知道该函数确切的表达式。所以我们希望使用高斯过程逼近该目标函数。把采样点(上图有 4 个抽样点)根据高斯过程我们能够得出绿色的置信区间,即目标曲线最有可能处于的区域。从上面的先验知识中,我们确定了第二个点(f+)为最大的样本观察值,所以下一个最大点应该要比它大或至少与之相等。因此,我们绘制出一条蓝线,并且下一个最大点应该位于这一条蓝线之上。因此,下一个采样在交叉点 f+和置信域之间,我们能假定在 f+点以下的样本是可以丢弃的,因为我们只需要搜索令目标函数取极大值的参数。所以现在我们就缩小了观察区域,我们会迭代这一过程,直到搜索到最优解。(有关网格搜索、随机搜索、贝叶斯优化的具体实例代码及函数可以跳转https://www.jianshu.com/p/5378ef009cae)
1.4 梯度优化
在高数课本中我们可以找到梯度这个概念, 梯度是一个矢量,是函数一个点上导数最大值的方向,也就是函数值在该方向上变化最快,因此只要随着梯度的方向,便能最快的到达极值点。梯度下降(gradient descent)的方法就是这么得来的。梯度下降法的基本思想可以类比为一个下山的过程:想象我们在山顶,只要我们每一步都沿着最陡的方向迈出下一步,那么我们一定可以最快到达山脚。因此,找到了梯度,我们也需要小心注意步长值,若步长值太大,我们可能一步迈出过大,错过了极值点,若步长值太小,我们到达极值点的次数会增加。
1.4.1 随机梯度下降(SAG)
在模型训练的过程中,梯度下降是常用的最小化误差函数loss的方法。一般而言,梯度下降需要在遍历所有的数据后才进行梯度计算然后更新参数。假设现有数据集有10,000条数据,那么在这10,000条数据都进行训练之后才会确定梯度,这样的计算会耗时很长。
随机梯度下降也称小批量梯度下降(mini-batch gradient decent),它解决了需要遍历所有数据才更新一次参数的问题。随机梯度下降根据每一个小批量数据进行更新参数。也就是说,10,000个数据,假设分成10个批量,每个批量是1,000个数据,那么在遍历完每个批量后,计算这个小批量的梯度然后进行更新参数,这样在遍历完10,000个多有数据后,梯度下降实际上已经进行了十次,相比于普通梯度下降而言,速度快了10倍。实验结果表明,在数据打乱情况下,随机梯度下降的每一个批量是可以很好近似整个数据集的。随机梯度下降的参数更新公示如下,gt为目标函数关于参数w的梯度:
1.4.2 SAG + Momentum
SGD最大的缺点是下降速度慢,而且可能会在沟壑的两边持续震荡,停留在一个局部最优点。为了抑制SGD的震荡,Momentum 通过保持前一步的行动势头从而加速误差函数loss的收敛过程。如果当前一步与前一步的方向保持一致,那么即将迈出的步伐就会大一些,如果方向不一致则会因为受到上一步的权值影响减小反方向的步伐,从而对传统的梯度下降产生优化。
α表示的是学习率(learning rate),也就是下山例子中的步长值,所以学习率的设置影响着优化过程,通常设为0-0.1之间。v是实际迈出的步长,w是待优化的目标函数。
1.4.3 自适应矩估计(Adam)
Adam ( adaptive moment estimation)自适应矩估计算法是目前比较流行的一种优化算法 ,于2015 年在ICLR论文 Adam: A Method for Stochastic Optimisation被提出。Adam 算法根据梯度grad的一阶动量和二阶动量动态调整步长。动量我理解为历史上每一代t 的梯度对下一步步长的影响程度。Adam算法的步骤如下:
首先定义:待优化参数: w,目标函数: f(w) ,初始学习率 α。
而后,开始进行迭代优化。对每一代 t :
1.计算目标函数关于当前参数的梯度:
2.根据历史梯度计算一阶动量和二阶动量:
3.
4.计算当前时刻的下降梯度:
5.根据下降梯度进行更新:
当优化的参数w只有一个时梯度就是函数的导数,当参数有多个时梯度就变成了了向量,上面四步所求的也均为向量。算法中的一阶动量mt就是参考的momentum防止产生震荡,最原始的二阶动量形式为,对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。但是因为Vt 是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,所以我们参考momentum关于一阶动量的公式对Vt进行修改,避免了二阶动量持续累积、防止训练过程提前结束。 第三步的目的是解决训练刚开始初始化Mt=0,Vt=0时梯度变化很小的问题。可以将第四步的
看做学习率,β1、β2为衰减参数、epos(=1e-10)为防止动量为0导致除0操作。
下面为大家介绍三种演化策略领域(ES)比较流行的黑盒优化方法:协方差矩阵自适应策略(CMA-ES)、自然进化策略(NES)、强化学习(RL-ES)。
2.演化策略(Evolution Strategy , ES)
演化策略是一种在搜索空间中寻找最优的解决方案的优化技术,属于演化算法大家庭中的一员,另外三个成员分别是遗传算法(Genetic Algorithms)、遗传编程(Genetic Programming)和演化编程(Evolution Programming),他们当中的灵感大多来自于自然界中的生物进化。
在介绍演化策略的变体之前先讲解一下ES的实现步骤:
1.生成由候选解决方案组成的种群。
2.依据适应度函数评估种群中的每一个个体。
3.筛选出适应度高的个体作为繁衍后代的父代。
4.通过重组和变异的方式产生下一代个体。
5.重复上述过程直到满足进化的终止条件(比如:达到指定迭代次数 或者找到适应度值满足要求的个体 或者种群进化不再使使适应度值变大)
这是一张演化策略与遗传算法的差异对比,截断选择就是指从当前种群个个体中将适应度值较高的前
个个体保留,其余淘汰。重组就是将选中的2或4个父体的均值作为新个体,变异一般是以选中的父体基准随机产生后代,父体与其后代符合均值为父体,某一方差的正态分布。
上图是GA的框架流程图,ES的流程图只需将GA的遗传操作部分进行替换即可
下面以求解 黑盒函数f(x)的最小值 为例介绍Basic ES:
如果对截断选择、重组、变异的原理理解不太深刻,可以参考一下外文中针对多个自变量的目标函数最小值问题(25张幻灯片,就不往这里放了)
https://www.slideshare.net/OsamaSalaheldin2/cmaes-presentation
2.1 协 方 差 矩 阵 自 适 应 进 化 策 略 (CMA-ES)
CMA-ES(Covariance Matrix Adaptation-Evolutionary Strategies)是 在 演化策略 ( Evolution Strategy,ES) 的基础上发展起来的一种高效搜索算法,它将 ES 的可靠性、全局性与自适应协方差矩阵的高引导性结合起来,对求解非凸非线性优化问题具有较强的适应性,目前以其良好的寻优性能在优化领域备受关注。并且,在对全局优化问题(与进化算法相比) 的求解中,CMA-ES 对步长的优化可以避免种群过早收敛以及在种群很大的情况下避免局部最优,并且它是一种黑盒优化算法。
2.1.1基本概念
协方差 是一种用来度量两个随机变量关系的统计量:结果>0表示两个变量正相关(比如身高越高的人往往体重越大) ,<0表示两个变量负相关, =0表示两个变量独立,方差是指变量关于其均值的偏离程度。公式如下:
均值(期望):
协方差: cov(X,Y)=cov(Y,X)
方差:D(X)=cov(X,X)=VAR(X)
协方差矩阵:两个向量(多个参数)之间的相关性统计,协方差矩阵的维度等于待优化参数的个数。假设有两个待优化参数A,B。对应协方差矩阵为C = 由方差和协方差的定义可以确定:协方差矩阵中D(X)增大会使得样本点在X轴的方向上更分散(样本点在X轴的方向被拉伸,图片中的横坐标由原来的[-3,3]变成了[-5,5]),D(Y)增大会使得样本点在Y轴的方向上更分散;cov(X,Y)大于0 会使得样本点成正相关性偏移,也即随样本点X值的增大Y值也会增大。下面是协方差矩阵各个位置变化对样本分布的影响:
通过上面的讲解,相信你对协方差矩阵各个位置的变幻 对样本点进化方向的改变有了一个初步的认识,下面再介绍一下步长(step-size):
参数σ控制分布的总体规模。它是从协方差矩阵中分离出来的,这样我们就可以比完全计算出协方差矩阵更快地改变步长。步长越大,参数更新越快,新产生的个体(样本)是在步长内进行随机选取的。
累计步长适应(cumulative step-size adaptation,CSA)是指综合考虑本代样本均值的大小和方向与历史步长的进化方向相同或者相反,决定下一代步长的变化。由下图可见,当代样本的更新方向与历史进化方向相同则会加速步长的增加,从而扩大种群的搜索范围,反之则会减小步长甚至改变进化的方向,从而使得下一代个体更加密集,更利于找到全局最优的样本点。
下面开始步入正轨,我们参考basic ES的流程来介绍CMA-ES的优化流程:
首先介绍需要初始化的参数,设待优化的参数个数为n个,则样本点x,均值m都是n维的向量,目标函数为f(x),值越小越好,最小为0:
:每一代的种群规模
:通过截断选择截取
个最优的个体作为产生下一代的父体。
C=I(协方差矩阵初始为n*n维单位阵)
m:人为猜测的一个n维初始样本均值
:人为猜测的一个n*1步长矩阵
:第i个个体所占的更新权重
1.产生新个体:通过对m进行变异产生个后代,他服从均值为m,协方差为
^2*C的多元正态分布,即从这个分布中随机取样。
等价于
2.适应度评估:根据适应度函数或者误差函数对个体进行评估,然后排序,使得f(x1)<=f(x2)<=f(x3)...<=f()
3.更新均值:通过最优的个个体更新均值,当代最优的个体所占权重最大,使均值更偏向于最优个体的方向:
4.更新步长,采用上面提到的累计步长适应策略进行更新,相应的也需要对每一代的累计步长进行更新:
是累计步长的衰减率,
=
- m,
5,更新协方差矩阵:
(1) (2)
为协方差矩阵累积路径的衰减率,
、
分别为rank-1、rank-u更新策略的学习率,
=
- m
此公式结合了rank-u-update和rank-1-update对协方差矩阵进行更新,一方面,当代种群的所有信息通过rank-u策略被充分利用,另一方面,进化过程中每代种群间的相关性信息通过rank-one的演化路径策略充分探索,前一种策略对种群规模很大时重要(考虑种群中最优的u个个体),后者对种群规模小时重要(类似于步长的更新方式,使用累计路径策略来兼顾之前的种群信息),这样在不同种群规模下的评估结果会更加准确。
6.重复上述过程直到满足进化的终止条件(比如:达到指定迭代次数 或者找到适应度值满足要求的个体 或者种群进化不再使使适应度值变大)
除了协方差矩阵C的自适应规则外,我们引入步长控制来对后代样本点更新,还有两个原因:
1.最佳步长不能用步骤5中的公式(2)很好地逼近。
2.公式(2)中协方差矩阵更新的最大可靠学习率太慢,无法实现总体步长的竞争性变化率。
2.2自然进化策略 (Natural Evolution Strategies,NES)
NES的重点是自然梯度,所以先介绍一下常规梯度(见上面1.4节介绍)与自然梯度的区别:
给定一个参数为 θ 的目标函数 J (θ),我们的目标是找到最优的 θ,从而最大化目标函数的值。
常规梯度会以当前的 θ 为起点,在很小的一段欧氏距离内找到最陡峭的方向,也就是J(θ)相对于θ的负梯度方向,而样本的分布是无规律的;
而在演化策略中,第一代种群个体的生成是在当前的分布空间(高斯分布)中进行抽样产生的,所以在NES中每一代的个体进化过程可以理解为概率分布空间的优化过程:θ的优化-->种群分布空间的变化-->在分布空间中随机采样的个体的变化
自然梯度考虑的是参数的变化引起样本分布空间的变化,比如p(xi;
)-->p(xi;
),而这一概率属性距离(无法用Euclidean distance来度量)可以用Kullback-Lubler差离度来度量,自然梯度是按KL距离度量来进行梯度下降过程的。自然梯度法采用分布空间距离约束 —> KL散度二阶泰勒级数展开—> Fisher信息矩阵近似—> 拉格朗日乘数法计算KL散度约束下的目标函数最大值—>自然梯度:
完整的自然梯度推导过程如下:
下面步入正题:
NES 也是一种黑箱式优化算法。Wirestra等人提出了将进化算法和神经网络中的梯度下降思路结合在一起的想法。传统的进化算法包含突变和重组这两个步骤。 我们通过这两个步骤, 期待找到更好的解法。 然而, 突变和重组是完全随机的,不会根据已知的数据集特征产生 进化的倾向性,所以多数情况下,他们不会产生比当前这一代更优的解法。 因此, 我们想引入梯度下降或者梯度上升的思想, 从而使得突变总是能够朝着使个体适应度更好的方向(比如误差更小的方向)迈进。换句话说, 我们用梯度下降替代了进化算子中的突变和重组步骤,官方定义 为 NES是一类利用分布参数上的估计梯度策略迭代更新搜索分布的进化策略。具体的实现步骤如图(类比遗传编程中的种群进化过程):
1. 利用参数化分布空间随机抽样产生个个体,对每一个个体求适应度函数值。
2. 沿着自然梯度执行梯度下降步骤更新分布空间参数θ。
3. 整个过程迭代进行,直到满足停止条件。
NES引入了一些新技术并解决了很多问题:(以下技术的原理推导及实验证明详见14年 Wierstra 等人发表的论文Natural Evolution Strategies)
1. 引入 自然梯度 解决 常规梯度 存在的过早收敛和尺度不变性问题。
2. 引入Fitness shaping使NES算法不受适应度保序变换的影响,增强算法的鲁棒性
3. 适应性抽样调整了在线学习率,在基准上产生了高绩效的结果
4. 指数参数化是维持正定协方差矩阵的关键
5. 自然坐标系保证了计算的可行性。
2.3强化学习( Reinforcement Learing,RL)
2.3.1基本概念
众所周知,当AlphaGO战胜了世界围棋冠军李世石之后,整个工业界都为之振奋,而AlphaGO背后的技术原理正是强化学习。现如今强化学习因其普适性在越来越多的领域得到了应用。
首先我们来看一下强化学习所属的分支,如图所示:
RL与有监督学习、无监督学习的比较:
(1)有监督的学习是从一个已经给出正确结果的训练集中进行学习,训练集中每一个样本的特征可以视为是对该situation的描述,而其label可以视为是应该执行的正确的action,但是有监督的学习不能学习交互的情景,因为在交互的问题中获得期望行为的样例是非常不实际的,agent只能从自己的经历(experience)中进行学习,而experience中采取的行为并不一定是最优的。这时利用RL就非常合适,因为RL不是利用正确的行为来指导,而是利用已有的训练信息来对行为进行评价。
(2)因为RL利用的并不是采取正确行动的experience,从这一点来看和无监督的学习确实有点像,但是还是不一样的,无监督的学习的目的可以说是从一堆未标记样本中发现隐藏的结构,而RL的目的是最大化reward signal。
(3)总的来说,RL与其他机器学习算法不同的地方在于:其中没有监督者,只有一个reward信号;反馈是延迟的,不是立即生成的;时间对于RL具有重要的意义;agent的行为会影响之后一系列的data。这三种不同训练方式的核心区别在于loss的设计,三者可以用于同一task,就像黑猫白猫,能抓耗子的都是好猫。具体选择哪一种工具要看哪一种模型会使最终的loss最小或者fitness 达到最优。
强化学习 是一种通过交互的目标导向学习方法,旨在找到连续时间序列的最优策略。
这个定义比较抽象,举个栗子方便大家理解:在你面前有两条路,但是只有一条路到达目的地,有个前提条件是你不知道目的地在它们当中的哪个方向。是不是感觉很抓瞎,但是如果给你个机会,让你在两个不同方向都去尝试一下,你是不是就知道哪一个方向是正确的。
强化学习的一个核心点就是要尝试,因为只有尝试了之后,它才能发现哪些行为会导致奖励的最大化,而当前的行为可能不仅仅会影响即时奖励,还会影响下一步的奖励以及后续的所有奖励。因为一个目标的实现,是由一步一步的行为串联实现的。在上面的场景当中,涉及到了强化学习的几个主要因素:智能体、环境、状态、动作、奖励、策略。
智能体(Agent):强化学习的本体,作为学习者或者决策者,上述场景是指我们自己。
环境(Environment):强化学习智能体以外的一切,主要由状态集合组成。
状态(State):一个表示环境的数据,状态集则是环境中所有可能的状态。比如,走一步就会达到一个新的状态。
动作(Action):智能体可以做出的动作,动作集则是智能体可以做出的所有动作。比如,你可以走第一条路也可以走第二条。
奖励(Reward):智能体在执行一个动作后,获得的正/负反馈信号,奖励集则是智能体可以获得的所有反馈信息。走正确就奖励,错误就惩罚。
策略(Policy):策略就是指智能体的行为,是从状态到动作的映射,即智能体如何选择动作的思考过程,分为确定策略和与随机策略,确定策略就是某一状态下的确定动作a=π(s), 随机策略以概率来描述,即某一状态下执行这一动作的概率π(a|s)=P[At=a|St=s]。
RL 的具体步骤为:
1. 智能体尝试执行了某个动作后,环境将会转换到一个新的状态,当然,对于这个新的状态,环境会给出奖励或者惩罚。
2. 智能体根据新的状态和环境反馈的奖励或惩罚,执行新的动作,如此反复,直至到达目标。
3. 智能体根据奖励最大值找到到达目标的最佳策略,然后根据这个策略到达目标。
下图列出了各元素之间的作用关系。要注意的是,智能体要尝试执行所有可能的动作,到达目标,最终会有所有可能动作对应所有可能状态的一张映射表(Q-table)
2.3.2涉及到的公式
强化学习基本上可以总结为通过最大化reward来得到一个最优策略。但是如果只是瞬时reward最大会导致每次都只会从动作空间选择reward最大的那个动作,这样就变成了最简单的贪心策略(Greedy policy),所以为了使reward是包括未来的当前reward值最大(即使从当前时刻开始一直到状态达到目标的总reward最大),构造了值函数(value function)来描述这一变量。表达式如下:
t表示当前时刻,R是reward,S是状态,γ是折扣系数(取值在[0,1]),折扣系数与我们的认知是一致的,就是在衡量权重时我们更看重时间距离更近时的Reward影响。
强化学习的算法迭代都是基于Bellman方程
具体的公式推导过程详见 https://blog.csdn.net/trillion_power/article/details/70992333
本模块只是对强化学习的基本原理进行介绍,读者若想深入理解RL及其应用,可以参考https://blog.csdn.net/gsww404/article/details/79763003
本文参考的文献:
优化: https://zhuanlan.zhihu.com/p/66312442
https://blog.csdn.net/sinat_14821787/article/details/79562611
https://blog.csdn.net/fangqingan_java/article/details/48946903
https://www.jianshu.com/p/5378ef009cae
https://www.sohu.com/a/165565029_465975
CMA-ES: https://www.slideshare.net/OsamaSalaheldin2/cmaes-presentation
https://blog.csdn.net/xiao_lxl/article/details/72730000
https://blog.csdn.net/Mr_HHH/article/details/78490576
https://blog.csdn.net/qq_40019838/article/details/99882885
16年 Nikolaus Hansen发表的 The CMA Evolution Strategy: A Tutorial
NES: 14年Wierstra 发表的 Natural Evolution Strategies
https://www.zhihu.com/question/21923317
强化学习: https://www.cnblogs.com/further-further-further/p/10789375.html
https://blog.csdn.net/trillion_power/article/details/70992333
https://blog.csdn.net/gsww404/article/details/79763003
-------ME
关于协方差矩阵:
https://zhuanlan.zhihu.com/p/37609917
理解多维正态分布公式中的协方差矩阵的如何推导的例子:
https://www.cnblogs.com/jermmyhsu/p/8251013.html
人脸Yinpeng Dong Paper
https://blog.csdn.net/c9yv2cf9i06k2a9e/article/details/103342334