本文介绍一下机器学习和深度学习中常用的优化算法和优化器以及一些其他我知道的优化算法,部分算法我也没有搞懂,就先记录下来以后慢慢研究吧_
1梯度下降算法(Gradient Descent)
梯度下降法可以参考我另一篇文章 机器学习-线性回归 里的讲解,这里就不在重复叙述这里需要强调一下,深度学习里常用的SGD,翻译过来是随机梯度下降,但是实质是mini-batch梯度下降(mini-batch-gd),或者说是两者的结合更准确一些
SGD的优点是,算法简单,计算量小,在函数为凸函数时可以找到全局最优解所以是最常用的优化算法缺点是如果函数不是凸函数的话,很容易进入到局部最优解而无法跳出来同时SGD在选择学习率上也是比较困难的
2牛顿法
牛顿法和拟牛顿法都是求解无约束最优化问题的常用方法,其中牛顿法是迭代算法,每一步需要求解目标函数的海森矩阵的逆矩阵,计算比较复杂
牛顿法在求解方程根的思想:在二维情况下,迭代的寻找某一点x,寻找方法是随机一个初始点x_0,目标函数在该点x_0的切线与x坐标轴的交点就是下一个x点,也就是x_1不断迭代寻找x其中切线的斜率为目标函数在点x_0的导数(梯度),切必过点(x_0,f(x_0))所以迭代的方程式如图1,为了求该方程的极值点,还需要令其导数等于0,也就是又求了一次导数,所以需要用到f(x)的二阶导数
在最优化的问题中,牛顿法提供了一种求解的办法 假设任务是优化一个目标函数f, 求函数ff的极大极小问题, 可以转化为求解函数f导数等于0的问题, 这样求可以把优化问题看成方程求解问题(f的导数等于0) 剩下的问题就和牛顿法求解方程根的思想很相似了
目标函数的泰勒展开式:
化简后:
这样就得到了与图1相似的公式,这里是二维的,在多维空间上,求二阶导数就是求海森矩阵,因为是分母,所以还需要求海森矩阵的逆矩阵
牛顿法和SGD的区别:
牛顿法是二阶求导,SGD是一阶求导,所以牛顿法要收敛的更快一些SGD只考虑当前情况下梯度下降最快的方向,而牛顿法不仅考虑当前梯度下降最快,还有考虑下一步下降最快的方向
牛顿法的优点是二阶求导下降速度快,但是因为是迭代算法,每一步都需要求解海森矩阵的逆矩阵,所以计算复杂
3拟牛顿法(没搞懂,待定)
考虑到牛顿法计算海森矩阵比较麻烦,所以它使用正定矩阵来代替海森矩阵的逆矩阵,从而简化了计算过程
常用的拟牛顿法有DFP算法和BFGS算法
4共轭梯度法(Conjugate Gradient)
共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法计算海森矩阵并求逆的缺点共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一
5拉格朗日法
参考SVM里的讲解 机器学习-SVM
6动量优化法(Momentum)
动量优化法主要是在SGD的基础上,加入了历史的梯度更新信息或者说是加入了速度更新SGD虽然是很流行的优化算法,但是其学习过程很慢,因为总是以同样的步长沿着梯度下降的方向所以动量是为了加速学习的方法
其中第一行的减号部分是计算当前的梯度,第一行是根据梯度更新速度v,而α是新引进的参数,在实践中,α的一般取值为 05,09 和 099和学习率 一样,α 也会随着时间不断调整一般初始值是一个较小的值,随后会慢慢变大
7Nesterov加速梯度(NAG, Nesterov accelerated gradient)
NAG是在动量优化算法的基础上又进行了改进根据下图可以看出,Nesterov 动量和标准动量之间的区别体现在梯度计算上, Nesterov 动量中,梯度计算在施加当前速度之后因此,Nesterov 动量可以解释为往标准动量方法中添加了一个校正因子
8AdaGrad算法
AdaGrad算法,自适应优化算法的一种,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根具有代价函数最大梯度的参数相应地有个快速下降的学习率,而具有小梯度的参数在学习率上有相对较小的下降通俗一点的讲,就是根据实际情况更改学习率,比如模型快要收敛的时候,学习率步长就会小一点,防止跳出最优解
其中g是梯度,第一行的分母是计算累计梯度的平方根, 是为了防止分母为0加上的极小常数项,α是学习率
Adagrad的主要优点是不需要人为的调节学习率,它可以自动调节但是依然需要设置一个初始的全局学习率缺点是随着迭代次数增多,学习率会越来越小,最终会趋近于0
9RMSProp算法
RMSProp修改 AdaGrad 以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均AdaGrad旨在应用于凸问题时快速收敛
10AdaDelta算法
11Adam算法
Adam是Momentum和RMSprop的结合体,也就是带动量的自适应优化算法
12Nadam算法
13模拟退火算法
14蚁群算法
15遗传算法
动量是为了加快学习速度,而自适应是为了加快收敛速度,注意学习速度快不一定收敛速度就快,比如步长大学习速度快,但是很容易跳出极值点,在极值点附近波动,很难达到收敛
未完待定
参考:
《统计学习方法》 李航 著
《深度学习》 花书
531 边坡危险滑裂面研究概述
边坡稳定性分析方法中极限平衡法是工程评价和设计中最主要的也是最有效的实用分析方法,并为国家规范所采用。但是极限平衡法的最大困难在于很难找出对应于最小稳定性系数的临界滑动面(朱大勇,1997)。通常确定边坡最小稳定性系数包括两个步骤,首先对边坡体内某一滑裂面按一定计算方法确定其稳定性系数,然后在所有可能的滑裂面中找出安全系数最小的临界滑裂面,如果滑裂面曲线为函数y(x),则问题具体化为泛函F=F(y)的极值(陈祖煜,2003)。由于岩土边坡的几何形状各异,材料具有非均质性,纯解析的变分原理很难进行极值计算。
近几十年来,众多学者开展了基于最优化方法的稳定性系数极值的计算研究,具体的方法包括解析法(如负梯度法、DFP法等)、直接搜索法(枚举法、单形法、复形法、模式搜索法、共轭梯度法等)、人工智能方法(模拟退火法、遗传算法、神经网络法、蚁群算法等)。在二维垂直条分法领域,稳定性系数最小的临界滑动面的搜索问题已经得到了很好的解决,无论是圆弧还是任意状滑裂面,而进入斜条分法和三维领域,由于自由度的增加,优化算法面临着严峻的挑战(陈祖煜等,2005)。总体看来,边坡稳定性系数极值的优化算法呈现从解析法、直接搜索法向人工智能方法过渡的趋势。
以“岩体结构控制论”的观点来看,岩质边坡的稳定性主要受断层破碎带、软弱夹层、岩层层面、节理面等不连续结构面的控制,因此在稳定性计算中应充分考虑这些不连续面的分布情况和力学强度性状。Sarma法满足滑体条块间的力平衡条件,可任意条分,并考虑临界地震加速度,适用于任意形状滑面,在岩质边坡稳定性分析中运用最为广泛,本书拟以Sarma法为稳定性计算方法,在潜在滑移体的条块划分时考虑岩层层面等结构面,滑裂面为折线性形态的基础上探索岩质边坡最危险滑裂面优化和最小稳定性系数的计算问题。遗传算法(Genetic Algorithms,GA)使用自适应概率寻优,在解决多参数的全局优化中具有更高的效率,因此运用遗传算法来解决这一问题,由此提出了岩质边坡最危险滑裂面全局优化的GA-Sarma算法。
532 遗传算法理论基础
遗传算法由美国密歇根大学的Holland教授(1975)年在《自然系统与人工系统中的适应性》一书中正式提出其概念和理论框架,此后吸引了众多的研究者和探索者,相继发展和深化了该算法,其中伊利诺大学的Goldberg(1989)以专著形式对遗传算法理论及其领域的应用进行了较为全面的分析和例证。遗传算法提供了一种求解复杂系统优化问题的通用框架,广泛应用于组合优化、机器学习、自适应控制、规划设计、图像处理和模式识别、人工生命等领域。
遗传算法是借鉴生物的自然选择和遗传进化机制而开发出来的一种全局优化自适应概率搜索算法。它使用群体搜索技术,通过对当前群体施加选择、交叉、变异等一系列遗传 *** 作,产生新一代的群体,并逐步使群体进化到包含或接近最优解的状态。它的主要特点是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息,它尤其适用于处理传统搜索方法难于解决的整体极值和非线性问题的求解。
遗传算法是在给定初始群体和遗传 *** 作的前提下,通过迭代实现群体的进化,它包括三个基本 *** 作:选择、交叉和变异(许国志等,2000)。候选解(目标函数)是模拟生物体的染色体,对待求问题编码而形成,组成一个固定规模的群体。最初候选解的群体是随机生成的,每一个染色体代表给定优化问题的一个可能的解,组成染色体的每一个基因代表一个待优化的参数。使用目标函数可计算一个染色体对应的目标函数值(稳定性系数),进而可以确定每一个染色体的适应度(稳定性系数的函数)。染色体通过迭代而进化,每一个迭代步骤中,父代群体中的两个染色体相互结合(交叉 *** 作)或直接改变父代群体中的某个染色体(变异 *** 作)形成子代群体中染色体。从父代和子代中选择某些适应度大的染色体而淘汰适应度小的染色体(选择 *** 作),可以形成新一代的染色体。适应度最大(稳定性系数最小)的染色体,最有可能被选择并用于产生下一代染色体,这一迭代过程直到寻找到最优解为止(陈祖煜,2003)。遗传算法的流程(王小平等,2000)如图531所示。
图531 遗传算法的基本流程
遗传算法在边坡稳定性分析领域已得到运用并备受关注。如肖传文等(1998)应用遗传算法进行Bishop圆弧滑裂面的优化分析,Goh(1999)运用遗传算法进行斜条分法临界滑动模式的搜索,张宏亮等(2003)应用上限解斜条分法和遗传算法确定边坡的最小稳定性系数,陈昌富等(2003)基于水平条分法和遗传算法计算水平向成层边坡在地震作用下的稳定性,何则干等(2004)利用遗传模拟退火算法结合瑞典圆弧法寻找边坡最危险滑裂面,吕文杰等(2005)用遗传算法配合单纯形法优化提出边坡圆弧滑动稳定分析通用算法。这些研究提出了一些好的思路,并取得了满意的结果,但算法或基于圆弧滑动假设,或未能充分考虑岩体结构面的控制,现在仍处于未成熟阶段,而且在当前国内外应用较广泛的一些边坡稳定分析软件尚未实现真正意义的全局优化算法。
533 Sarma法基本原理
如图532所示,将滑体沿任意条分为n个条块。作用在i第条块上作用力包括重力Wi,条块底面的作用力Ni,Ti,以及条块两侧的作用力Ei、Xi、Ei+1、Xi+1。在第i条块施加一个体积力KcWi,假定在其作用下,滑体处于极限平衡状态,其中Kc是临界加速度系数,边坡的稳定性系数K是Kc为零时的相应值(Sarma,1979)。根据条块垂直和水平方向力的平衡,可以得到:
内外动力地质作用与斜坡稳定性
图532 Sarma法计算简图
内外动力地质作用与斜坡稳定性
根据mohr-coulomb破坏准则,在条块底面、左侧和右侧界面上有:
内外动力地质作用与斜坡稳定性
将式(533)、(534)、(535)代入式(531)、(532),消去Ti、Xi、Xi+1和Ni,可以得到:
内外动力地质作用与斜坡稳定性
由此循环式,不考虑外荷载作用,即边界条件E1=En+1=0,可以求得:
内外动力地质作用与斜坡稳定性
式(537)中
内外动力地质作用与斜坡稳定性
内外动力地质作用与斜坡稳定性
式中:
Ui、PWi为第i条块底面和侧面上的水压力;cbi、φbi为第i条块底面上的粘聚力和内摩擦角;csi、φsi、csi+1、φsi+1为第i条块第i、i+1侧面上的粘聚力和内摩擦角;δi、δi+1为第i条块第i侧面和第i+1侧面的倾角(以铅直线为起始线,顺时针为正,逆时针为负);αi为第i条块底面与水平面的夹角;bi为第i条块底面水平投影长度;di、di+1分别为第i条块第i侧面和第i+1侧面的长度。
534 GA-Sarma算法原理
GA-Sarma算法的基本思想是滑裂面为折线形,其扩展方向追踪顺坡向节理面或者其他不连续结构面,潜在滑体以岩层层面等结构面为条分边界,用Sarma极限平衡法计算稳定性系数,以遗传算法优化最危险滑裂面的位置。
5341 目标函数的建立
如图533所示,当滑裂面由M点向坡顶扩展时的可能的路径有无数条,在此假设滑裂带在N点向上扩展时,滑裂路径的可能方向用γ表示,γ是滑裂路径与X轴正方向之间的夹角。若坡体内存在顺坡向不连续结构面(如节理面、软弱夹层等),则滑裂面路径沿不连续结构面扩展。
图533 边坡滑移路径局部模型示意图
这样,根据Sarma算法有:
内外动力地质作用与斜坡稳定性
确定了γi(i=1,2,…,n)之后,也就确定了滑裂路径,沿该路径可计算出稳定性系数。这样问题就转化成如何搜索γi使得式(5320)的值最小。将γi视为参数,则参数的数量与折线形滑移面的段数的数量一致,这是一个多变量函数的极值问题。
5342遗传算法的构造
(1)决策变量、约束条件及目标函数
决策变量就是参数γi的数量,与折线形滑面的段数一致。γi是滑裂路径的扩展方向,因此其取值范围为[0,90°]。目标函数就是:
内外动力地质作用与斜坡稳定性
因此,用遗传算法求解滑裂面的最小稳定性系数,是要找到一个由所有滑动方向构成的滑移路径使f(γi)的值最小。
(2)编码及解码方法
将函数优化问题的解空间转换成遗传算法的搜索空间的过程称为编码(Encoding)二进制编码方法具有编码、解码过程容易 *** 作以及交叉、变异等遗传算子便于实现等优点,是遗传算法中最常用的一种编码方法。
因为γi的取值范围为[0,90°],将每个变量的二进制编码位数取10位,则γi的取值精度约为01°。将分别代表变量γi的二进制编码串连接在一起,设滑裂面的折线段数为n,则滑裂路径组成一个共10n位的二进制编码长串,它代表目标函数优化问题的染色体编码。
解码(Decoding)是编码的逆过程,将编码所表示的数值从搜索空间转换到解空间首先将10n位长的二进制编码串分拆成n个分别表示不同变量的二进制编码串,然后把它们分别转换成相应的十进制代码。
(3)适应度函数
适应度函数(Fitness function)是遗传算法进化的指导准则,用来度量个体在优化过程中可能达到或接近于最优解的优良程度。遗传算法按照群体中各个个体的适应度大小来确定个体遗传到下一代的概率,适应度较高的个体比适应度较低的个体遗传到下一代的概率就相对大一些。
稳定性系数最小的滑裂面是一个求目标函数f(γi)的全局最小值问题,因此,适应度函数F(γi)由f(γi)经以下转换得到:
内外动力地质作用与斜坡稳定性
这样F(γi)的物理意义代表着稳定性系数值最小的f(γi)的路径的适应度最大,在遗传与变异过程中最有可能被保存下来。
(4)遗传与变异
选择(Selection)算子在遗传算法中以个体的适应度评价为基础来对群体中的各个个体进行优胜劣汰 *** 作。目的是为了保持基因稳定、增强全局收敛能力和计算效率。在采用回放式随机采样方式的比例选择方法中,个体被选中的概率与其适应度大小成正比。设群体的规模大小为M,第i个个体的适应度Fi由式(5322)得到,则个体i被选中的概率Pi为:
内外动力地质作用与斜坡稳定性
交叉(Crossover)算子在遗传算法中起着重要的作用,是产生新个体的主要方法。算法中采用了如图534所示的单点交叉方法。
图534 交叉 *** 作
变异(Mutation)算子相对交叉算子来说,只是产生新个体的一种辅助方法,但也不可忽视,因为它可以改善遗传算法的局部搜索能力,保持群体中个体的多样性,避免出现早熟现象。为了不破坏太多已有的较好模式,变异概率Pi的值取得较小。变异 *** 作如图535 所示:
图535 变异 *** 作
(5)保留最优个体的灾变策略
在遗传算法的运行过程中,由于交叉算子产生的新遗传特性不足,群体中所有个体的适应度会出现趁向于相同的现象,使得个体多样性丧失,遗传算法的演化进程陷入僵局。为摆脱这种状况,多次增大变异概率Pi的值,但效果不明显。于是引入灾变策略(Catas-trophe strategy),模仿残酷的自然灾变现象,对群体进行大规模的消亡和产生新的后代的 *** 作,以达到产生新的优良个体的作用。而在实行灾变策略的同时,为了不使已有的最优个体(Elitist)消失,在新的群体生成时保留最优个体至下一代,其他的个体则随机产生。
535 实例运用及验证
如图536所示,一个岩质边坡,高度H=30m,坡脚ε=60°,岩层倾角β=40°。边坡中随机分布有不连续结构面。岩体的重度γ=25kN/m3,岩体粘聚力和内摩擦角分别为150kPa、20°;岩层面粘聚力和内摩擦角分别为100kPa、18°;不连续结构面粘聚力和内摩擦角分别为100kPa、10°。以GA-Sarma算法计算边坡最危险滑裂面及其稳定性系数。
5351 计算过程
Sarma法中的安全系数值K是在Kc=0的条件下的相应值,方程Kmin(式5321)是一个隐式方程,直接编程求解较为困难,因此GA-Sarma算法用C语言编程并基于Matlab软件平台实现。在上述算例中,坡体中含顺坡向不连续结构面,因此在滑裂面搜索时约束路径必通过PQ,即在该范围的路径编码中变量γi是事先确定的。计算中选取群体规模M100,运行代数为300。当遗传算法在连续30代的运行期间,K值保持不变时,灾变程序开始执行。
图536 计算实例示意图
5352 计算结果
图537中记录了实行保留最优的灾变策略情况下群体中所有路径对应到K的平均值(蓝色点线)和最小值(红色实线)的变化过程。纵轴代表稳定性系数值,由式(5321)表示的目标函数决定。为清晰起见,图537中只表示了运行代数为300的情况,实际的运行代数为1000,期间灾变程序执行了16次,K值从155下降至11996。也就是说,当灾变程序执行后,K的平均值的变化剧烈,而最小值的变化则是稳定下降,但变化幅度不明显。由GA-Sarma法计算的边坡最小稳定性系数为11996,相应的最危险滑裂面如图538所示。
图537 遗传算法迭代过程中稳定系数的变化情况
图538 计算所得的最危险滑裂面路径
5353 结果验证
为了验证GA-Sarma算法的可靠性和合理性,用国内外广泛应用的边坡稳定性计算商业软件Slide50对算例进行计算。图539表示的是以PQ为滑移面的基准位置进行非圆弧滑动搜索计算的结果,其中红色箭头表示的是滑移面向左右方向扩展的角度范围,阴影块体为最危险滑移体。图5310表示的是以上述GA-Sarma算法求取得最危险滑裂面为指定滑移路径下的计算结果。表531列举了GA-Sarma算法和Slide软件中其他极限平衡法的稳定性系数值。
图539 以PQ为基准线搜索计算结果
图5310 以GA-Sarma算法的最优路径为滑移面的计算结果
表531 算例稳定性系数不同方法的计算结果对照表
表531结果表明:GA-Sarma算法基于折线形的滑裂面优化计算方法所得的滑移路径更符合岩质边坡的实际破坏失稳模式,稳定性系数小于其他计算方法的全局搜索方法;而相同滑移路径下,GA-Sarma算法由于考虑了层间力作用的平衡,安全系数略小于其他计算方法,但差值很小,则证明了GA-Sarma算法数学模型的可靠性。
首先,我运行了你的程序,你的程序subs函数处无法运行
大概看了下你的代码,计算不出结果,有一个可能,迭代没收敛,一直在循环中
最后,一点建议,对于计算函数在某点的导数不一定只用符号求导,可以用有限差分法里的高精度离散求导逼近,速度会快很多
以上就是关于matlab下载方式及地址全部的内容,包括:matlab下载方式及地址、用MATLAB做非线性规划,从网上查的代码出错了,求改正、优化算法总结等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)