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

深度学习之优化器

梯度下降法

1、基本思想:先设定一个学习率η\etaη,参数沿梯度的反方向移动。假设需要更新的参数为w,梯度为g,更新策略可以表示为
w←w−η∗g w \leftarrow w - \eta*g wwηg
2、梯度下降算法有三种不同的形式:

  • BGD(Batch Gradient Descent):批量梯度下降,每次参数更新使用所有样本
  • SGD(Stochastic Gradient Descent):随机梯度下降,每次参数更新只使用一个样本
  • MBGD(Mini-Batch Gradient Descent):小批量梯度下降,每次参数更新使用小部分数据样本

三个优化算法虽然采用的数据量不同,但是步骤相同

step1g=∂loss∂wstep2求梯度的平均值step3更新权重w←w−η∗g \text{step1} \qquad g = \frac{\partial loss}{\partial w} \\ step2 \qquad 求梯度的平均值 \\ step3 \qquad 更新权重 w \leftarrow w - \eta * g step1g=wlossstep2求梯度的平均值step3更新权重wwηg

缺点

  • 对超参数学习率敏感:过小导致收敛速度过慢,过大又越过极值点
  • 容易卡在鞍点位置,即梯度为0的地方
  • 在比较平坦的区域,由于梯度接近于0,优化算法会因误判,还未到达极值点,就提前结束迭代,陷入局部最小值

在这里插入图片描述
在这里插入图片描述

多维梯度下降法

即有多个参数需要优化X=[x1,x2....,xd]TX = [x_1,x_2....,x_d]^TX=[x1,x2....,xd]T
多元损失函数,梯度也是多元的,由d个偏导数组成
∇f(X)=∇fx∇x1,∇fx∇x2..,∇fx∇xdT \nabla f(X) = {\frac{\nabla f_x}{\nabla x_1},\frac{\nabla f_x}{\nabla x_2}..,\frac{\nabla f_x}{\nabla x_d}}^T f(X)=x1fx,x2fx..,xdfxT
xi←xi−η∗∇f(X) x_i \leftarrow x_i - \eta * \nabla f(X) xixiηf(X)
构造一个目标函数f(x)=x12+2x22f(x) = x_1^2 + 2x_2^2f(x)=x12+2x22,损失函数的梯度为∇f(x)=[2x1,,4x2]T\nabla f(x) = [2x_1,,4x_2]^Tf(x)=[2x1,,4x2]T

动量

思想:让参数的更新具有惯性,每一步更新都是由前面梯度的累积v和当前点梯度g组合而成

公式:
累计梯度更新:v←αv+(1−α)gv \leftarrow \alpha v+(1-\alpha)gvαv+(1α)g,其中α\alphaα为动量参数,v为累计梯度,η\etaη为学习率。
梯度更新:x←x−η∗vx \leftarrow x- \eta*vxxηv

优点:

  • 加快收敛帮助参数在正确的方向上加速前进
  • 跳出局部最小值
    在这里插入图片描述

Adagrad

自适应学习率优化算法
之前的随机梯度下降法,对所有的参数,都是使用相同的、固定的学习率进行优化,但是不同的参数的梯度差异可能很大,使用相同的学习率,效果不会很好。
在这里插入图片描述
Adagrad思想:对于不同参数,设置不同的学习率,如果一个参数的梯度一直很大,那么其对应的学习率就变小一点,防止振荡,如果梯度小,就学习率大一点。
方法:对于每个参数,初始化一个累计平方梯度 r=0,然后每次将该参数的梯度平方求和累加到这个变量r上:
r←r+g2 r \leftarrow r +g^2 rr+g2
更新参数时,学习率为:
ηr+σ,σ为极小值,防止分母为0 \frac{\eta}{\sqrt{r+\sigma}},\sigma为极小值,防止分母为0 r+ση,σ为极小值,防止分母为0
权重更新:
w←w−ηr+σ∗g w \leftarrow w - \frac{\eta}{\sqrt{r+ \sigma}}*g wwr+σηg

RMSProp

RMSProp:Root Mean Square Propagation 均方根传播
RMSProp在Adagrad的基础上,进一步在学习率的方向上优化
累计平方梯度:r←λr+(1−λ)g2r\leftarrow \lambda r +(1-\lambda)g^2 rλr+(1λ)g2
权重更新:
w←w−ηr+σ∗g w \leftarrow w - \frac{\eta}{\sqrt{r+ \sigma}}*g wwr+σηg
就是多了一个λ\lambdaλ衰减系数

Adam

缝合怪,缝合了上述所有优化器
1、梯度方面增加momentum, 使用累计梯度:v←αv+(1−α)gv \leftarrow \alpha v+(1-\alpha)gvαv+(1α)g
2、同RMSProp优化算法一样,对学习率进行优化,使用累计平方梯度:
r←λr+(1−λ)g2r\leftarrow \lambda r +(1-\lambda)g^2 rλr+(1λ)g2
3、偏差纠正
v^=v1−αt,r=r1−λt \hat{v} = \frac{v}{1-\alpha^t},r=\frac{r}{1-\lambda^t} v^=1αtv,r=1λtr

Adam 的偏差纠正就是通过 m^,t^\hat{m},\hat{t}m^,t^ 把指数加权平均在初期“偏小”的问题修正掉,从而保证优化器在早期能稳定、合理地更新参数。
初始v=0,r=0

在这里插入图片描述

http://www.lryc.cn/news/623666.html

相关文章:

  • 概率论基础教程第4章 随机变量(一)
  • 《Cocos游戏开发入门一本通》第四章
  • 李宏毅NLP-11-语音合成
  • 神经网络中的梯度概念
  • 显式编程(Explicit Programming)
  • c++--文件头注释/doxygen
  • 系统学习算法 专题十七 栈
  • C++ 特殊类设计与单例模式解析
  • 编译器生成的合成访问方法(Synthetic Accessor Method)
  • Python训练营打卡Day35-复习日
  • Spring Framework :IoC 容器的原理与实践
  • 库制作与原理(下)
  • HAL-EXTI配置
  • Python异常、模块与包(五分钟小白从入门)
  • STL 容器
  • 【Linux网络编程】NAT、代理服务、内网穿透
  • Windows 10共享打印机操作指南
  • 第七十八章:AI的“智能美食家”:输出图像风格偏移的定位方法——从“滤镜病”到“大师风范”!
  • Flutter 3.35 更新要点解析
  • 解码词嵌入向量的正负奥秘
  • 【R语言】R语言矩阵运算:矩阵乘除法与逐元素乘除法计算对比
  • Flutter vs Pygame 桌面应用开发对比分析
  • SQL Server 2019安装教程(超详细图文)
  • ZKmall开源商城的移动商城搭建:Uni-app+Vue3 实现多端购物体验
  • 【Linux系统】动静态库的制作
  • 雷卯针对香橙派Orange Pi 5 Ultra开发板防雷防静电方案
  • riscv中断处理软硬件流程总结
  • AOP配置类自动注入
  • 高级堆结构
  • 机器人经验学习1 杂记