new optimization

2024-05-01 11:08
文章标签 new optimization

本文主要是介绍new optimization,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

new optimizer for deep learning

1、SGD

2、SGD with momentum

前一步的累积会移动到下一步当中,就算达到鞍点和局部最低点,带有动量的SGD还是会继续前行,下一步的movement等于: -u*梯度+v*动量

3、Adagrad

即在梯度方向乘了一个数,如果过去的梯度很大,就要降低学习率,因为梯度很大,说明在一个很崎岖的路上寻找全局最低,比如上面图的绿色方向,梯度比较大,所以需要用一个比较小的学习率

4、RMSProp

原理和Adagrad很像,同时借用了Momentum的思想;Adagrad的分母是不断累加的,加入一开始就很大,导致后面学习率特别小,而RMSprop在时间上有缓冲,上式中的vt表示的就是EMA (exponential moving  average)of gradient is not monotonically increasing 不会永无止尽的增加。

5、Adam

之前的算法无法解决初始化的梯度就为0 的情况

example:BERT\ Transformer

 

Adam:在训练集上达到很好成绩,SGD+momentum在验证集有很好的成绩

原因:其中一个原因是Adam能够在比较sharp 的地方找到minimum,相反SGDM在flat的地方找到

ADAM因为能够动态地调整学习率,所以收敛速度很快,而SGDM没有这样的效果

 

 

 

SWATS:先使用Adam(比较快),再使用SGDM

问题1:什么时候切换

问题2:学习率怎么改变

 

Adam有个trouble,当训练的开始阶段,梯度会很小而且没有什么信息,这时候梯度就是漫无目的的走,但是当梯度很大的时候,因为有之前的影响,导致movement不会很大,最大也只会是\sqrt{\frac{1}{1-\beta _{2}}}\eta,作者的改进方法是AMSGrad,AMSGrad中的V在现在的V和上一次的V中选最大值,减小了无意义的梯度(Adam梯度小,但是学习率大)影响。

 

AdaBound是对学习率设置边界,有 上界和下界,相比较于AMSGrad,即能处理很大的学习率,又能处理小学习率

ADAM:因为能够动态地调整学习率,所以收敛速度很快,而SGDM没有这样的效果,因此可以从SGDM进行调整

 

LR range:不断调整学习率来寻找最好的学习率

不断地调大调小学习率,另外两种方法:

 

 

这篇关于new optimization的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951528

相关文章

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python中__new__()方法适应及注意事项详解

《Python中__new__()方法适应及注意事项详解》:本文主要介绍Python中__new__()方法适应及注意事项的相关资料,new()方法是Python中的一个特殊构造方法,用于在创建对... 目录前言基本用法返回值单例模式自定义对象创建注意事项总结前言new() 方法在 python 中是一个

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

List list = new ArrayList();和ArrayList list=new ArrayList();的区别?

List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。 List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了A

vue原理分析(六)--研究new Vue()

今天我们来分析使用new Vue() 之前研究时,只是说是在创建一个实例。并没有深入进行研究 在vue的源码中找下Vue的构造函数 function Vue(options) {if (!(this instanceof Vue)) {warn$2('Vue is a constructor and should be called with the `new` keyword');}thi

GTK中创建线程函数g_thread_new和g_thread_create的区别

使用GThread函数,需要引用glib.h头文件。 这两个接口的核心区别就是  g_thread_create 是旧的接口,现在已经不使用了,而g_thread_new是新的接口,建议使用。 g_thread_create: g_thread_create has been deprecated since version 2.32 and should not be used in n

New的VC编译器实现

当我们调用 new 的时候,例如 int *p = new int; 时,编译器到底作了什么工作呢?跟进断点看一看。   (在 vc debug模式下 ) double *p1 = new double ; 00411A6E  push        8    00411A70  call        operator new (4111B8h) 00411A75  add

Python方法:__init__,__new__,__class__的使用详解

转自:https://blog.csdn.net/qq_26442553/article/details/82464682 因为python中所有类默认继承object类。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际