机器学习中常见优化方法汇总(代码片段)

kidsitcn kidsitcn     2022-12-25     459

关键词:

http://www.scipy-lectures.org/advanced/mathematical_optimization/index.html#a-review-of-the-different-optimizers

机器学习中数学优化专门用于解决寻找一个函数的最小值的问题。这里的函数被称为cost function或者objective function,或者energy:损失函数或者目标函数。

更进一步,在机器学习优化中,我们并不依赖于被优化的函数的数学解析表达式,我们通过使用$scipy.optimize$从而实现类似黑盒优化。

了解你的优化问题本身

并不是所有的优化问题都是一样的,如果你能对你待优化的问题本身有一个深刻的理解,这样可以选择正确的优化方法。

1.其中非常重要的一点就是要考察问题本身的维数。问题本身数据的维数(标量变量的个数)决定了优化问题的规模。

2.convex和non-convex优化

技术分享图片技术分享图片

 

凸函数的特征:

  • $f$总是在其切线之上
  • 或者说,对于两个点$A,B$,如果$A<C<B$,则$f(C)$总是在线段$f(A),f(B)$之间

凸函数优化相对非常简单。

 3.函数光滑与否(是否处处可导)

4. loss函数以及gradient函数是否存在噪声

如果gradient没有解析式,那么我们都须通过计算式计算,这必然导致误差。

5. 是否有限制条件

比如,下图中就要求优化只能在$x_1,x_2 in (-1,1)$间优化

技术分享图片

常见的优化方法

Brent’s method 

技术分享图片

理论依据是中值定理,对于一个连续函数,$f$,如果两个端点a,b的函数值$f(a)f(b)<0$,则$(a,b)$之间必然存在一个驻点(导数为0),我们可以不断迭代最终求得驻点;

from scipy import optimize
def f(x):
    return -np.exp(-(x - 0.7)**2)
result = optimize.minimize_scalar(f)
result.success # check if solver was successful

x_min = result.x

gradient based methods

简单梯度下降法

原理如教科书的描述,根据梯度下降的方向去做数值变更和迭代,最终求得驻点。

存在的问题是:参数调整时可能反复跨过驻点从而形成震荡,虽然减少参数调整的布幅可以减轻这个问题,但是无法彻底解决。

共轭梯度下降

共轭算法在简单梯度下降基础上增加一个摩擦项(friction term),每个step依赖于梯度最近的两个值,这样可以有效解决反复震荡问题。

def f(x):   # The rosenbrock function
    return .5*(1 - x[0])**2 + (x[1] - x[0]**2)**2
optimize.minimize(f, [2, -1], method="CG")    

梯度优化方法需要loss函数的雅可比(梯度)值,虽然即使你不传入导数(雅可比矩阵是针对y值为向量的情况下的梯度向量),算法也能够通过数值计算方法算出来,但是如果有解析表达式,我们传入这个值会大大提升收敛效率.

def jacobian(x):
    return np.array((-2*.5*(1 - x[0]) - 4*x[0]*(x[1] - x[0]**2), 2*(x[1] - x[0]**2)))
optimize.minimize(f, [2, 1], method="CG", jac=jacobian)    

注意:通过传入解析表达式后,只需要28次就能收敛,而之前需要108次迭代才能收敛。

牛顿梯度法(Newton and quasi-newton methods)

def f(x):   # The rosenbrock function
    return .5*(1 - x[0])**2 + (x[1] - x[0]**2)**2
def jacobian(x):
    return np.array((-2*.5*(1 - x[0]) - 4*x[0]*(x[1] - x[0]**2), 2*(x[1] - x[0]**2)))
optimize.minimize(f, [2,-1], method="Newton-CG", jac=jacobian)    

BFGS

BFGS在牛顿法基础上细调了Hessian矩阵的估算方法

L-BFGS

L-BFGS位于BFGS和共轭梯度法之间。对于非常高维(大于250个)的loss函数,Hessian矩阵的计算是非常耗时的,L-BFGS keeps a low-rank version.

非梯度优化方法

Powell算法

Nelder-Mead

带约束条件的函数优化

盒子边界

技术分享图片

 

def f(x):
   return np.sqrt((x[0] - 3)**2 + (x[1] - 2)**2)
optimize.minimize(f, np.array([0, 0]), bounds=((-1.5, 1.5), (-1.5, 1.5))) 

 通用约束:拉格朗日乘数法化约束为对偶无约束的优化问题

 

def f(x):
    return np.sqrt((x[0] - 3)**2 + (x[1] - 2)**2)

def constraint(x):
    return np.atleast_1d(1.5 - np.sum(np.abs(x)))

x0 = np.array([0, 0])
optimize.minimize(f, x0, constraints="fun": constraint, "type": "ineq") 

 

机器学习几种常见优化算法介绍(代码片段)

机器学习几种常见优化算法介绍https://blog.csdn.net/class_brick/article/details/78949145 1.梯度下降法(GradientDescent)2.牛顿法和拟牛顿法(Newton‘smethod& Quasi-NewtonMethods)3.共轭梯度法(ConjugateGradient)4.启发式优化方法 5 查看详情

