当前位置: 首页 > news >正文

机器学习常见的优化算法

1、梯度下降法

梯度下降法是最早最简单的,也是最为常用的最优化算法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为“最速下降法”。最速下降法越接近目标值,步长越小,前进越慢。

在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随即梯度下降法和批量梯度下降法。

批量梯度下降:最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。

随机梯度下降法:最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向,但是大的整体的方向是向着全局最优解,最终的结果往往是在全局最优解附近,使用于大规模训练样本情况。

2、牛顿和拟牛顿法

从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。如果更通俗得到说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前的位置选一个坡度最大的方向走一步,牛牛顿法在选择方向时,不仅会考虑坡度是否足够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说是牛顿法比梯度下降法看的更远一点,能更快地走到最底部。

优点:二阶收敛,收敛速度更快;

缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的hessian矩阵的逆矩阵,计算比较复杂。

拟牛顿法

拟牛顿法的基本思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺点,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优与最速下降法,尤其对于困难的问题,另外,因为拟牛顿法不需要二阶倒数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。

3、共轭梯度法

共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解决大型非线性最优化最有效的算法之一。在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

4、启发式优化方法

启发式方法是指人在解决优化问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。启发式优化方法种类繁多,包括经典的模拟退火方法,遗传算法、蚁群算法以及粒子群算法等等。

还有一种特殊的优化算法被称之多目标优化算法,它主要针对同时优化多个目标(两个及两个以上)的优化问题,这方面比较经典的算法有NSGAII算法、MOEA/D算法以及人工免疫算法等。

5、EM算法

EM算法是一类算法的总称。EM算法分为E-step和M-step两步。EM算法的应用范围很广,基本机器学习需要迭代优化参数的模型在优化时都可以使用EM算法。

EM算法的思想和过程

E-step:E的全称是Exception,即期望的意思。E-step也是获取期望的过程。根据现有的模型,计算各个观测数据输入到模型中的结果。这个过程称为期望值计算过程,即E过程。

M-step:M的全称是Maximization,即最大化的意思。M-step也是期望最大化的过程。得到一轮期望值以后,重新计算模型参数,以最大化期望值。这个过程为最大化过程,即M过程。

最大化的意思是我们在使用这个模型时希望我们定义的函数能使得到的结果最大化,而结果越大越接近我们希望得到的结果。我们优化的目标也就是这些能得到最大值的函数。

常见的EM算法有:隐含马尔科夫模型的训练方法Baum-Welch算法;最大熵模型的训练方法GIS算法等。

EM算法结果

EM算法不一定能保证获得全局最优解,但如果我们优化的目标函数是一个凸函数,那么一定能保证得到全局最优解。否则可能获得局部最优解。因为如果优化的目标函数有多个峰值点,则如果优化到某个不是最高的峰值点处,则会无法再继续下去,这样获得的是局部最优解。

总结

EM算法只需要输入一些训练数据,同时定义一个最大化函数,接下来经过若干次迭代,就可以蓄念出我们需要的模型了

 

转载于:https://www.cnblogs.com/zhibei/p/9540353.html

相关文章:

  • SQL 内连接,外连接(左外连接、右外连接)
  • 进程和任务计划
  • 文件、目录管理
  • centos7安装配置mysql5.6
  • 类的成员和嵌套(建模)
  • vue-组件基础
  • 办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL
  • 字节、字、bit、byte的关系
  • Timer 控件中的Elapsed事件与tick事件的区别
  • @ConfigurationProperties注解对数据的自动封装
  • Java 中创建子类对象会创建父类对象么?
  • 通过PXE部署系统时报错 0xc000000f
  • RabbitMQ之消息确认机制(事务+Confirm)
  • 大屏FAQ
  • java源码 - CountDownLatch
  • 【刷算法】从上往下打印二叉树
  • CentOS 7 修改主机名
  • JAVA SE 6 GC调优笔记
  • MySQL-事务管理(基础)
  • Swoft 源码剖析 - 代码自动更新机制
  • vue-router 实现分析
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 百度小程序遇到的问题
  • 对超线程几个不同角度的解释
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何设计一个微型分布式架构?
  • 三栏布局总结
  • 深入 Nginx 之配置篇
  • 新版博客前端前瞻
  • 积累各种好的链接
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (1)bark-ml
  • (2022 CVPR) Unbiased Teacher v2
  • (70min)字节暑假实习二面(已挂)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十三)Flask之特殊装饰器详解
  • (转)德国人的记事本
  • (转)我也是一只IT小小鸟
  • *** 2003
  • .mysql secret在哪_MySQL如何使用索引
  • .NET gRPC 和RESTful简单对比
  • .net 托管代码与非托管代码
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET轻量级ORM组件Dapper葵花宝典
  • @Autowired @Resource @Qualifier的区别
  • @RequestBody与@ResponseBody的使用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [2]十道算法题【Java实现】