机器学习中几种优化算法的比较(SGD、Momentum、RMSProp、Adam)
有关各种优化算法的详细算法流程和公式可以参考【这篇blog】,讲解比较清晰,这里说一下自己对他们之间关系的理解。
BGD 与 SGD
首先,最简单的 BGD 以整个训练集的梯度和作为更新方向,缺点是速度慢,一个 epoch 只能更新一次模型参数。
SGD 就是用来解决这个问题的,以每个样本的梯度作为更新方向,更新次数更频繁。但有两个缺点:
- 更新方向不稳定、波动很大。因为单个样本有很大的随机性,单样本的梯度不能指示参数优化的大方向。
- 所有参数的学习率相同,这并不合理,因为有些参数不需要频繁变化,而有些参数则需要频繁学习改进。
第一个问题
Mini-batch SGD 和 Momentum 算法做出的改进主要是用来解决第一个问题。
Mini-batch SGD 算法使用一小批样本的梯度和作为更新方向,有效地稳定了更新方向。
Momentum 算法则设置了动量(momentum)的概念,可以理解为惯性,使当前梯度小幅影响优化方向,而不是完全决定优化方向。也起到了减小波动的效果。
第二个问题
AdaGrad 算法做出的改进用来解决第二个问题,其记录了每个参数的历史梯度平方和(平方是 element-wise 的),并以此表征每个参数变化的剧烈程度,继而自适应地为变化剧烈的参数选择更小的学习率。
但 AdaGrad 有一个缺点,即随着时间的累积每个参数的历史梯度平方和都会变得巨大,使得所有参数的学习率都急剧缩小。
RMSProp 算法解决了这个问题,其采用了一种递推递减的形式来记录历史梯度平方和,可以观察其表达式:早期的历史梯度平方和会逐渐失去影响力,系数逐渐衰减。
Adam
简单来讲 Adam 算法就是综合了 Momentum 和 RMSProp 的一种算法,其既记录了历史梯度均值作为动量,又考虑了历史梯度平方和实现各个参数的学习率自适应调整,解决了 SGD 的上述两个问题。
机器学习中几种优化算法的比较(SGD、Momentum、RMSProp、Adam)的更多相关文章
- 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam
Coursera吴恩达<优化深度神经网络>课程笔记(2)-- 优化算法 深度机器学习中的batch的大小 深度机器学习中的batch的大小对学习效果有何影响? 1. Mini-batch ...
- 详解Oracle数据货场中三种优化:分区、维度和物化视图
转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的 ...
- zz:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
首先定义:待优化参数: ,目标函数: ,初始学习率 . 而后,开始进行迭代优化.在每个epoch : 计算目标函数关于当前参数的梯度: 根据历史梯度计算一阶动量和二阶动量:, 计算当前时刻的下降 ...
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法 机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着 ...
- 优化方法总结以及Adam存在的问题(SGD, Momentum, AdaDelta, Adam, AdamW,LazyAdam)
优化方法总结以及Adam存在的问题(SGD, Momentum, AdaDelta, Adam, AdamW,LazyAdam) 2019年05月29日 01:07:50 糖葫芦君 阅读数 455更多 ...
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam) 深度学习笔记(一):logistic分类 深度学习笔记(二):简单神经网络,后向传播算法及实现 ...
- java开发过程中几种常用算法
排序算法 排序算法中包括:简单排序.高级排序 简单排序 简单排序常用的有:冒泡排序.选择排序.插入排序 冒泡排序代码如下: private static void bubbleSrot(int[] a ...
- Caffe源码-几种优化算法
SGD简介 caffe中的SGDSolver类中实现了带动量的梯度下降法,其原理如下,\(lr\)为学习率,\(m\)为动量参数. 计算新的动量:history_data = local_rate * ...
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x,使得f(x)的值最小. 本文以下内容假设读者已经了解机器学习基本知识,和梯度下降的原理. Batch gradient d ...
随机推荐
- fedora27安装后的配置工作(持续更新)
换源 没什么可说的,安装后更换国内软件源是必须做的事,推荐更换阿里的镜像源.换源教程 添加epel源 EPEL (Extra Packages for Enterprise Linux)是基于Fedo ...
- 乘风破浪:LeetCode真题_037_Sudoku Solver
乘风破浪:LeetCode真题_037_Sudoku Solver 一.前言 这次我们对于上次的模型做一个扩展并求解. 二.Sudoku Solver 2.1 问题 2.2 分析与解决 这道题 ...
- 另开一篇 https
https 流程 1.加密传输:对称加密传输信息 2.身份认证:非对称加密.通过证书来保障客户端给服务器的密钥唯一性. 因为中间层要是伪装公钥和证书,但是又无法解密原有的发送的数据,那么发给服务器的数 ...
- 代理工具--mitmproxy
#代理工具 mitmproxy 指令:mitmproxy -b ip -p port(代理ip设置为:ip,端口设置为:port) 拦截request: 输入字母“i”(代表Intercept fil ...
- Python接口自动化--requests 2
# _*_ encoding:utf-8 _*_ import json import requests #post请求 payload = {"cindy":"hell ...
- Nescafe #29 NOIP模拟赛
Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...
- HtmlUnit
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.是一个没有界面的浏览器,运行速 ...
- Spark项目之电商用户行为分析大数据平台之(十二)Spark上下文构建及模拟数据生成
一.模拟生成数据 package com.bw.test; import java.util.ArrayList; import java.util.Arrays; import java.util. ...
- docker-compose运行Rails
1.新建空目录,名字可以叫Rails 2.新建Dockerfile并添加如下内容 FROM ruby:2.5 RUN apt-get update -qq && apt-get ins ...
- Java IO详解(三)------字节输入输出流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...