机器学习python常见用法汇总(代码片段)

【机器学习】Python常见用法汇总活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133df2adc1a728fd)作者简介:在校大学生一枚,华为云享专家,阿里云星级博主,腾云先锋(TDP)成员,... 查看详情

机器学习之求解无约束最优化问题方法(手推公式版)(代码片段)

....拟牛顿法5.代码实现结束语前言  本篇博文主要介绍了机器学习里面的常见的求解无约束最优化问题的方法,包括梯度下降法、牛顿法和拟牛顿法,并给出了相关的推导过程及代码实现。  本篇博文内容主要来自 查看详情

机器学习常见算法简单汇总

机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考。机器学习的算法很多。很多时候... 查看详情

深度学习中的常见问题汇总(代码片段)

深度学习中的常见问题汇总(一)转自卷积神经网络的复杂度分析关于感受野的总结1.CNN复杂度分析在深度学习基础网络不断进化的过程中,可以发现新的模型不仅性能有极大地提升,网络的复杂度通常也会更低。深度学习网络... 查看详情

机器学习模型评估指标汇总(代码片段)

在使用机器学习算法过程中,针对不同的问题需要不用的模型评估标准,这里统一汇总。主要以两大类分类与回归分别阐述。一、分类问题1、混淆矩阵混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的... 查看详情

⚡机器学习⚡中的优化器(optimizers)方法(代码片段)

⚡终于!!!⚡终于又有时间学习DeepLearning了⚡!30天ML计划,一起加油!!!https://blog.csdn.net/weixin_44333889/category_11271153.html《专栏》在训练NN的时候,有哪些Optimizers可以优化更快 查看详情

机器学习中常见的优化算法

   在机器学习中,有很多的问题并没有解析形式的解,或者有解析形式的解但是计算量很大(譬如,超定问题的最小二乘解),对于此类问题,通常我们会选择采用一种迭代的优化方式进行求解。??这些常用的优化算法包... 查看详情

机器学习距离度量中常见的距离计算公式(代码片段)

机器学习:距离度量欧式距离(EuclideanDistance)曼哈顿距离(ManhattanDistance)切比雪夫距离(ChebyshevDistance)闵可夫斯基距离(MinkowskiDistance)标准化欧氏距离(StandardizedEuclideanDistance)余弦距离(CosineDistance)汉明距离(HammingDistance)杰卡德距离(J 查看详情

强大而精致的机器学习调参方法:贝叶斯优化(代码片段)

一、简介贝叶斯优化用于机器学习调参由J.Snoek(2012)提出,主要思想是,给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通过不断地添加样本点来更新目标函数的后验分布(高斯过... 查看详情

前端框架中常见的公共方法汇总:自定义表单验证规则(代码片段)

/**此方法可以全局混入methods也可以直接复制,局部使用**/开始时间不能大于结束时间validateDateRange(stm,etm)if(moment(stm)>moment(etm))this.$message(message:'开始时间不能大于结束时间',type:'error')returnfalsereturntru 查看详情

前端框架中常见的公共方法汇总:时间格式处理/数字格式处理(代码片段)

时间格式处理//把时间的分秒值去掉exportconstformatTM=item=>if(item)letnewItem=item.replace(':00.0','')if(newItem.indexOf('.')>0)newItem=newItem.substr(0,16)returnnewI 查看详情

几种常见的优化算法

...以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法 查看详情

机器学习中常见的评价指标总结(代码片段)

文章目录1.评价指标的种类2.分类任务的评价指标2.1分类任务的一些概念(1)交并率(IoU,IntersectionoverUnion)(2)NMS(3)TP、FP、FN、TN与混淆矩阵2.2准确率(Accuracy)2.3精确率与召回率(Precision,Recall)2.4F1分数2.... 查看详情

机器学习中常见的评价指标总结(代码片段)

文章目录1.评价指标的种类2.分类任务的评价指标2.1分类任务的一些概念(1)交并率(IoU,IntersectionoverUnion)(2)NMS(3)TP、FP、FN、TN与混淆矩阵2.2准确率(Accuracy)2.3精确率与召回率(Precision,Recall)2.4F1分数2.... 查看详情

几种常见的优化算法(代码片段)

...以使某一(或某些)指标达到最优的一些学科的总称。随着学习的深入,博主越来越发现最 查看详情

机器学习(ml)十四之凸优化(代码片段)

优化与深度学习优化与估计尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。优化方法目标:训练集损失函数值深度学习目标:测试集损失函数值(泛化性)1%matplotlib... 查看详情

机器学习知识点汇总

机器学习最近在开始找工作,顺便复习一下之前学习的机器学习知识点,从而对机器学习和深度方面有一个比较系统的了解,还有机器学习和深度学习优化过程中出现的技术。推荐的博客:https://www.cnblogs.com/jerrylead/tag/Machine%20Lea... 查看详情