梯度下降算法总结

2023-11-11

机器学习中,求解的问题常常变为最优化问题,求解最优化问题,常常使用梯度下降法。梯度下降法的最基本原理是向着最优化点不断靠近。假设最终的Loss函数为

J(θ)=1Ni=1N(hθ(xi)yi)

那么梯度下降的基本形式为

θn+1=θnαJ(θ)

在实践中,根据具体问题,有演变出以下几种

基本梯度下降法

基本梯度下降法,是指在每一次更新参数时,都是通过减去 ×

这里的 通常是指整个训练样本求得的损失函数的梯度,在实践中,每次求得整个训练样本的梯度并不现实,因此有分为随机梯度下降和批梯度下降。

随机梯度下降

随机梯度下降,是指:每次随机抽取一个样本->求得损失函数->计算梯度->执行梯度下降算法。

这里计算的损失函数为一个样本的损失函数

J(θ)=hθ(xi)yi

随机梯度下降法中,噪声比较多,每一步参数更新,不一定是向着最优方向;因此损失函数并不是计算全局最优,样本并不纯净等。

批梯度下降法

随机梯度下降法,每次求得的梯度噪声太大,参数更新许多迭代次数太多。因此有了梯度下降法和随机梯度下降法的折中:批梯度下降法。

批梯度下降法,是每次求得一批样本的损失函数->求梯度->更新参数。

一次样本求梯度,一定程度上减小了噪声;计算量也不至于太大。在实践中常常使用批梯度下降法。

Momentum梯度下降法

通过优化参数找到损失函数最小值,可以看做小球在山上滚动,找到山谷。参数随机初始化,可以看做小球从这个位置以起始速度为0,开始滚动。损失函数的梯度,可以看过施加给小球的力,通过力有了速度,通过速度改变位置。由力学定律 F=m×a ,梯度与加速度成正比,加速度改变速度,因此可以得到以下更新过程:

v=μvαJ(θ)θn+1=θn+v

μ 是动量系数,即一个方向的速度并不是立刻改变,而是速度通过积累一点点改变, μ 值得大小,可以通过trian-and-error来确定,实践中常常设为0.9。

动量法,原理在于一个方向的速度可以积累,而且越积累越大;通过不同训练样本求得梯度时,在最优的方向的梯度,始终都会增大最优方向上的速度。因此,可以减少许多震荡。

Nesterov Momentum梯度下降法

Nesterov Momentum梯度下降法是对Momentum梯度下降法的一个改进。在Momentum梯度下降法中,已经求出了 μv ,那么可以再“向前看一步”,不是求解当前位置的梯度,而是求解 θ+μv 处的梯度。这个位置虽然不正确,但是要优于当前位置 θ

v=μvαJ(θn+μv)θn+1=θn+v

AdaGrad

学习率在梯度下降法中,十分重要,但是所有参数都是用同一个学习率未必合适。例如,有些参数可能已经接近最优,仅仅需要微调,需要比较小的学习率;而有些参数还需要大幅度调动。在这种场景下,AdaGrad,来自适应不同的学习率。

AdaGrad原理也比较简单,它通过记录之前更新每一步更新值的平方,将这些参数累加,以此来调节每一步的学习率。

G=G+J(θn)2θn+1=θnαG+ϵJ(θn)

如果梯度比较大,它会不断减小学习率;相反,则会增大。

缺点是,随着训练进行,学习率会不断减小,最终参数不再更新。

RMSprop

RMSprop是为了解决AdaGrad法中,梯度不断减小问题的。方法很简单,通过设置当前梯度和历史梯度比例,例如

G=γG+(1γ)J(θ)2θn+1=θnαG+ϵJ(θn)

AdaDelta

AdaDelta也是为了解决Adagrad中,学习率不断减小问题的。与Adagrad不同的是,AdaDelta通过设置窗口w,只是用部分时间段内累计的梯度。

存储前w个梯度

E[J(θ)2]t=γE[J(θ)]t1+(1γ)J(θ)2tθn+1=θn+αE[J(θ)2]t+ϵJ(θ)

Adam

Adam考虑了梯度以及梯度的平方,具有AdaGrad和AdaDelta的优点。Adam根据梯度的一阶估计和二阶估计,动态调整学习率。

m=β1×m+(1β1)J(θ)v=β2×v+(1β2)J(θ)2θn+1=θnαnv+ϵ

推荐的超参数为 ϵ=1e6,β1=0.9,β2=0.999

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

梯度下降算法总结 的相关文章

