梯度下降法的理解以及马鞍点
一、梯度下降优化算法的进化
1、梯度下降法
- 梯度下降法是训练神经网络常用的优化算法
- 梯度下降法基于以下的观察:如果实值函数f(x)在a点处可微且有定义,那么函数f(x)在点a沿着梯度相反的方向−∇f(a)-\nabla f(a)−∇f(a)下降最快。
θ=θ−η∗∇θJ(θ)\theta = \theta - \eta*\nabla_\theta J(\theta)θ=θ−η∗∇θJ(θ)
下面是一个二维的梯度优化算法的可视化图:
2、批梯度下降法
批梯度下降法:把所有的数据都遍历一遍,计算每个数据的梯度,然后将所有数据的梯度加起来,求平均,使用平均梯度更新参数值,然后进行下次迭代。
将所有的数据都计算完之后,更新一次参数,也就是每个eopch更新一次。
特点:
- 在凸优化的情况下,一定会找到最优解;
- 在非凸优化情况下,一定能找到局部最优解;
- 不适合在线求解
3、随机梯度下降法
随机梯度下降法:每个epoch中,都将数据随机打乱,然后把所有数据遍历一遍,计算每个数据梯度,用这个梯度对参数进行更新。
每计算一个数据,更新一次参数。
特点:
- 适合online的情况;
- 目标函数震荡严重,在神经网络优化情况下,没有全局最优解,这种震荡反而有可能让它避免被套牢在一个局部最优解,而找到更好的局部最优解;
- 通常比批处理梯度下降法快,在批处理的情况下,有可能许多的数据点产生的
梯度是相似的,这些计算是冗余的,并不会有实际的帮助;
4、mini-batch梯度下降法
mini-batch梯度下降法:每个epoch中,然后遍历数据,每次取mini-batch大小的数据,计算这个mini-batch的梯度,然后求平均值,通过这个梯度平均值,更新参数。
特点:
- 结合了批处理和随机梯度下降的优点;
- 减弱了目标函数震荡,更加稳定;
- 易于硬件加速实现
批量大小选择:
- 在迷你批量梯度下降法中,批量大小对网络优化的影响也非常大;
- 一般而言,批量大小不影响随机p梯度的期望,但是会影响随机梯度的方差;
- 批处理size 越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率;
- 批量大小较小时,需要设置较小的学习率,否则模型不会收敛,学习率通常要随着批量大小的增大而相应地增大。
学习率:
学习率在一开始要保持大些来保证收敛速度,在收敛到最优点附近,要小些,避免来回震荡。
学习率预热:
- 在mini-batch下降法中,当batch size的设置比较大时,通常需要比较大的学习率,但在刚开始训练时,由于参数是随机初始化的,梯度往往也比较大,再加上比较大的初始学习率,会使得训练不稳定;
- 为了提高训练的稳定性,可以在最初几轮迭代时,采用比较小的学习率。等梯度下降到一定程度后再恢复到最初的学习率,这种方法称为学习率预热;
周期性学习率调整:
- 为了使得梯度下降法能够逃离局部最小值或是鞍点,一种经验性的方式是在训练过程中周期性地增大学习率。虽然增加学习率可能短期内有损网络的收敛稳定性,但从长期来看有助于找到更好的局部最优解。
- 周期性学习率调整可以使得梯度下降方法在优化过程中跳出尖锐的局部最小值,虽然会短期内会损害优化过程,但最终会收敛到更加理想的局部极小值。
二、mini-batch梯度下降法面临的挑战
- mini-batch梯度下降法不能够保证收敛
- 学习率不知道要多大,太小收敛会很慢,太大会震荡
- 有很多中调整学习率的策略,但是不同的数据,学习率调整策略可能不同,不容易估计
- 所有的参数使用同样的学习率并不合适
- 容易被套牢在马鞍点
深度网络中的局部最优和马鞍点:
优化算法的目标是快速收敛,找到全局最优,凸优化问题中局部最优解同时也是全局最优解,此时采用梯度下降算法是可以收敛到最优点的,因为沿着下坡的通道走,就可以了。但是在实际的深度学习模型是一个庞大的非线性结构,一般是非凸函数,存在很多局部最优点,所以使用梯度下降法很容易陷入到局部最优,这个不仅仅是梯度下降法面临的一个问题,陷入局部最优可以采用周期性调整学习率来帮助其从局部最优中跳出来。深度学习的参数很庞大,其损失函数已经成为了超高维空间,对于高维空间,非凸函数最大的存在不是局部最优点,而是马鞍点,马鞍点也是梯度为0的点,但是它不像局部最优点或者全局最优点,对于局部最优点或者全局最优点,取周围所有方向要朝上(最小)或者朝上(最大),但是考虑到参数庞大,很有可能是一部分朝下,一部分朝上,这个就成为了马鞍点,下图是模拟的存在马鞍点的函数,实心红点就是一个马鞍点:
梯度下降法的理解以及马鞍点相关推荐
- 梯度下降 最小二乘法 matlab,最小二乘法和梯度下降法的理解
最小二乘法 在线性回归中,听的最多的应该算是最小二乘法了.最小二乘法在具体实现过程中保留核心思想的同时,会在算法上进行不同程度的改进,因此,最小二乘法有很多演变体,例如:递推最小二乘法,加权最小二乘法 ...
- 机器学习中的梯度下降法
1. 机器学习中为什么需要梯度下降 梯度下降是机器学习中常见优化算法之一,梯度下降法有以下几个作用: (1)梯度下降是迭代法的一种,可以用于求解最小二乘问题. (2)在求解机器学习算法的模型参数,即无 ...
- 梯度下降法、最速下降法
梯度下降法 最优化问题是求解函数极值的问题,包括极大值和极小值.相信所有的读者对这个问题都不陌生,在初中时我们就学会了求解二次函数的极值(抛物线的顶点),高中时学习了幂函数,指数函数,对数函数,三角函 ...
- 批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
在机器学习中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便找到最优的参数. 梯度下降法作为机器学习中较常使用的优化算法,在其求解过程中,只需要求解 ...
- 详解批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
在应用机器学习算法时,我们常采用梯度下降法来对才用的算法进行训练.梯度下降法有三种不同的形式:批量梯度下降(Batch Gradient Descent).随机梯度下降(Stochastic Grad ...
- 随机梯度下降法_动量梯度下降法(gradient descent with momentum)
简介 动量梯度下降法是对梯度下降法的改良版本,通常来说优化效果好于梯度下降法.对梯度下降法不熟悉的可以参考梯度下降法,理解梯度下降法是理解动量梯度下降法的前提,除此之外要搞懂动量梯度下降法需要知道原始 ...
- 人工智能与机器学习-梯度下降法
人工智能与机器学习-梯度下降法 一.梯度下降法概述 梯度下降法(Gradient descent)是一个一阶最优化算法. 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近 ...
- 梯度下降法的三种形式BGD、SGD、MBGD及python实现
前言 梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(Batch Gradient Descent).随机梯度下降(Stochastic Gradient Descen ...
- python实现之梯度下降法
基于前文关于梯度下降法的理解,用python实现梯度下降求解,不过本文不具有通用性,关于求导缺乏通用性,关于梯度也未考虑很多因素,可以看到学习率很低,则收敛较慢,需要大量时间学习,学习率很高,则收敛很 ...
最新文章
- SAP MM MIGO界面‘Where’标签页里的storage bin
- 2017-2018互联网类脑巨系统研究报告,互联网大脑、城市云脑和AI
- 爬虫,如何防止被ban之策略大集合
- numpy delete
- Chrome 插件开发-主动获取所有页签的tabid,background.js直接向所有页签同步传递消息
- boost::hana::slice_c用法的测试程序
- html表单赋值提交,jQuery自动给表单赋值
- PHP遍历数组的几种方法
- JDBC出现这个错误的解决办法Connections could not be acquired from the underlying database!
- Linux命令之查看文件内容
- bash shell简介及变量
- 图卷积网络详细介绍(二)
- 机器学习建模的问题大全
- 计量芯片应用心得之软件篇
- win10 tensorflow-gpu1.4 rtx2060 安装详细教程 fater-rcnn
- 【前端优化】超详细!带你体验常用的前端优化手段
- 21版本FL Studio水果音乐制作软件下载
- 全志A40i及全志T3开发板 对CAN的支持补充
- Mysql传智jing_dong数据库
- 企业管理概论试题库【1】
热门文章
- 使用蒙特卡洛思想解决三门问题(Java和Python实现)
- python和nltk自然语言处理 pdf_NLTK基础教程:用NLTK和Python库构建机器学习应用 完整版pdf...
- 封装一个活灵活现的原生JS排序,js按照拼音排序,js按照“数字-字符串-汉字拼音”排序,数组对象排序,数组排序微调即可
- 佳能Canon PIXMA MG4170 打印机驱动
- 案例部署——GlusterFS分布式文件系统群集
- flex中dataGrid的编辑功能
- react中将json对象转换为数组
- 前端面试题之JavaScript
- Java虚拟机—JVM
- python3.8.1中文开发文档