精华内容
下载资源
问答
  • 2022-02-07 17:41:40

    1 算法原理简介

    天鹰优化器(Aquila Optimizer, AO)是一种新型智能优化算法,由Laith Abualigah等于2021年提出。该算法具有多个探索和开发策略,实验表明,与其他的元启发式算法相比,天鹰优化器算法具有明显的优越性。该算法的灵感源自北美洲Aquila鸟捕食过程中的四个群体行为:1. 通过垂直高翱翔扩大搜寻范围,在飞行中狩猎鸟类;2. 通过短滑翔攻击的轮廓飞行,在靠近地面的低水平空中攻击猎物;3.通过低空飞行和慢下降逐渐攻击猎物;4. 通过俯冲在陆地上行走和抓取猎物。

    与其他的动物园优化算法相似,天鹰优化器也是基于群体智能算法,因此在建立数学模型时,需要先随机初始化种群的位置矩阵X:

    X = [ x 1 , 1 ⋯ x 1 , j x 1 , Dim ⁡ − 1 x 1 , D i m x 2 , 1 ⋯ x 2 , j ⋯ x 2 , D i m ⋯ ⋯ x i , j ⋯ ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ x N − 1 , 1 ⋯ x N − 1 , j ⋯ x N − 1 , D i m x N , 1 ⋯ x N , j x N , D i m − 1 x N , D i m ] X=\left[\begin{array}{ccccc} x_{1,1} & \cdots & x_{1, j} & x_{1, \operatorname{Dim}-1} & x_{1, D i m} \\ x_{2,1} & \cdots & x_{2, j} & \cdots & x_{2, D i m} \\ \cdots & \cdots & x_{i, j} & \cdots & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ x_{N-1,1} & \cdots & x_{N-1, j} & \cdots & x_{N-1, D i m} \\ x_{N, 1} & \cdots & x_{N, j} & x_{N, D i m-1} & x_{N, D i m} \end{array}\right] X=x1,1x2,1xN1,1xN,1x1,jx2,jxi,jxN1,jxN,jx1,Dim1xN,Dim1x1,Dimx2,DimxN1,DimxN,Dim

    X i j = rand ⁡ × ( U B j − L B j ) + L B j , i = 1 , 2 , … . . , N j = 1 , 2 , … , Dim ⁡ X_{i j}=\operatorname{rand} \times\left(U B_{j}-L B_{j}\right)+L B_{j}, \quad i=1,2, \ldots . ., N j=1,2, \ldots, \operatorname{Dim} Xij=rand×(UBjLBj)+LBj,i=1,2,..,Nj=1,2,,Dim

    式中,N表示种群规模,Dim表示搜索空间的维度。

    1.1 扩大探索阶段

    在第一阶段中, Aquila鸟群通过垂直高翱翔扩大搜寻范围,在飞行中狩猎鸟类,该部分的数学公式为:
    X 1 ( t + 1 ) = X b e s t ( t ) × ( 1 − t T ) + ( X M ( t ) − X b e s t ( t ) ∗  rand  ) X_{1}(t+1)=X_{b e s t}(t) \times\left(1-\frac{t}{T}\right)+\left(X_{M}(t)-X_{b e s t}(t) * \text { rand }\right) X1(t+1)=Xbest(t)×(1Tt)+(XM(t)Xbest(t) rand )

    X M ( t ) = 1 N ∑ i = 1 N X i ( t ) , ∀ j = 1 , 2 , … , Dim ⁡ X_{M}(t)=\frac{1}{N} \sum_{i=1}^{N} X_{i}(t), \forall j=1,2, \ldots, \operatorname{Dim} XM(t)=N1i=1NXi(t),j=1,2,,Dim

    式中,X(t)和X(t+1)分别表示AO算法在第t次迭代和第t+1次迭代中的个体位置,Xbest(t)表示到第t次迭代为止算法获得的最佳个体为止,Xm(t)表示第t次迭代时的种群平均位置,T表示算法最大的迭代次数。

    1.2 缩小探索阶段

    在第二阶段中,当Aquila鸟群在高空中发现猎物时,鸟群会在目标猎物上方螺旋绕圈,准备着陆,然后进行攻击,数学公式为:

    X 2 ( t + 1 ) = X b e s t ( t ) × Lev ⁡ y ( D ) + X R ( t ) + ( y − x ) ∗  rand  X_{2}(t+1)=X_{b e s t}(t) \times \operatorname{Lev} y(D)+X_{R}(t)+(y-x) * \text { rand } X2(t+1)=Xbest(t)×Levy(D)+XR(t)+(yx) rand 

    式中, L e v y ( D ) Levy(D) Levy(D)表示莱维飞行分布策略,s是常数,取0.01,u和v是0到1之间的随机数,

    Levy ⁡ ( D ) = s × u × σ ∣ v ∣ 1 β \operatorname{Levy}(D)=s \times \frac{u \times \sigma}{|v|^{\frac{1}{\beta}}} Levy(D)=s×vβ1u×σ

    σ = ( Γ ( 1 + β ) × sin ⁡ e ( π β 2 ) Γ ( 1 + β 2 ) × β × 2 ( β − 1 2 ) ) \sigma=\left(\frac{\Gamma(1+\beta) \times \sin e\left(\frac{\pi \beta}{2}\right)}{\Gamma\left(\frac{1+\beta}{2}\right) \times \beta \times 2^{\left(\frac{\beta-1}{2}\right)}}\right) σ=Γ(21+β)×β×2(2β1)Γ(1+β)×sine(2πβ)

    x , y x, y x,y表示螺旋飞行的形状,
    y = r × cos ⁡ ( θ ) x = r × sin ⁡ ( θ ) r = r 1 + U × D 1 θ = − ω × D 1 + θ 1 θ 1 = 3 × π 2 \begin{gathered} y=r \times \cos (\theta) \\ x=r \times \sin (\theta) \\ r=r_{1}+U \times D_{1} \\ \theta=-\omega \times D_{1}+\theta_{1} \\ \theta 1=\frac{3 \times \pi}{2} \end{gathered} y=r×cos(θ)x=r×sin(θ)r=r1+U×D1θ=ω×D1+θ1θ1=23×π
    式中,r是搜索步长,取值范围在1到20之间,U取0.00565,ω取0.005

    1.3 扩大开发阶段

    在第三个阶段中,当Aquila鸟处于猎物区域,准备好着陆和攻击时,将采取垂直下降的方法进行初步攻击,数学公式为:
    X 3 ( t + 1 ) = ( X best  ( t ) − X M ( t ) ) × α −  rand  + ( ( U B − L B ) ×  rand  + L B ) × δ \begin{gathered} X_{3}(t+1)=\left(X_{\text {best }}(t)-X_{M}(t)\right) \times \alpha-\text { rand }+ \\ ((U B-L B) \times \text { rand }+L B) \times \delta \\ \end{gathered} X3(t+1)=(Xbest (t)XM(t))×α rand +((UBLB)× rand +LB)×δ

    式中, α 和 δ \alpha {和} \delta αδ表示开发调整参数,取较小值(0.1)

    1.4 缩小开发阶段

    在这个阶段中,Aquila鸟接近猎物,以及向猎物发起带有一定随机性的攻击,行走和抓取猎物的数学公式为:
    X 4 ( t + 1 ) = Q F × X best  ( t ) − ( G 1 × X ( t ) ×  rand  ) − G 2 ×  Levy  ( D ) +  rand  × G 1 \begin{gathered} X_{4}(t+1)=Q F \times X_{\text {best }}(t)-\left(G_{1} \times X(t) \times \text { rand }\right)-G_{2} \times \text { Levy }(D)+\\ \text { rand } \times G_{1} \end{gathered} X4(t+1)=QF×Xbest (t)(G1×X(t)× rand )G2× Levy (D)+ rand ×G1

    式中, Q F ( t ) QF(t) QF(t)表示用于平衡搜索策略的质量函数值G1表示在追踪猎物过程中AO的各种运动,G2表示线性递减的飞行斜率值,范围是[0, 2],相关参数的计算公式如下,

    Q F ( t ) = t 2 ×  rand  ( ) − 1 ( 1 − T ) 2 G 1 = 2 × rand ⁡ ( ) − 1 G 2 = 2 × ( 1 − t T ) \begin{gathered} Q F(t)=t^{\frac{2 \times \text { rand }()-1}{(1-T)^{2}}} \\ G_{1}=2 \times \operatorname{rand}()-1 \\ G_{2}=2 \times\left(1-\frac{t}{T}\right) \end{gathered} QF(t)=t(1T)22× rand ()1G1=2×rand()1G2=2×(1Tt)

    2 算法流程

    1. 初始化算法参数,包括种群规模,最大迭代次数 T T T,探索和开发参数 α 、 δ \alpha、 \delta αδ

    2. 初始化种群位置X,初始的种群适应度,最佳个体

    3. t < T t<T t<T时,AO开始循环:

    4. 扩大探索阶段,计算种群的平均位置,更新种群位置 X 1 ( t + 1 ) X_1(t+1) X1(t+1)

    5. 缩小探索阶段,更新种群位置 X 2 ( t + 1 ) X_2(t+1) X2(t+1)

    6. 扩大开发阶段,更新种群位置 X 3 ( t + 1 ) X_3(t+1) X3(t+1)

    7. 缩小开发阶段,更新种群位置 X 4 ( t + 1 ) X_4(t+1) X4(t+1)

    8. 计算更新种群的适应度,得到当前最佳个体位置和适应度

    9. 比较当前最佳个体与到第 t t t代找到的最佳个体适应度,保留较优的个体位置

    10. 判断满足算法终止条件,如果不满足,则重复执行步骤4-9

    11. 跳出循环,输出最优解和最佳适应度

    3 MATLAB代码结果

    优化目标(Sphere单峰函数):

    f ( x ) = ∑ i = 1 D x i 2 f(x)=\sum_{i=1}^{D} x_{i}^{2} f(x)=i=1Dxi2

    优化结果:

    在这里插入图片描述

    参考资料:Abualigah,L.,Yousri,D.,Elaziz,MA,Ewees,AA,A。Al-qaness,MA,Gandomi, AH,Aquila Optimizer:一种新颖的元启发式优化算法,计算机与工业工程(2021年),doi: https : //doi.org/10.1016/j.cie.2021.107250

    源代码可在Researchgate上找到: https : //www.researchgate.net/publication/350411564_Matlab_Code_of_Aquila_Optimizer_A_novel_meta-heuristic_optimization_algorithm

    如需获取笔者编写的MATLAB代码,请订阅以下CSDN专栏《最优化方法》的文章:

    2021年若干个智能优化算法简介-附MATLAB代码 文章集锦

    CSDN《最优化方法》专栏文章地址:https://blog.csdn.net/qq_45955094/category_11224070.html

    《最优化方法》专栏内包含天鹰优化器(AO),非洲秃鹫优化算法(AVOA)、蜜獾算法(HBA)、澳洲野狗优化算法(DOA)、材料生成算法(MGA)等2021年优化算法介绍和笔者编写的MATLAB代码,以及粒子群算法(PSO)、哈里斯鹰算法(HHO)、灰狼优化算法(GWO)等经典优化算法介绍与编程

    更多相关内容
  • 2020智能优化算法:平衡优化算法 文章目录2020智能优化算法:平衡优化算法1.算法背景2.算法优化原理3.实验结果4.参考文献5.Matlab代码 摘要:平衡优化(equilibrium optimizer, EO)是于2020年提出的一种全新...

    2020智能优化算法:平衡优化器算法


    摘要:平衡优化器(equilibrium optimizer, EO)是于2020年提出的一种全新的基于控制容积质量平衡物理现象启发的优化算法。具有寻优能力强,收敛速度快的特点。

    1.算法背景

    平衡优化器(equilibrium optimizer, EO) 主要是受控制容积强混合型动态质量平衡的物理启发式优化算法。质量平衡方程体现了控制容积内质量进入、离开及生成的物理过程,一般采用一阶微分方程来描述,如下:
    V d C d t = Q C e q − Q C + G (1) V\frac{dC}{dt} = QC_{eq} - QC + G \tag{1} VdtdC=QCeqQC+G(1)
    式中 V V V 为控制容积; C C C 为控制容积内的浓度; Q Q Q 为流进或流出控制容积的容量流率; C e q C_{eq} Ceq表示控制容积内部在无质量生成(即平衡状态下)时的浓度; G G G 为控制容积内部的质量生成速率。

    通过求解式(1)描述的微分方程,可求得:
    C = C e q + ( C 0 − C e q ) F + G ( 1 − F ) / λ V (2) C =C_{eq}+(C_0-C_{eq})F + G(1-F)/\lambda V \tag{2} C=Ceq+(C0Ceq)F+G(1F)/λV(2)

    F = e x p ( − λ ( t − t 0 ) ) (3) F = exp(-\lambda(t-t_0))\tag{3} F=exp(λ(tt0))(3)

    式中 F F F为指数项系数; λ \lambda λ 为流动率; C 0 C_0 C0 为控制容积在时间 t 0 t_0 t0的初始浓度。

    2.算法优化原理

    平衡优化器主要基于式(2)展开迭代寻优。对于一个优化问题,等式左边的浓度 C C C 代表新产生的当前解; C 0 C_0 C0代表上一次迭代得到的解; C e q C_{eq} Ceq 代表算法当前找到的最好的解。类似经典 PSO 算法速度更新方程,这里的浓度即代表个体的解,解的更新包括了当前最优解附近的局部搜索和寻优空间内的全局随机搜索,如图 1所示。为满足不同问题的优化需求,算法对具体的操作过程及参数设计如下:

    1. 初始化:算法在每个优化变量的上下界范围内进行随机初始化,如下:
      C i 0 = C m i n + r i ( C m a x − C m i n ) , i = 1 , 2 , . . . , n (4) C_i^0 = C_{min}+r_i(C_{max}-C_{min}),i=1,2,...,n \tag{4} Ci0=Cmin+ri(CmaxCmin),i=1,2,...,n(4)
      式中 C m i n , C m a x C_{min},C_{max} Cmin,Cmax分别为优化变量的下限和上限向量; r i r_i ri代表个体 i 的随机数向量,其维度跟优化空间维度一致,每个元素值均为 0 至 1 的随机数。

    2)平衡状态池:为提高算法的全局搜索能力,避免陷入低质量的局部最优解,式(2)中的平衡状态(即最优个体)将从 5 个当前最优的候选解里面选择(见图 1),这些候选解构成的平衡状态池如下:
    C e q , p o o l = { C e q , 1 , C e q , 2 , C e q , 3 , C e q , 4 , C e q , a v e } (5) C_{eq,pool}=\{C_{eq,1},C_{eq,2},C_{eq,3},C_{eq,4},C_{eq,ave}\} \tag{5} Ceq,pool={Ceq,1,Ceq,2,Ceq,3,Ceq,4,Ceq,ave}(5)
    式中 C e q , 1 , C e q , 2 , C e q , 3 , C e q , 4 C_{eq,1},C_{eq,2},C_{eq,3},C_{eq,4} Ceq,1,Ceq,2,Ceq,3,Ceq,4分别为截止当前迭代找到的最好的四个解; C e q , 4 C_{eq,4} Ceq,4代表这四个解的平均状态。值得注意的是,这 5 个候选解被选择的概率是一样的,均为 0.2。

    1. 指数项系数 F:为更好平衡算法的局部搜索和全局搜索,式(3)改进如下:
      F = a 1 ∗ s i g n ( r − 0.5 ) [ e − λ t − 1 ] (6) F = a_1*sign(r-0.5)[e^{-\lambda t}-1]\tag{6} F=a1sign(r0.5)[eλt1](6)
      式中 a 1 a_1 a1为全局搜索的权重常系数; s i g n sign sign 为符号函数; r , λ r,\lambda r,λ 均代表随机数向量,其维度跟优化空间维度一致,每个元素值均为 0 至 1 的随机数。

    2. 质量生成速率 G :为加强算法的局部寻优能力,生成速率设计如下:
      G = G C P ( C e q − λ C ) (7) G = G_{CP}(C_{eq}-\lambda C)\tag{7} G=GCP(CeqλC)(7)

    G C P = { 0.5 r i , i f   r 2 ≥ 0.5 0 , o t h e r w i s e (8) G_{CP}=\begin{cases} 0.5r_i,if\,r_2\geq 0.5\\ 0,otherwise \end{cases}\tag{8} GCP={0.5ri,ifr20.50,otherwise(8)

    式中 G C P G_{CP} GCP为生成速率控制参数向量; r 1 r_1 r1为随机数向量,其维度跟优化空间维度一致,每个元素值均为 0 至 1 的随机数; r 2 r_2 r2为 0 至 1 范围内的随机数。

    1. 解更新:针对优化问题来说,基于式(2),个体的解可更新如下:
      C = C e q + ( C − C e q ) F + G ( 1 − F ) / λ V (9) C = C_{eq}+(C-C_{eq})F+G(1-F)/\lambda V \tag{9} C=Ceq+(CCeq)F+G(1F)/λV(9)
      在这里插入图片描述
    图1.EO 算法优化原理示意图

    算法流程:

    Step1.初始化算法参数

    Step2.计算适应度值

    Step3.根据式(5)确定当前平衡池状态。

    Step4.根据式(6)更新指数项系数。

    Step5.根据式(7)(8)更新质量生成系数

    Step6.根据式(9)更新个体当前解

    step7.判断是否满足停止条件,如果满足则输出最终结果,否则重复Step2-Step6。

    3.实验结果

    在这里插入图片描述

    4.参考文献

    [1]杨蕾,李胜男,黄伟,张丹,杨博,张孝顺.基于平衡优化器的含高比例风光新能源电网无功优化[J/OL].电力系统及其自动化学报:1-9[2020-12-18].https://doi.org/10.19635/j.cnki.csu-epsa.000555.

    [1]Afshin Faramarzi,Mohammad Heidarinejad,Brent Stephens,Seyedali Mirjalili. Equilibrium optimizer: A novel optimization algorithm[J]. Knowledge-Based Systems,2020,191.

    5.Matlab代码

    6.Python代码

    上述代码见个人资料介绍

    展开全文
  • 在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论文中给出了常用优化的比较,今天来学习...

    深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

    在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢?

    在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下:
    https://arxiv.org/pdf/1609.04747.pdf

    本文将梳理:

    • 每个算法的梯度更新规则和缺点
    • 为了应对这个不足而提出的下一个算法
    • 超参数的一般设定值
    • 几种算法的效果比较
    • 选择哪种算法

    0.梯度下降法深入理解

    以下为个人总结,如有错误之处,各位前辈请指出。

    对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ1、θ2、θ3 ......)目标函数为损失函数L = 1/N ∑ Li (每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性,在鞍点或者局部最小值点的时候,震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。


    一.优化器算法简述

    首先来看一下梯度下降最常见的三种变形 BGD,SGD,MBGD,这三种形式的区别就是取决于我们用多少数据来计算目标函数的梯度,这样的话自然就涉及到一个 trade-off,即参数更新的准确率和运行时间。

     1.Batch Gradient Descent (BGD)

    梯度更新规则:

    BGD 采用整个训练集的数据来计算 cost function 对参数的梯度:

     

     

    缺点:

    由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。

     

    for i in range(nb_epochs):
      params_grad = evaluate_gradient(loss_function, data, params)
      params = params - learning_rate * params_grad

    我们会事先定义一个迭代次数 epoch,首先计算梯度向量 params_grad,然后沿着梯度的方向更新参数 params,learning rate 决定了我们每一步迈多大。

    Batch gradient descent 对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值。

    2.Stochastic Gradient Descent (SGD)

    梯度更新规则:

    和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。

    for i in range(nb_epochs):
      np.random.shuffle(data)
      for example in data:
        params_grad = evaluate_gradient(loss_function, example, params)
        params = params - learning_rate * params_grad

     

     看代码,可以看到区别,就是整体数据集是个循环,其中对每个样本进行一次参数更新。

     

    随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况,那么可能只用其中部分的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。缺点是SGD的噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向所以虽然训练速度快,但是准确度下降,并不是全局最优虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的。

    缺点:

    SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

    BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。

    当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

    3.Mini-Batch Gradient Descent (MBGD)

    梯度更新规则:

    MBGD 每一次利用一小批样本,即 n 个样本进行计算,这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

    和 SGD 的区别是每一次循环不是作用于每个样本,而是具有 n 个样本的批次。

    for i in range(nb_epochs):
      np.random.shuffle(data)
      for batch in get_batches(data, batch_size=50):
        params_grad = evaluate_gradient(loss_function, batch, params)
        params = params - learning_rate * params_grad

     

     超参数设定值:  n 一般取值在 50~256

    缺点:(两大缺点)

    1. 不过 Mini-batch gradient descent 不能保证很好的收敛性,learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。(有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。)对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。(会在鞍点或者局部最小点震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。
    2. SGD对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。LR会随着更新的次数逐渐变小。

    鞍点就是:一个光滑函数的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。例如这个二维图形,像个马鞍:在x-轴方向往上曲,在y-轴方向往下曲,鞍点就是(0,0)。

     

    为了应对上面的两点挑战就有了下面这些算法。


     前期知识:指数加权平均,请参看博文《什么是指数加权平均、偏差修正?》

    [应对挑战 1]

    4.Momentum

    SGD 在 ravines 的情况下容易被困住, ravines 就是曲面的一个方向比另一个方向更陡,这时 SGD 会发生震荡而迟迟不能接近极小值:

     

    梯度更新规则:

     Momentum 通过加入 γv_t−1 ,可以加速 SGD, 并且抑制震荡

     

    当我们将一个小球从山上滚下来时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。
    加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

    超参数设定值:  一般 γ 取值 0.9 左右。

    缺点:

    这种情况相当于小球从山上滚下来时是在盲目地沿着坡滚,如果它能具备一些先知,例如快要上坡时,就知道需要减速了的话,适应性会更好。

    5.Nesterov Accelerated Gradient

    梯度更新规则:

    用 θ−γv_t−1 来近似当做参数下一步会变成的值,则在计算梯度时,不是在当前位置,而是未来的位置上

     超参数设定值:  一般 γ 仍取值 0.9 左右。

    效果比较:

    蓝色是 Momentum 的过程,会先计算当前的梯度,然后在更新后的累积梯度后会有一个大的跳跃。
    而 NAG 会先在前一步的累积梯度上(brown vector)有一个大的跳跃,然后衡量一下梯度做一下修正(red vector),这种预期的更新可以避免我们走的太快。

    NAG 可以使 RNN 在很多任务上有更好的表现。

    目前为止,我们可以做到,在更新梯度时顺应 loss function 的梯度来调整速度,并且对 SGD 进行加速

    我们还希望可以根据参数的重要性而对不同的参数进行不同程度的更新。


    [应对挑战 2]

     6.Adagrad (Adaptive gradient algorithm)

     这个算法就可以对低频的参数做较大的更新对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性,例如识别 Youtube 视频里面的猫,训练 GloVe word embeddings,因为它们都是需要在低频的特征上有更大的更新。

     梯度更新规则:

     

    其中 g 为:t 时刻参数 θ_i 的梯度

    如果是普通的 SGD, 那么 θ_i 在每一时刻的梯度更新公式为:

    但这里的 learning rate η 也随 t 和 i 而变:

    其中 G_t 是个对角矩阵, (i,i) 元素就是 t 时刻参数 θ_i 的梯度平方和。

    Adagrad 的优点是减少了学习率的手动调节

    超参数设定值:一般η选取0.01

    缺点:

    它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小。

    7.Adadelta

    这个算法是对 Adagrad 的改进,

    和 Adagrad 相比,就是分母的 G 换成了过去的梯度平方的衰减平均值,指数衰减平均值

    这个分母相当于梯度的均方根 root mean squared (RMS),在数据统计分析中,将所有值平方求和,求其均值,再开平方,就得到均方根值 ,所以可以用 RMS 简写:

    其中 E 的计算公式如下,t 时刻的依赖于前一时刻的平均和当前的梯度:

    梯度更新规则:

    此外,还将学习率 η 换成了 RMS[Δθ],这样的话,我们甚至都不需要提前设定学习率了:

    超参数设定值:  γ 一般设定为 0.9

    7.RMSprop

    RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。

    RMSprop 和 Adadelta 都是为了解决 Adagrad 学习率急剧下降问题的

    梯度更新规则:

    RMSprop 与 Adadelta 的第一种形式相同:(使用的是指数加权平均,旨在消除梯度下降中的摆动,与Momentum的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率η)

     

    超参数设定值:

    Hinton 建议设定 γ 为 0.9, 学习率 η 为 0.001。

    8.Adam:Adaptive Moment Estimation

    这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum

    除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值

    如果 mt 和 vt 被初始化为 0 向量,那它们就会向 0 偏置,所以做了偏差校正,通过计算偏差校正后的 mt 和 vt 来抵消这些偏差:

    梯度更新规则:

    超参数设定值:
    建议 β1 = 0.9,β2 = 0.999,ϵ = 10e−8

    实践表明,Adam 比其他适应性学习方法效果要好。


     二.效果比较

    下面看一下几种算法在鞍点和等高线上的表现:

    SGD optimization on saddle point

    SGD optimization on saddle point

     SGD optimization on loss surface contours

    上面两种情况都可以看出,Adagrad, Adadelta, RMSprop 几乎很快就找到了正确的方向并前进,收敛速度也相当快,而其它方法要么很慢,要么走了很多弯路才找到。

    由图可知自适应学习率方法即 Adagrad, Adadelta, RMSprop, Adam 在这种情景下会更合适而且收敛性更好。


    三.如何选择优化算法

    如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。

    RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。

    Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,

    随着梯度变的稀疏,Adam 比 RMSprop 效果会好。

    整体来讲,Adam 是最好的选择

    很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点

    如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

     

     


     

    资料:
    http://sebastianruder.com/optimizing-gradient-descent/index.html#fn:24
    http://www.redcedartech.com/pdfs/Select_Optimization_Method.pdf
    https://stats.stackexchange.com/questions/55247/how-to-choose-the-right-optimization-algorithm

    作者:郭耀华
    出处:http://www.guoyaohua.com
    微信:guoyaohua167
    邮箱:guo.yaohua@foxmail.com
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    【如果你觉得本文还不错,对你的学习带来了些许帮助,请帮忙点击右下角的推荐】

    展开全文
  • 本资源包含灰狼优化算法(GWO)代码以及粒子群算法(PSO),主函数为使用灰狼优化和粒子群优化对不同函数进行寻优并将两种算法的比较结果绘图显示
  • 遗传算法优化simulink模型中的参数,实测成功 如下问题: 1.遗传算法编程的详细解释 2.目标函数怎么编写,适应度函数与目标函数的关系 3.m文件与simulink如何联合仿真 4.sim()的应用细节 5.相关报错处理 在资源中...
  • 一文搞懂RMSProp优化算法优化

    千次阅读 2020-03-26 16:01:21
    首发于机器学习算法与自然语言处理关注专栏写文章【优化算法】一文搞懂RMSProp优化算法忆臻​哈尔滨工业大学 计算机科学与技术博士在读73 人赞同了该文章在前面我们讲了AdaGrad算法,见下:忆臻:Deep Learning 最...

    https://blog.csdn.net/kyle1314608/article/details/107033436
    Deep Learning 最优化方法之AdaGrad

    而本文要介绍的RMSProp优化算法是AdaGrad算法的一种改进。
    首先给出AdaGrad算法:
    在这里插入图片描述
    再抛出原始的RMSProp算法:
    在这里插入图片描述
    可以看出RMSProp优化算法和AdaGrad算法唯一的不同,就在于累积平方梯度的求法不同。RMSProp算法不是像AdaGrad算法那样暴力直接的累加平方梯度,而是加了一个衰减系数来控制历史信息的获取多少。见下:
    在这里插入图片描述

    至于为什么加了一个系数 [公式] 之后,作用相当于加了一个衰减系数来控制历史信息的获取多少,可以参考我下面这篇文章:

    https://blog.csdn.net/kyle1314608/article/details/107033476
    通俗理解指数加权
    好,下面先给出结论【来自好友YBB的总结】:

    1.AdaGrad算法的改进。鉴于神经网络都是非凸条件下的,RMSProp在非凸条件下结果更好,改变梯度累积为指数衰减的移动平均以丢弃遥远的过去历史。

    2.经验上,RMSProp被证明有效且实用的深度学习网络优化算法。

    相比于AdaGrad的历史梯度:

    在这里插入图片描述
    RMSProp增加了一个衰减系数来控制历史信息的获取多少:
    在这里插入图片描述
    直观理解作用
    简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以经过衰减系数控制的历史梯度平方和的平方根,使得每个参数的学习率不同

    那么它起到的作用是什么呢?

    起到的效果是在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。

    下面通过例子讲解一下:

    假设我们现在采用的优化算法是最普通的梯度下降法mini-batch。它的移动方向如下面蓝色所示:
    在这里插入图片描述
    假设我们现在就只有两个参数w,b,我们从图中可以看到在b方向走的比较陡峭,这影响了优化速度。

    而我们采取AdaGrad算法之后,我们在算法中使用了累积平方梯度:
    在这里插入图片描述
    从上图可以看出在b方向上的梯度g要大于在w方向上的梯度。

    那么在下次计算更新的时候,r是作为分母出现的,越大的反而更新越小,越小的值反而更新越大,那么后面的更新则会像下面绿色线更新一样,明显就会好于蓝色更新曲线。
    在这里插入图片描述
    在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。

    这就是RMSProp优化算法的直观好处。

    展开全文
  • 本文档整理了粒子群算法的基本原理,也给出了粒子群算法的MATLAB代码,结合原理看代码,很容易看懂,可以提供给初学者使用,简单易懂,赞。
  • 用于以下元启发式的 Python 库:自适应随机搜索、蚁狮优化、算术优化算法、人工蜂群优化、人工鱼群算法、蝙蝠算法、基于生物地理学的优化、交叉熵方法、乌鸦搜索算法、布谷鸟搜索、差分进化,分散 苍蝇 优化,蜻蜓 ...
  • Matlab 多目标优化 遗传算法 源程序 很好的应用案例 基于MATLAB
  • 内含附有详细代码注释的进化算法(遗传算法、差分进化算法、免疫算法)、群智能算法(蚁群算法、粒子群算法)、禁忌搜索算法、模拟退火算法、神经网络算法的MATLAB实现。以及用以上算法进行TSP问题、背包问题、函数...
  • 文章目录1 政治2 政治优化 PO2.1 数学模型和优化算法2.2 算法具体流程3 源码 PO 是由巴基斯坦国立计算机和新兴科学大学的 Qamar Askari 等人于 2020 年提出的一种受社会启发的新型全局优化算法,灵感来源于政治的多...
  • 用matlab实现了标准粒子群算法,遗传算法,以及粒子群遗传算法的结合算法。可直接运行
  • 基于MATLAB的三目标算法优化,用NSGA-III的算法思想进行三目标算法优化的源代码,用于多目标学习算法优化
  • 本次资源是从platEMO平台上抠出的NSGA3代码(MATLAB)
  • 通俗理解 Adam 优化器

    千次阅读 2021-05-17 16:01:51
    Adam吸收了Adagrad(自适应学习率的梯度下降算法)和动量梯度下降算法的优点,既能适应稀疏梯度(即自然语言和计算机视觉问题),又能缓解梯度震荡的问题 常见优化器的详细解析请参考此文章->#深度解析# 深度学习中...
  • 详细、透彻介绍粒子群算法比较好的PPT课件,适合初学者透彻理解粒子群算法的概念、原理和流程
  • 智能优化算法一般都是建立在生物智能或物理现象基础上的随机搜索算法,又称为现代启发式算法,是一种具有全局优化性能、通用性强、且适合于并行处理的算法。这种算法一般局域严密的理论依据,而不是单纯凭借专家经验...
  • 优化算法详解

    千次阅读 2021-10-17 10:56:33
    对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化...在这篇文章中,SIGAI将对机器学习中所使用的优化算法做一个全面的总结,并理清它们直接的脉络关系,帮你从全局的高度来理解这一部分知识。 ...
  • 优化算法综述

    千次阅读 2021-06-30 21:21:03
    遗传算法(GA)、帝国竞争算法(ICA)、 粒子群优化(PSO) 局部优化 模拟退火(SA)、贪婪算法(Greedy)、 邻域搜索(NS) 是否精确算法 精确算法 线性规划(LP)、分支定界法 ...
  • 本代码主要利用MATLAB工具进行MATLAB——基于粒子群算法的PID控制器优化设计的仿真
  • 此资源是在Seyedali Mirjalili鲸鱼优化算法matlab源代码上增加详细中文注释,方便阅读和学习
  • 智能优化算法:灰狼优化算法-附代码

    万次阅读 多人点赞 2020-07-31 16:31:41
    智能算法:灰狼优化算法-附代码 摘要:受 灰 狼 群 体 捕 食 行 为 的 启 发,Mirjalili等[1]于 2014年提出了一种新型群体智能优化算法:灰狼优化算法。GWO通过模拟灰狼群体捕食行为,基于狼群群体协作的机制来达到...
  • 深度学习总结(一)各种优化算法

    万次阅读 多人点赞 2018-07-03 20:04:15
    参考博文: 码农王小呆:...深度学习最全优化方法总结: https://blog.csdn.net/u012759136/article/details/52302426 超级详细每个算法的讲解,可参考: https://blog.csdn.net/tsyccnh/articl...
  • 智能优化算法:鲸鱼优化算法-附代码

    万次阅读 多人点赞 2020-07-24 13:29:56
    智能算法:鲸鱼优化算法-附代码 文章目录智能算法:鲸鱼优化算法-附代码1.算法原理1.1包围猎物1.2 狩猎行为1.3 搜索猎物1.4 算法流程2. 算法结果:参考文献: 摘要:鲸鱼优化算法 (whale optimization algorithm,WOA...
  • 智能优化算法:海鸥优化算法-附代码

    万次阅读 多人点赞 2020-07-23 14:24:01
    2019智能算法:海鸥优化算法-附代码 摘要:本文简单介绍智能优化算法-海鸥优化算法 1.原理 海鸥是遍布全球的海鸟,海鸥种类繁多且大小和身长各不相同。 海鸥是杂食动物,吃昆虫、鱼、爬行动物、两栖动物和蚯蚓等。 ...
  • 33节点的遗传算法无功优化MATLAB程序,可以直接运行
  • 智能优化算法:基于Powell优化的鸽群优化算法

    千次阅读 多人点赞 2020-11-19 14:39:09
    智能优化算法:基于Powell优化的鸽群优化算法前言一、鸽群优化算法(Pigeon-inspired Optimization)原理二、Powell算法1. 原理2. 算法流程三、组合策略四、仿真实验五、总结六、附件 前言     &...
  • 智能优化算法:蝴蝶优化算法-附代码

    万次阅读 热门讨论 2020-08-07 09:58:08
    智能优化算法:蝴蝶优化算法-附代码 文章目录智能优化算法:蝴蝶优化算法-附代码1.算法原理2.算法流程:3.算法结果4.参考文献:5.MATLAB代码 摘要:蝴蝶优化算法 (Butterfly optimization algorithm,BOA)是由 ...
  • 群体智能优化算法

    千次阅读 2021-12-22 15:46:30
    群体智能算法有粒子群优化算法(PSO)、蚁群优化算法(ACO)、人工蜂群优化算法(ABC)、差分进化算法(DE)、引力搜索算法(GSA)、萤火虫算法(FA)、蝙蝠算法(BA)、布谷鸟优化算法(COA)、灰狼优化算法(GWO)、鲸鱼优化算法(WOA...
  • 智能优化算法:蝗虫优化算法-附代码

    千次阅读 热门讨论 2020-07-30 17:20:04
    智能算法:蝗虫优化算法-附代码 摘要:蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法,具有较高的搜索效率和较快的收敛速度,且算法本身特殊的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,058,796
精华内容 423,518
关键字:

优化器算法