随机推荐

  • 东北大学acm第五周周赛

    include
  • Resources.getResourceAsStream用法

    Resources com ibatis common resource Resources 类为从类路径中加载资源 提供了易于使用的方法 处理 ClassLoader 是一项 富于挑战的工作 尤其是应用服务器 容器的情况下 Resourc
  • mmdetection的VOC数据集训练、测试、保存(测试图片)

    mmdetection训练 测试总结 1 数据集格式 voc数据集 在 mmdetection data VOCdekit 上传数据 改名为VOC2007 其中包含JPEGImages Annotations ImageSets等 2 代码
  • 【vue3】监听路由的写法以及路由更新但是页面内容不更新的解决方案

    以下是vue3使用watch监听路由的写法 watch gt router currentRoute value newValue any gt 此处写监听路由后要执行的事情 if newValue fullPath manage rack
  • 2019年第十届蓝桥杯程序设计大赛国赛C++大学B组题解

    目录 A 平方序列 B 质数拆分 D 求值 E 路径计数 F 最优包含 G 排列数 H 解谜游戏 I 第八大奇迹 A 平方序列 题目解析 题意很直白 我们可以暴力枚举x y 2019
  • 机械革命开启Hyper-V安装Docker无限蓝屏(已解决)

    安装Docker时会蓝屏 安装Docker时会蓝屏 起初以为是docker 系统问题 后来经过仔细的检查 发现是只要开启虚拟化就会蓝屏 再检查好像硬件虚拟化有点问题 一番查找之后方知是bios的问题 CODE01需要升级到1 07版本 官方
  • 如何实现一个组件封装?

    问题网址 http bbs daxiangclass com thread 271 htm js前端组件的封装方法 定义一个类 类中增加一个方法 body中定义一个dom节点 脚本中把dom节点和类定义结合起来 实现特定的组件功能 vue组
  • Python爬取淘宝商品

    爬取淘宝商品信息 一个小菜鸡 用了十四个小时写了个爬虫 时间是有点长 但我心里美滋滋啊 记录下过程 也是第一次写博客排版什么的就凑合吧 主要用了selenium BeautifulSoup库 初始化 在十秒内页面加载完毕 调用seleniu
  • matlab函数大全

    转载方法 https blog csdn net yanmantian article details 53256765 本文转载自http www cnblogs com gtts archive 2011 05 20 2052339 h
  • cocos2d-x中有一个JniHelper类详细使用

    主体思路 通过JNI获取java虚拟机 再获取当前程序的JNI环境 通过JNI环境获取需要调用的java类信息 再获取需要调用的java类中的函数信息 再通过JNI环境调用 使用类信息 函数信息 调用对应的java函数 看起来好像有点复杂
  • Selenium之下拉框操作详解

    前言 执行自动化测试过程中遇到下拉框 包含 单选 多选 如何定位到下拉框并选中某个选项 1 下拉框的分类 select 标签 非 select 标签 2 Select 下拉列表处理 针对 select 标签的下拉列表 Selenium 提供
  • CCObject的分析:release retain基于2.2.3 增加3.2ref对比

    CCSprite fish new CCSprite 02 CCLOG After new d fish gt retainCount 03 fish gt init 04 CCLOG After init d fish gt retain
  • 图像的视网膜变换研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 图像的视网膜变换是受到人眼启发的一种技术
  • Spring Native实战(畅快体验79毫秒启动springboot应用)

    应用启动速度不超过100毫秒 启动即达到性能峰值 C1 C2等手段已经用不上了 运行时更低的内存消耗 docker镜像不含JDK 所需文件已经抽取出来放入镜像 官方展示的含有Spring Boot Spring MVC Jackson To
  • 面试时不要有谦卑的态度

    今天在B站看了几个Java面试的实战视频 然后茶余饭后产生了一些思考 在找工作过程中 虽然我们跟企业不是平等的 但起码是双向选择 你只需要以下三个问题即可 你可以谦虚但不可以谦卑 谦卑往往意味着你潜意识里想偷懒 不想学那么多 思考那么多就可
  • 虚拟机黑屏虚拟机繁忙的解决方法

    问题描述 不知是因为VMware版本的问题还是其他原因 有时候虚拟机很长时间不能正常开机 整个屏幕都是黑的 想关掉VM都关不了 提示 虚拟机繁忙 解决方法 呼出任务管理器强制结束VM的进程 然后再次打开VM 会出现以下的提示 而且之前出问题
  • c++ 编写杨辉三角(详细注释)

    include
  • PHP表单的创建和使用

    用户注册
  • 应用实践

    导读 蜀海供应链是集销售 研发 采购 生产 品保 仓储 运输 信息 金融为一体的餐饮供应链服务企业 因其业务比较复杂 2020 年底完成了以 Apache Doris 为核心的架构升级 并在 2021 年开始建设以 Apache Doris
  • 梯度下降算法总结

    基本梯度下降法 随机梯度下降 批梯度下降法 Momentum梯度下降法 Nesterov Momentum梯度下降法 AdaGrad RMSprop AdaDelta Adam 机器学习中 求解的问题常常变为最优化问题 求解最优化问题 常常