优化器(梯度下降 + Momentum)_优化器中的momentum-程序员宅基地

技术标签: 机器学习  深度学习  人工智能  

动量梯度下降(Momentum Gradient Descent)是一种优化算法,用于训练机器学习模型,特别是神经网络模型。它是在标准梯度下降算法的基础上引入了动量概念,以解决梯度下降中的一些问题,例如局部最小值、鞍点等。

提出背景:

动量梯度下降算法的提出是为了解决传统梯度下降算法中的一些问题。

  • 在高度曲折的损失函数表面上的震荡
  • 收敛速度缓慢等。
    通过引入动量的概念,可以在一定程度上加速收敛,并且有助于跳出局部最小值。

理论:

动量梯度下降的核心思想是引入动量因子,使得更新方向不仅取决于当前梯度,还考虑了之前更新方向的影响。这样可以在一定程度上平滑更新路径,加速收敛。

公式

  • While 条件:
    • g ← ∇ θ k − 1 L ( θ ) g \leftarrow \nabla_{\theta_{k-1}} L(\theta) gθk1L(θ) # 计算梯度
    • w k = α w k − 1 + ( 1 − α ) g w_k = \alpha w_{k-1} + (1 - \alpha) g wk=αwk1+(1α)g # 计算动量
    • θ k = θ k − 1 − η w k \theta_{k} = \theta_{k-1} - \eta w_k θk=θk1ηwk # 更新参数

θ k − 1 \theta_{k-1} θk1是第k-1步的模型参数向量。
∇ L ( θ k − 1 ) \nabla L(\theta_{k-1}) L(θk1) 是损失函数 L L L 对参数 θ k − 1 \theta_{k-1} θk1 的梯度。
η \eta η是学习率。
α \alpha α是动量参数,通常取值在 0 到 1 之间,决定了历史梯度对当前更新的影响程度。
w k w_k wk是动量,表示历史梯度的加权累积。

代码示例

下面是一个简单的 Python 代码示例,演示了如何使用动量梯度下降算法来训练一个简单的线性回归模型:

import numpy as np

def momentum_gradient_descent(params, grads, velocities, lr=0.01, momentum=0.9):
    for param, grad, velocity in zip(params, grads, velocities):
        velocity[:] = momentum * velocity + lr * grad
        param[:] -= velocity

优缺点

优点:

  • 加速收敛:动量可以帮助加速SGD在相关方向上的收敛,并抑制振荡,使得训练过程更快。
  • 降低震荡:通过平滑梯度,动量方法可以减少训练过程中的震荡,使得更新过程更稳定。
  • 逃离局部最小:动量的累积可以帮助算法跳出局部最小值。

缺点:

  • 超参数敏感:动量系数的选择对算法的性能影响很大,需要仔细调整。
  • 可能错过最小值:过大的动量可能会导致算法在最小值附近“冲过头”,从而错过最优解。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_48923489/article/details/136853837

智能推荐

C#winform程序中控件等比例缩放(主要针对主程序加载子程序)_winform 等比缩放-程序员宅基地

文章浏览阅读2k次。这里的等比例适用的是在主窗体中加载了多个子窗体,或者一个主程序引用了另外一个子程序dll这样等比例缩放,也并不是实际意义上的等比例,而是相当于重新加载子窗体,但子窗体里面的数据不能变化。 主窗体和子窗体加载这种就不介绍,直接介绍主程序加载子程序的dll这种,主窗体与子窗体与其类似。 先建立一个主程序,主程序就当做一个壳,里面简单放几个容器即可。再建立一个子程序,子程序可以随便加点窗口进去,主要是为了让主程序调用加载进主程序。为了实现所谓的等比例缩放,子窗体..._winform 等比缩放

Android 计时器Chronometer 使用及源码分析-程序员宅基地

文章浏览阅读852次,点赞27次,收藏22次。今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

lombok常用注解大全_lombok.singular.useguava-程序员宅基地

文章浏览阅读1.9w次,点赞24次,收藏94次。lombok可以帮助我们提升日常开发的效率jar包。里面有许多实用的注解。本文将对lombok的常用注解作使用介绍,对于一些实验性官方不推荐的注解只会简单介绍实验性注解可能会带来一些风险。注: 本文基于lombok-1.18.6本文部分内容机翻自官网文章目录lombok的引入和安装lombok的基本注解使用变量相关val和var@NonNull实体类相关@Getter and @..._lombok.singular.useguava

