• 梯度下降优化算法


    在这里插入图片描述

    一、简介

    在这里插入图片描述

    二、梯度下降方法

    一般线性回归函数的假设函数为:
    在这里插入图片描述以平方差损失函数的形式为例:
    在这里插入图片描述

    2.1 批量梯度下降法BGD

    批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新,其数学形式如下:

    (1) 对上述的损失函数求偏导:
      
    在这里插入图片描述
      (2) 由于是最小化风险函数,所以按照每个参数θ的梯度负方向来更新每个θ:

    在这里插入图片描述
    具体的伪代码形式为:
    在这里插入图片描述

    优缺点:

    1. 在凸优化(Convex Optimization)的情况下,一定会找到最优解
    2. 在非凸优化的情况下,一定能找到局部最优解
    3. 由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢,单次参数调整计算量大
    4. 不适合在线(Online)的情况

    2.2 随机梯度下降法SGD

    随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。
    利用每个样本的损失函数对θ求偏导得到对应的梯度,来更新θ:
    在这里插入图片描述
    具体的伪代码形式为:
    在这里插入图片描述优缺点:

    1. 训练速度快,适合Online的情况
    2. 通常比批处理梯度下降法快(在批处理的情况下,有可能许多的数据点产生的梯度是相似的,这些计算是冗余的,并不会有实际的帮助) .
    3. 通常目标函数震荡严重.在神经网络优化情况下(没有全局最优解),这种震荡反而有可能让它避免被套牢在一个局部最小值,而找到更好的局部最优解
    4. 通过调节学习率,能够找到和批处理相似的局部或者全局最优解
      在这里插入图片描述

    2.3 小批量梯度下降法MBGD

    有上述的两种梯度下降法可以看出,其各自均有优缺点,那么能不能在两种方法的性能之间取得一个折衷呢?即,算法的训练过程比较快,而且也要保证最终参数训练的准确率,而这正是小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)的初衷。

    • MBGD在每次更新参数时使用b个样本,其具体的伪代码形式为
    • 具体的伪代码形式为:

    在这里插入图片描述
    优缺点:

    1. 结合了批处理和随机梯度下降法的优点
    2. 减弱了目标函数震荡,更加稳定
    3. ,常用的机器学习库都利用了这个特性提供了高性能的计算速度
    4. 一般的迷你批大小为50至256,取决于不同的应用

    三、传统梯度下降法面临的挑战

    • 传统迷你批处理不能保证能够收敛
    • 当学习率太小,收敛会很慢,学习率太高容易震荡,甚至无法收敛
    • 可以按照某个公式随着训练逐渐减小学习率,但是不同的数据集需要不同的学习率变化曲线,不容易估计
    • 所有的参数使用同样的学习率并不合适
    • 容易被套牢在马鞍点
      在这里插入图片描述

    四、改进的梯度下降算法

    4.1 Momentum

    原理:

    • 不同dimension的变化率不一样
    • 动量增强梯度在某一维度上的投影,使其指向同一方向上,在维度的指向上抵消不断变化的方向

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

    4.2 Nesterov accelerated gradient

    • 动量+预测的前方的梯度
      在多个RNN的任务中表现突出
      在这里插入图片描述
    前面的算法是整体提升梯度下降法的速度,接下来的算法是针对各个参数采用不同的策略

    4.3 Adagrad

    • 对频繁出现的参数,采用小的步长
    • 对不频繁出现的参数,采用大的步长
    • 对稀疏数据集非常有用(文本数据). Google在训练从Youtube视频自动识别猫用到了. Pennington et al训练词嵌入的GloVe也用到了
      在这里插入图片描述
    • 优势:
    1. 无需手动调整learning rate步长
    2. 设置初始步长为0.01即可
    • 劣势:
    1. 随着训练,分母总是增大,步长会越来越小,算法无法收敛
    • 实现:
    1. 只是累积过去的一段时间的梯度平方值
    2. 完全无需设置步长
    3. 为了便于实现,采用类使用动量的策略:
      在这里插入图片描述在这里插入图片描述

    4.4 RMSprop

    在这里插入图片描述

    4.5 Adam

    记录过去一段时间的梯度平方和(类似Adadelta和RMSprop),以及梯度的和(类似Momentum动量)把优化看作铁球滚下山坡, Adam定义了一个带动量和摩擦的铁球
    在这里插入图片描述

    4.6 对比与选择

    • 1.如果数据集是稀疏的,选择自适应学习率的方法会更快收敛,而且免去了需要调试学习率的烦恼
    • 2.RMSprop, Adadelta, Adam的效果非常相似,大多数情况下Adam略好

    五、Tips

    在这里插入图片描述

  • 相关阅读:
    ecshop php商城系统数据库结构及表的介绍分析
    laravel clone后需要做的操作
    十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的
    PHP 实现过滤参数字符的方法
    Antd Modal 可拖拽移动
    golang /js index 转换excel字母表头
    React 父组件调用子组件的方法
    React ant table 用 XLSX 导出excel文件
    css3 做出顶边倾斜的 梯形 div
    Windows10 office 点击链接提示您的组策略阻止我们为您完成此操作。设置ChromeHTML也无效.
  • 原文地址:https://www.cnblogs.com/long5683/p/12885754.html
Copyright © 2020-2023  润新知