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

模型优化—动量梯度下降

一、mini-batch

梯度下降(gradient descent):

SGD(stochastic GD)随机梯度下降:对一个样本做梯度下降

batch梯度下降:使用所有样本做梯度下降(做一次又叫epoch)

mini-batch梯度下降:用子训练集做梯度下降

epoch:对整个训练集做了一次梯度下降

iteration:做了一次梯度下降

二、如何为mini-batch选择合理的batch size

batch size 对网络的影响:

1、没有batch size(全训练集),梯度准确,只适用于小样本的数据

2、batch size = 1,随机梯度下降,梯度变来变去,非常不准确,网络很难收敛

3、batch size增大,梯度变准确(mini-batch)

4、batch size增大,梯度已经非常准确,再增大也没用。

随机梯度下降、batch梯度下降会使得梯度的准确度处于两个极端,而mini-batch处于两个极端之间。

batch size也是一个超参数,需要根据成本变化来调整。一般来说batch size选择为2的n次方,2、4、8…1024…,这样会使得计算机运算的快些。常见的batch size有:64、512。

mini-batch的不足:

在这里插入图片描述

batch梯度下降因为梯度准确,则成本变化较准确,成本下降曲线平滑。而mini-batch的梯度下降,会不断趋于准确,但整个过程中,会因为批次的变化(更换了样本),有抬升的地方,即震荡下行。

三、指数加权平均

又名指数加权移动平均,是一种常用的序列数据处理方式,本质是通过计算局部的平均值,来描述数值的变化趋势。可以用来绘制趋势曲线。

核心公式:Vt = k* V[t-1] + (1-k) * Wt,k是一个超参数,决定了v值应该受前面多少个(1 / (1-k) )数据的影响。k越大,则说明受影响前面数据的个数越多。 而计算结果vt则可以理解为前多少个的近似平均值(非真实平均值)

示例1:

当天人民币汇率趋势 = 0.9 * 前一天人民币汇率 + 0.1 * 当天人民币汇率。此时k = 0.9,表示受前面10天的影响。

示例2:当k=0.9时,求的结果为前100天的温度趋势:

v100 = 0.9*v99 + 0.1*w100v99 = 0.9*v98 + 0.1*w99v98 = 0.9*v97 + 0.1*w98...v1 = 0.9*v0 + 0.1*w1

把v99代入v100,则:

v100 = 0.9*(0.9*v98 + 0.1*w99) + 0.1*w100
=0.1*w100 + 0.1*0.9*w99 + 0.9*0.9*v98 
=0.1*w100 + 0.1*0.9*w99 + 0.9*0.9*(0.9*v97 + 0.1*w98) 
=0.1*w100 + 0.1*0.9*w99 + (0.9^3)*v97 + 0.1* (0.9^2)*w98 

v100 = 0.1w100 + 0.1*0.9*w99 + 0.1*(0.9)^2*w98 + 0.1*(0.9)^3*w97 +...
  • 可以看出,前100天温度由一小部分拼凑而成,越往前权重越小,也就是说越来越不受前面数据的影响。
  • 0.1 约等于 0.1乘0.9 约等于 0.1乘0.9平方…,而10个约等于加起来=1。所以v值相当于前10天的平均值。
  • 如果k = 0.98,那么要50个0.02才等于1,也就是说vt相当于前面50天平均值。

计算指数加权平均:

for i in range(t)v0 = 0v1 = 0.98v0 + 0.02w1v2 = 0.98v1 + 0.02w2...
  • 修正算法:

在计算指数加权平均时,假设w1为40度,w2为40度,那么 v1 = 0.8,v2 = 0.98*0.8 + 0.8 = 1.584,说明前面的数值与实际值会相差很远。此时就需要修正。用公式 vt = vt / (1-k^t),此时v1 = 0.8 / (1-0.98^1) = 40。 后面随着t越来越大,分母越来越接近1,故vt就不需要修正了。 另外因为只是前面的会偏离一部分,故一般情况下也不会去修正。

四、动量梯度下降

标准梯度下降:

w = w - r*dw
b = b - r*db

因为加权指数移动平均,可以反应趋势,平均项越多,绘制的指数加权平均曲线变化更为缓慢。故我们可以用它来做梯度下降,从而减轻标准梯度下降跳来跳去找,找到损失最低点的性能浪费。(比如跳动过大,错过最低点。 以及在最小值左右来回跳动)故动量梯度下降时优于标准梯度下降的算法。

vdw = k *vdw + (1-k)*dw

vdb = k *vdb + (1-k)*db

等式左边的vdw、vdb为当前值,等式右边的为前一个值。故引出动量梯度下降:

w = w - r*vdw
b = b - r*vdb

其优点:

1、动量移动的更快

2、动量有机会逃脱局部极小值和高原区。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vmware上,虚机经常丢失网卡。导致无法上网。
  • 【初阶数据结构篇】冒泡排序和快速排序(中篇)
  • 【深度学习】CosyVoice,论文
  • jetbrain插件市场无法下载插件/idea插件install无效
  • Unity后处理(Post-processing)
  • JAVA的String类的contains方法,Indexof方法不使用KMP算法
  • 顺丰+美团测开面试经验
  • 2024华为OD机试真题-最小矩阵宽度Python-C卷D卷-200分
  • 【MySQL】表的CRUD{insert 替换 查询 运算符 语句执行顺序 排序 limit 分页 truncate截断表 去重 mysql日志 聚合函数}
  • 集合的并发修改异常 31
  • 编程小白如何成为大神?大学新生的最佳入门攻略
  • RK3568笔记四十九:W25Q64驱动开发(硬件SPI1)
  • “八股文”面试题:是招聘程序员的金科玉律?
  • aaaaaaaaaaaaa
  • Day14-Servlet后端验证码的实现
  • 《Java编程思想》读书笔记-对象导论
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017-09-12 前端日报
  • 78. Subsets
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Bytom交易说明(账户管理模式)
  • ECS应用管理最佳实践
  • gitlab-ci配置详解(一)
  • iOS 系统授权开发
  • leetcode-27. Remove Element
  • Map集合、散列表、红黑树介绍
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • SOFAMosn配置模型
  • Webpack 4 学习01(基础配置)
  • 大整数乘法-表格法
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 微信小程序--------语音识别(前端自己也能玩)
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 以太坊客户端Geth命令参数详解
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • #includecmath
  • #QT(智能家居界面-界面切换)
  • $.ajax中的eval及dataType
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)ObjectiveC 深浅拷贝学习
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net core 的缓存方案
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @antv/g6 业务场景:流程图
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20161214]如何确定dbid.txt
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [BZOJ2850]巧克力王国
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [C++]C++基础知识概述