首页 > 编程语言 >流行的机器学习优化算法

流行的机器学习优化算法

时间:2022-08-28 18:22:32浏览次数:84  
标签:机器 gradient 梯度 sum squared rate 下降 算法 优化

流行的机器学习优化算法

Photo by 康尼施耐德 on 不飞溅

机器学习中的优化是在给定一组输入的情况下找到正确预测的迭代过程。在每次迭代中,目标是减少预测值与实际值之间的误差范围,也称为真实值。深度学习中的优化有几种实现方式。一个好的损失优化方法应该尽可能收敛到一个全局最小值,并避免像高原、鞍座和局部最小值(如果有的话)这样的陷阱。前向传递后需要优化算法来更新模型权重。梯度下降是上述优化的一个流行例子。梯度下降的一些实现包括 Momentum 或 AdaMax。一些梯度下降方法是:

A saddle in a function space which could cause problems for optimization since there are several minimas . Nicoguaro, CC BY 3.0, via Wikimedia Commons

香草梯度下降

普通梯度下降对于简单的凸函数非常有效,但是它们往往会卡在高原或可能的局部最小值附近,因为所有边的梯度都不会进一步减小。下降也不是平滑的,有时会以锯齿形移动,这会减慢收敛速度。其他实现有助于规避其中一些问题。

公式:

  • delta = — learning_rate * 梯度
  • theta += 增量

Gradient Descent

势头

动量是对普通梯度下降的一种修改,其中一些动量被添加到函数的步骤中。这种势头有助于克服某些高原和局部最低点。这是通过将上一步的移动添加到当前计算的步骤来实现的。这个想法类似于将碗滚下碗,而不是停在底部,而是根据其初始动量滚过中心,然后慢慢地落到碗的底部。动量有助于减少梯度下降的振荡并平滑向最小值的移动。衰减率与前面的步骤相乘有助于衡量有多少前面的步骤要添加到当前步骤中。衰减率为 0 类似于具有大量摩擦的香草网络,而衰减率为 1 总是添加上一步是没有摩擦的永无止境的运动。通常使用 0.8 到 0.9 的衰减率值,这通常会给运动带来一些摩擦,并提供足够的动量来加快步伐但逐渐稳定下来。

公式:

  • sum_of_gradient = 梯度 + previous_sum_of_gradient * decay_rate
  • delta = -learning_rate * ** sum_of_gradient**
  • θ += ** 三角洲**

动量公式的另一个版本是添加 (1-decay_rate) 来缩放梯度:

  • sum_of_gradient = (1-decay_rate) * 梯度 + previous_sum_of_gradient * decay_rate

无论选择何种公式版本,都必须选择适当的学习率超参数,以使梯度以更平滑的方式向最小值移动。

AdaGrad(自适应梯度)

动量的问题在于,它可能很容易通过最小值,或者可能先走最陡的路径而忽略其他可能的路径,尽管最陡的路径不一定是到达最小值的最快路径。 AdaGrad 通过引入梯度平方和来惩罚沿同一方向探索下降。探索的特征梯度越多,它的平方和就越高,最终它的步长就越小。这对于稀疏特征来说非常有用,否则这些特征可能只有很小的下降步骤。每个特征参数都有自己的下降学习率,因此该算法不会严重依赖学习率超参数。由于平方和得分的快速增加,Adagrad 的缺点是最终减速到可以忽略不计的下降。

公式:

  • sum_of_gradient_squared = previous_sum_of_gradient_squared + 梯度²
  • delta = -learning_rate * 梯度 ** / sqrt(sum_of_gradient_squared)**
  • θ ** += 增量**

RMSProp(均方根传播)

RMSProp 是 Adagrad 的改进版本,它在平方梯度总和中添加了一个衰减因子。它优先考虑当前梯度步骤,同时减少过去梯度的累积影响。这有助于加快收敛速度​​,因为与 Adagrad 相比,下降速度不断增加。例如,0.9 的衰减率将对当前的平方梯度应用 (1–0.9) 比例,与 Adagrad 相比,该梯度增加了 10%。

公式;

  • sum_of_gradient_squared = previous_sum_of_gradient_squared * decay_rate+ gradient² * (1- decay_rate)
  • 三角洲 ** =** -learning_rate ** * 梯度 / sqrt(sum_of_gradient_squared)**
  • θ ** += 增量**

ADAM(自适应矩估计)

Adam 优化器使用了下降方法中最好的部分,是目前最流行的选择。它实现了 Momentum(速度)和 RMSProp 算法(稀疏特征下降)。衰减参数 - beta1 应用于通常设置为大约 0.9 的梯度总和(一阶矩)。第二个衰减参数 — beta2 也适用于梯度平方和,通常设置为 0.999 左右。

公式:

  • sum_of_gradient = previous_sum_of_gradient * beta1 + 梯度 * (1 — beta1) [势头]
  • sum_of_gradient_squared = previous_sum_of_gradient_squared * beta2 + gradient² * (1- beta2) [RMSProp]
  • delta = -learning_rate * ** sum_of_gradient** / 平方( ** sum_of_gradient_squared** )
  • theta += 增量

结论

我希望这篇文章为您提供一些基本的解释,帮助您找到适合您的机器学习模型的优化技术。请在评论部分留下您的想法和问题。谢谢

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/1354/13272818

标签:机器,gradient,梯度,sum,squared,rate,下降,算法,优化
From: https://www.cnblogs.com/amboke/p/16633316.html

相关文章

  • LetCode算法--3.找找两个正序数组的中位数
    给定两个大小分别为m和n的正序(从小到大)数组 nums1和 nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。来源:力扣(LeetCode......
  • STL中的算法
    参考:传智播客C++课程讲义传智扫地僧前言算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围......
  • 日常问题: SQL优化
    日常开发中,除了开辟新项目,业务需求开发,一般还要做负责系统的日常运维。比如线上告警了,出bug了,必须及时修复。这天,运维反馈mysqlcpu告警了,然后抓了该时间节点的慢sql日志......
  • 【算法笔记】一文解决数组类型算法题(1)
    本文主要介绍数据结构中的数组,以及LeetCode题库下面相关题型的分类和解法套路。数组理论概述定义数组是存储在一块连续内存上的,由相同元素集合组成的数据结构。利用索......
  • Vue3.0 编译做了哪些优化
    a.生成BlocktreeVue.js2.x的数据更新并触发重新渲染的粒度是组件级的,单个组件内部需要遍历该组件的整个vnode树。在2.0里,渲染效率的快慢与组件大小成正相关:组......
  • 哈希算法
    目录什么是哈希算法?哈希算法的应用应用一:安全加密应用二:唯一标识应用三:数据校验应用四:散列函数什么是哈希算法?将任意长度的二进制值串映射为固定长度的二进制值串,这个映......
  • 21级数据结构与算法实验2——链表
    21级数据结构与算法实验2——链表28天7-1单链表的创建及遍历分数30作者陈晓梅单位广东外语外贸大学读入n值及n个整数,建立单链表并遍历输出。输入格式:读入n及......
  • LetCode算法--2.两数相加
    给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和......
  • LetCode算法刷题-精选200题-1.两数之和
    给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是......
  • 《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式
    《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式视频讲解【第1季】2.第2章_C++编程范式-视频讲解【第1季】2.1.第2章_C++编程范式-C++工程的组织结构-视频......