linux网络编程:多播(组播)编程_mcast 多播包-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏36次。什么是多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。 多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进..._mcast 多播包

JENKINS 安装,学习运维从这里开始

找到这个红圈目录里的config.xml 文件,替换这个HASH串:#jbcrypt:$2a10 1010DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS。选择安装最适合的插件,则自己进行选择插件,我们这里选择推荐的,继续。出现新手入门:选择 安装推荐的插件,或者选择安装最适合的插件!换一个端口吧,毕竟8080太通用了,容易冲突,呵呵。保存,如果不能保存,可以采用管理员方式,或者授权。然后,继续 经过一段时间的等待。推荐的插件,将自动安装这些。

Ansible playbook之变量引用

nginx]---tasks:发现变量调用成功,我们修改下/etc/ansible/hosts文件[nginx]key=nginx├── hosts├── roleskey: nginx[nginx]a port.a port.

随便推点

在Debian 10上安装MySQL_debian mysql安装-程序员宅基地

文章浏览阅读324次。MySQL是一个著名的开源数据库管理系统,用于存储和检索各种流行应用程序的数据。MySQL 是*LAMP*堆栈中的**M**,LAMP 堆栈是一组常用的开源软件,还包括 Linux、Apache Web 服务器和 PHP 编程语言。在本教程中,您将通过添加此存储库来安装最新版本的 MySQL,安装 MySQL 软件本身,确保安装安全,并测试 MySQL 是否正在运行并响应命令。_debian mysql安装

edge 此项内容已下载并添加到 Chrome 中。_一个小扩展,解决Chrome长期以来的大痛点...-程序员宅基地

文章浏览阅读1.6k次。PC 端最好用的浏览器非 Chrome 莫属,这是一件没什么悬念的事情。前两天发了一个小调查,也只能问 除了 Chrome 之外,你的备胎浏览器是什么?所以你如果问我 PC 端的浏览器有什么推荐?我的回答也没什么创意,那就是它,是它,就是它,我们的英雄小。。。。不好意思,走串场了。至于 Chrome 浏览器到底有多好用、多厉害,不用我多说,在我 N 次的彩虹屁下,小伙伴们应该早已下载并且用得得心应..._此项内容已下载并添加到 chrome 中。

vue js 点击按钮为当前获得焦点的输入框输入值_vue获得当前获得焦点的元素-程序员宅基地

文章浏览阅读1k次。VUE js 点击按钮为当前获得焦点的输入框输入值使用mousedown方法,可以阻止页面将焦点转移到按钮上<el-button @mousedown.native="entrySymbol($event,'+')">+</el-button>获取当前拥有焦点的输入框或文本域,并为其赋值 //输入符号 entrySymbol(e, symbol) { //取消失去焦点事件 e.preventDefault() //获_vue获得当前获得焦点的元素

Android 资源文件中@、@android:type、@*、?、@+含义和区别_@android @*android-程序员宅基地

文章浏览阅读675次。一.@代表引用资源1.引用自定义资源。格式:@[package:]type/nameandroid:text="@string/hello" 2.引用系统资源。格式:@android:type/name android:textColor="@android:color/opaque_red" 注意:其实@android:type/name _@android @*android

python中的正则表达式是干嘛的_Python中正则表达式介绍-程序员宅基地

文章浏览阅读541次,点赞2次,收藏3次。正则表通常是用来检索、替换那些符合某个模式(规则)的文本。也就是说使用正则表达式可以在字符串中匹配出你需要的字符或者字符串,甚至可以替换你不需要的字符或者字符串。正则(不是python特有的) 匹配字符串,其他语言也有正则表达式实例:需求:输入字符,判断字符串有无pythonimport rea=input("输入:")b=re.search("python",a)#搜寻匹配,匹配是第一个if b..._正则表达式的python脚本可作用什么

GeoGeo多线程_geo 多线程-程序员宅基地

文章浏览阅读525次。GeoGeo多线程GeoGeo多线程有2种,1种称之为函数线程,另1中称为过程线程。一、线程函数普通函数中,当程序的代码调用一个函数时,程序的控制从原来的代码转移到函数中执行,函数执行完毕后,程序的控制返回给原来调用该函数的代码中,然后继续向下执行。这个过程都在一个线程内顺序发生。而多线程函数是这样一些函数,当程序的控制调用线程函数时,马上创建一个新的线程并开始运行。新线程运行的同时,_geo 多线程

推荐文章

热门文章

相关标签