| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> [人工智能-深度学习-15]:神经网络基础 - 常见优化器Optimizer及其算法 - 梯度下降法系列 -> 正文阅读 |
|
[人工智能][人工智能-深度学习-15]:神经网络基础 - 常见优化器Optimizer及其算法 - 梯度下降法系列 |
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/details/120589554 目录 2.1? 什么是梯度下降法(Gradient Descent) 3.2?Nesterov accelerated gradient (NAG) 第1章 什么是优化算法1.1 机器学习模型与优化算法在机器学习模型中的位置1.2 什么是优化器优化器在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确的方向进行适合的更新,使得更新后的各个参数让损失函数(目标函数)值不断逼近全局最小。 换句话说: 优化器目的:就是针对指定的损失函数,通过计算机数值计算的方法,求损失函数最小值,以及在最小值时候的各种参数值(W, B参数)。 优化器手段:获取最小值的方法,是用计算机数值计算的方法,而不是用解析的方法。 1.3 什么是优化算法寻找损失函数的最小值的方法有很多种,这些方法统称为优化算法。 优化器,就是定义某种算法,通过自动调整模型的参数,使得模型的预测值(输出值)与样本值之间的误差和是最小的,就求loss函数的最小值数值方法(计算机求极小值的算法)。 1.4 优化算法的核心思想优化算法核心的手段就是:通过损失函数的导数(梯度),经过一次次的迭代,最终找到损失函数的最小值。 1.5 损失函数的几何图形?(1)一元函数的loss函数 (只有一个W参数)
?(2)多元函数的loss函数(多个W,B参数 ) 1.6 损失函数具有最小值的条件并非所有的函数都有最小值,有最小值的函数,必须满足如下的条件: ? 第2章 基础版梯度下降法:独立可变梯度2.1? 什么是梯度下降法(Gradient Descent)梯度下降法是最基本的一类优化器,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法。 基本策略可以理解为”在有限视距内寻找最快路径下山“,因此每走一步,参考当前位置最陡的方向(即梯度)进而迈出下一步。可以形象的表示为: 2.2 三种基本版梯度下降法目前主要分为三种同源的梯度下降法,他们之前的区别在于一次迭代所需要的样本的数量 (1)标准梯度下降法(GD, Gradient Descent):每次迭代计算,使用所有的样本。 θ=θ?η??θJ(θ) (2)随机梯度下降法(SGD, Stochastic Gradient Descent),每次迭代计算,使用有限个随机样本。 θ=θ?η??θJ(θ;x(i);y(i)) (3)批量梯度下降法(BGD, Batch Gradient Descent),每次迭代,所有样本中的一组样本。 θ=θ?η??θJ(θ;x(i:i+n);y(i:i+n)) 第3章?加强版梯度下降法:带一阶动量的梯度动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用。 一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。 3.1 MomentumMomentum是模拟物理里动量的概念,积累之前的梯度(称为动量)来替代真正的梯度,并作为当的梯度。即在正确梯度方向上加速,并且抑制波动方向张的波动大小,在后期本次计算出来的梯度会很小,以至于无法跳出局部极值,Momentum方法也可以帮助跳出局部极值。 3.2?Nesterov accelerated gradient (NAG)? ?NAG方法收敛速度明显加快。波动也小了很多。 第4章 自适应学习率梯度下降法:学习率与自身的梯度自相关前面的一系列优化算法有一个共同的特点,就是对于每一个参数都用相同的学习率进行更新。 但是在实际应用中各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。 4.1? Adagrad自适应梯度:历史平均adagrad方法是将每一个参数的每一次迭代的梯度取平方累加再开方,用基础学习率除以这个数,来做学习率的动态更新。 这样一来,每一个参数的学习率就与他们自身的梯度有关系了,那么每一个参数的学习率就不一样了!也就是所谓的自适应学习率。 Adagrad的一大优势时可以避免手动调节学习率,比如设置初始的缺省学习率为0.01,然后就不管它,另其在学习的过程中自己变化。当然它也有缺点,就是它计算时要在分母上计算梯度平方的和,由于所有的参数平方【上述公式推导中并没有写出来是梯度的平方,感觉应该是上文的公式推导忘了写】必为正数,这样就造成在训练的过程中,分母累积的和会越来越大。这样学习到后来的阶段,网络的更新能力会越来越弱,能学到的更多知识的能力也越来越弱,因为学习率会变得极其小【就会提前停止学习】,为了解决这样的问题又提出了Adadelta算法。 4.2 Adadelta:平滑平均Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项【其实就是相当于指数滑动平均,只用了前多少步的梯度平方平均值】,并且也不直接存储这些项,仅仅是近似计算对应的平均值【这也就是指数滑动平均的优点】 第5章 带二阶动态的梯度下降法5.1 RMSpropRMSProp算法的全称叫 Root Mean Square Prop, 在上面的Momentum优化算法中,虽然初步解决了优化中摆动幅度大的问题。所谓的摆动幅度就是在优化中经过更新之后参数的变化范围,如下图所示,蓝色的为Momentum优化算法所走的路线,绿色的为RMSProp优化算法所走的路线。? 为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法对权重?W?和偏置 B?的梯度使用了微分平方加权平均数。? 5.2?AdamAdam = Adaptive + Momentum,顾名思义Adam集成了SGD的一阶动量和RMSProp的二阶动量。 SGD可以使用类似于物理中的动量来累积梯度,RMSProp可以使得收敛速度更快同时使得波动的幅度更小。Adam把它们的优点结合起来,以取得的更好的表现效果。 第6章 不同优化算法的直观比较图 3 中,我们可以看到不同算法在损失面等高线图中的学习过程,它们均同同一点出发,但沿着不同路径达到最小值点。其中 Adagrad、Adadelta、RMSprop 从最开始就找到了正确的方向并快速收敛;SGD 找到了正确方向但收敛速度很慢;SGD-M 和 NAG 最初都偏离了航道,但也能最终纠正到正确方向,SGD-M 偏离的惯性比 NAG 更大。 图 4 展现了不同算法在鞍点处的表现。这里,SGD、SGD-M、NAG 都受到了鞍点的严重影响,尽管后两者最终还是逃离了鞍点;而 Adagrad、RMSprop、Adadelta 都很快找到了正确的方向。 不同算法,主要区别在于:
提速又可以归纳为以下几个方面: 作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/details/120589554 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 12:57:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |