深度学习里面的而优化函数

深度学习中的激活函数、损失函数、优化算法 深度学习中的激活函数、损失函数、优化算法DL小将激活函数sigmoidtanhrelugelusoftmax损失函数分类问题常用的损失函数回归问题常用的损失函数优化算法随机梯度下降SGDAdam牛顿法 DL小将 本文对深度学习中的激活函数、损失函数和常用到的优化算法进行总结分析、记录学习。优化算法用来更新模参数,经过一系列计算并通过激活函数得到的输出可以用于计算损失函数,目标是使损失函数尽可能小。 激活函数 现实生活中真实数据之间往往是复杂的非线性的关系,而不是简单的线性关系。深度学习中通过神经元的计算往往 阅读详情

https://mp.weixin.qq.com/s/xm4MuZm-6nKTn2eE3eNOlg

(一)一个框架看懂优化算法

“ 说到优化算法,入门级必从 SGD 学起,老司机则会告诉你更好的还有AdaGrad / AdaDelta,或者直接无脑用 Adam。可是看看学术界的最新 paper,却发现一众大神还在用着入门级的 SGD,最多加个 Momentum 或者 Nesterov,还经常会黑一下 Adam。这是为什么呢?”

机器学习界有一群炼丹师,他们每天的日常是:

拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了。

不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了,这出来的口味可是千差万别。火小了夹生,火大了易糊,火不匀则半生半糊。

机器学习也是一样,模型优化算法的选择直接关系到最终模型的性能。有时候效果不好,未必是特征的问题或者模型设计的问题,很可能就是优化算法的问题。

说到优化算法,入门级必从 SGD 学起,老司机则会告诉你更好的还有 AdaGrad / AdaDelta,或者直接无脑用 Adam。可是看看学术界的最新 paper,却发现一众大神还在用着入门级的 SGD,最多加个 Momentum 或者 Nesterov,还经常会黑一下Adam。比如 UC Berkeley 的一篇论文就在 Conclusion 中写道:

Despite the fact that our experimental evidence demonstrates that adaptive methods are not advantageous for machine learning, the Adam algorithm remains incredibly popular. We are not sure exactly as to why ……

无奈与酸楚之情溢于言表。

这是为什么呢?难道平平淡淡才是真?

 

01 一个框架回顾优化算法

首先我们来回顾一下各类优化算法。

深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程。Google一下就可以看到很多的教程文章,详细告诉你这些算法是如何一步一步演变而来的。在这里,我们换一个思路,用一个框架来梳理所有的优化算法,做一个更加高屋建瓴的对比。

优化算法通用框架

首先定义:待优化参数:w ,目标函数: f(w),初始学习率 α。而后,开始进行迭代优化。在每个epoch t:

1. 计算目标函数关于当前参数的梯度: 

 

 2. 根据历史梯度计算一阶动量和二阶动量:

 3. 计算当前时刻的下降梯度: 

4. 根据下降梯度进行更新:  

 

掌握了这个框架,你可以轻轻松松设计自己的优化算法。

我们拿着这个框架,来照一照各种玄乎其玄的优化算法的真身。步骤3、4对于各个算法都是一致的,主要的差别就体现在1和2上。

 

02 固定学习率的优化算法

SGD

先来看SGD。SGD没有动量的概念,也就是说:

代入步骤3,可以看到下降梯度就是最简单的

SGD最大的缺点是下降速度慢,而且可能会在沟壑的两边持续震荡,停留在一个局部最优点。

SGD with Momentum

为了抑制SGD的震荡,SGDM认为梯度下降过程可以加入惯性。下坡的时候,如果发现是陡坡,那就利用惯性跑的快一些。SGDM全称是SGD with momentum,在SGD基础上引入了一阶动量:

一阶动量是各个时刻梯度方向的指数移动平均值,约等于最近 1/(1-β1) 个时刻的梯度向量和的平均值。

也就是说,t 时刻的下降方向,不仅由当前点的梯度方向决定,而且由此前累积的下降方向决定。β1的经验值为0.9,这就意味着下降方向主要是此前累积的下降方向,并略微偏向当前时刻的下降方向。想象高速公路上汽车转弯,在高速向前的同时略微偏向,急转弯可是要出事的。

SGD with Nesterov Acceleration

SGD 还有一个问题是困在局部最优的沟壑里面震荡。想象一下你走到一个盆地,四周都是略高的小山,你觉得没有下坡的方向,那就只能待在这里了。可是如果你爬上高地,就会发现外面的世界还很广阔。因此,我们不能停留在当前位置去观察未来的方向,而要向前一步、多看一步、看远一些。

(source: http://cs231n.github.io/neural-networks-3)

这一方法也称为NAG,即 Nesterov Accelerated Gradient,是在SGD、SGD-M 的基础上的进一步改进,改进点在于步骤 1。我们知道在时刻 t 的主要下降方向是由累积动量决定的,自己的梯度方向说了也不算,那与其看当前梯度方向,不如先看看如果跟着累积动量走了一步,那个时候再怎么走。因此,NAG在步骤 1,不计算当前位置的梯度方向,而是计算如果按照累积动量走了一步,那个时候的下降方向: 

然后用下一个点的梯度方向,与历史累积动量相结合,计算步骤 2 中当前时刻的累积动量。

03 自适应学习率的优化算法

此前我们都没有用到二阶动量。二阶动量的出现,才意味着“自适应学习率”优化算法时代的到来。SGD及其变种以同样的学习率更新每个参数,但深度神经网络往往包含大量的参数,这些参数并不是总会用得到(想想大规模的embedding)。

对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。

AdaGrad

怎么样去度量历史更新频率呢?那就是二阶动量——该维度上,迄今为止所有梯度值的平方和:

我们再回顾一下步骤3中的下降梯度:

可以看出,此时实质上的学习率由变成了。 一般为了避免分母为0,会在分母上加一个小的平滑项。因此是恒大于0的,而且参数更新越频繁,二阶动量越大,学习率就越小。

这一方法在稀疏数据场景下表现非常好。但也存在一些问题:因为是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。

AdaDelta / RMSProp

由于AdaGrad单调递减的学习率变化过于激进,我们考虑一个改变二阶动量计算方法的策略:不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度。这也就是AdaDelta名称中Delta的来历。

修改的思路很简单。前面我们讲到,指数移动平均值大约就是过去一段时间的平均值,因此我们用这一方法来计算二阶累积动量:

这就避免了二阶动量持续累积、导致训练过程提前结束的问题了。

Adam

谈到这里,Adam和Nadam的出现就很自然而然了——它们是前述方法的集大成者。我们看到,SGD-M在SGD基础上增加了一阶动量,AdaGrad和AdaDelta在SGD基础上增加了二阶动量。把一阶动量和二阶动量都用起来,就是Adam了——Adaptive + Momentum。

SGD的一阶动量:

加上AdaDelta的二阶动量:

优化算法里最常见的两个超参数就都在这里了,前者控制一阶动量,后者控制二阶动量。

Nadam

最后是Nadam。我们说Adam是集大成者,但它居然遗漏了Nesterov,这还能忍?必须给它加上——只需要按照NAG的步骤1来计算梯度:

这就是Nesterov + Adam = Nadam了。

说到这里,大概可以理解为什么说 Adam / Nadam 目前最主流、最好用的算法了。无脑用Adam/Nadam,收敛速度嗖嗖滴,效果也是杠杠滴。

那为什么Adam还老招人黑,被学术界一顿鄙夷?难道只是为了发paper灌水吗?

(二)Adam的两宗罪

“一代又一代的研究者们为了我们能炼(xun)好(hao)金(mo)丹(xing)可谓是煞费苦心。从理论上看,一代更比一代完善,Adam/Nadam已经登峰造极了,为什么大家还是不忘初心SGD呢?”

以上内容中,我们用一个框架来回顾了主流的深度学习优化算法。可以看到,一代又一代的研究者们为了我们能炼(xun)好(hao)金(mo)丹(xing)可谓是煞费苦心。从理论上看,一代更比一代完善,Adam/Nadam已经登峰造极了,为什么大家还是不忘初心SGD呢?

举个栗子。很多年以前,摄影离普罗大众非常遥远。十年前,傻瓜相机开始风靡,游客几乎人手一个。智能手机出现以后,摄影更是走进千家万户,手机随手一拍,前后两千万,照亮你的美(咦,这是什么乱七八糟的)。但是专业摄影师还是喜欢用单反,孜孜不倦地调光圈、快门、ISO、白平衡……一堆自拍党从不care的名词。技术的进步,使得傻瓜式操作就可以得到不错的效果,但是在特定的场景下,要拍出最好的效果,依然需要深入地理解光线、理解结构、理解器材。

优化算法大抵也如此。在上一篇中,我们用同一个框架让各类算法对号入座。可以看出,大家都是殊途同归,只是相当于在SGD基础上增加了各类学习率的主动控制。如果不想做精细的调优,那么Adam显然最便于直接拿来上手。

但这样的傻瓜式操作并不一定能够适应所有的场合。如果能够深入了解数据,研究员们可以更加自如地控制优化迭代的各类参数,实现更好的效果也并不奇怪。毕竟,精调的参数还比不过傻瓜式的SGD,无疑是在挑战顶级研究员们的炼丹经验!

最近,不少paper开怼Adam,我们简单看看都在说什么:

04 Adam罪状一:可能不收敛

这篇是正在深度学习领域顶级会议之一 ICLR 2018 匿名审稿中的一篇论文《On the Convergence of Adam and Beyond》,探讨了Adam算法的收敛性,通过反例证明了Adam在某些情况下可能会不收敛。

回忆一下上文提到的各大优化算法的学习率:

其中,SGD没有用到二阶动量,因此学习率是恒定的(实际使用过程中会采用学习率衰减策略,因此学习率递减)。AdaGrad的二阶动量不断累积,单调递增,因此学习率是单调递减的。因此,这两类算法会使得学习率不断递减,最终收敛到0,模型也得以收敛。

但AdaDelta和Adam则不然。二阶动量是固定时间窗口内的累积,随着时间窗口的变化,遇到的数据可能发生巨变,使得 可能会时大时小,不是单调变化。这就可能在训练后期引起学习率的震荡,导致模型无法收敛。

这篇文章也给出了一个修正的方法。由于Adam中的学习率主要是由二阶动量控制的,为了保证算法的收敛,可以对二阶动量的变化进行控制,避免上下波动。

通过这样修改,就保证了 

 从而使得学习率单调递减。

05 Adam罪状二:可能错过全局最优解

 

深度神经网络往往包含大量的参数,在这样一个维度极高的空间内,非凸的目标函数往往起起伏伏,拥有无数个高地和洼地。有的是高峰,通过引入动量可能很容易越过;但有些是高原,可能探索很多次都出不来,于是停止了训练。

之前,Arxiv上的两篇文章谈到这个问题。

第一篇就是前文提到的吐槽Adam最狠的UC Berkeley的文章《The Marginal Value of Adaptive Gradient Methods in Machine Learning》。文中说到,同样的一个优化问题,不同的优化算法可能会找到不同的答案,但自适应学习率的算法往往找到非常差的答案(very poor solution)。他们设计了一个特定的数据例子,自适应学习率算法可能会对前期出现的特征过拟合,后期才出现的特征很难纠正前期的拟合效果。但这个文章给的例子很极端,在实际情况中未必会出现。

另外一篇是《Improving Generalization Performance by Switching from Adam to SGD》,进行了实验验证。他们CIFAR-10数据集上进行测试,Adam的收敛速度比SGD要快,但最终收敛的结果并没有SGD好。他们进一步实验发现,主要是后期Adam的学习率太低,影响了有效的收敛。他们试着对Adam的学习率的下界进行控制,发现效果好了很多。

于是他们提出了一个用来改进Adam的方法:前期用Adam,享受Adam快速收敛的优势;后期切换到SGD,慢慢寻找最优解。这一方法以前也被研究者们用到,不过主要是根据经验来选择切换的时机和切换后的学习率。这篇文章把这一切换过程傻瓜化,给出了切换SGD的时机选择方法,以及学习率的计算方法,效果看起来也不错。

这个算法挺有趣,下一篇我们可以来谈谈,这里先贴个算法框架图:

06 到底该用Adam还是SGD?

所以,谈到现在,到底Adam好还是SGD好?这可能是很难一句话说清楚的事情。去看学术会议中的各种paper,用SGD的很多,Adam的也不少,还有很多偏爱AdaGrad或者AdaDelta。可能研究员把每个算法都试了一遍,哪个出来的效果好就用哪个了。毕竟paper的重点是突出自己某方面的贡献,其他方面当然是无所不用其极,怎么能输在细节上呢?

而从这几篇怒怼Adam的paper来看,多数都构造了一些比较极端的例子来演示了Adam失效的可能性。这些例子一般过于极端,实际情况中可能未必会这样,但这提醒了我们,理解数据对于设计算法的必要性。优化算法的演变历史,都是基于对数据的某种假设而进行的优化,那么某种算法是否有效,就要看你的数据是否符合该算法的胃口了。

算法固然美好,数据才是根本。

另一方面,Adam之流虽然说已经简化了调参,但是并没有一劳永逸地解决问题,默认的参数虽然好,但也不是放之四海而皆准。因此,在充分理解数据的基础上,依然需要根据数据特性、算法特性进行充分的调参实验。

少年,好好炼丹吧。

(三)优化算法的选择与使用策略

“ 在前面两篇文章中,我们用一个框架梳理了各大优化算法,并且指出了以 Adam 为代表的自适应学习率优化算法可能存在的问题。那么,在实践中我们应该如何选择呢?本文介绍 Adam + SGD 的组合策略,以及一些比较有用的 tricks.”

07 不同算法的核心差异:下降方向

从第一篇的框架中我们看到,不同优化算法最核心的区别,就是第三步所执行的下降方向:

这个式子中,前半部分是实际的学习率(也即下降步长),后半部分是实际的下降方向。SGD算法的下降方向就是该位置的梯度方向的反方向,带一阶动量的SGD的下降方向则是该位置的一阶动量方向。自适应学习率类优化算法为每个参数设定了不同的学习率,在不同维度上设定不同步长,因此其下降方向是缩放过(scaled)的一阶动量方向。

由于下降方向的不同,可能导致不同算法到达完全不同的局部最优点。《An empirical analysis of the optimization of deep network loss surfaces》 这篇论文中做了一个有趣的实验,他们把目标函数值和相应的参数形成的超平面映射到一个三维空间,这样我们可以直观地看到各个算法是如何寻找超平面上的最低点的。

上图是论文的实验结果,横纵坐标表示降维后的特征空间,区域颜色则表示目标函数值的变化,红色是高原,蓝色是洼地。他们做的是配对儿实验,让两个算法从同一个初始化位置开始出发,然后对比优化的结果。可以看到,几乎任何两个算法都走到了不同的洼地,他们中间往往隔了一个很高的高原。这就说明,不同算法在高原的时候,选择了不同的下降方向。

08 Adam+SGD 组合策略

正是在每一个十字路口的选择,决定了你的归宿。如果上天能够给我一个再来一次的机会,我会对那个女孩子说:SGD!

不同优化算法的优劣依然是未有定论的争议话题。据我在paper和各类社区看到的反馈,主流的观点认为:Adam等自适应学习率算法对于稀疏数据具有优势,且收敛速度很快;但精调参数的SGD(+Momentum)往往能够取得更好的最终结果。

那么我们就会想到,可不可以把这两者结合起来,先用Adam快速下降,再用SGD调优,一举两得?思路简单,但里面有两个技术问题:

  1. 什么时候切换优化算法?——如果切换太晚,Adam可能已经跑到自己的盆地里去了,SGD再怎么好也跑不出来了。

  2. 切换算法以后用什么样的学习率?——Adam用的是自适应学习率,依赖的是二阶动量的累积,SGD接着训练的话,用什么样的学习率?

上一篇中提到的论文 Improving Generalization Performance by Switching from Adam to SGD 提出了解决这两个问题的思路。

首先来看第二个问题,切换之后的学习率。

Adam的下降方向是

而SGD的下降方向是

SGD下降方向必定可以分解为Adam下降方向及其正交方向上的两个方向之和,那么其在Adam下降方向上的投影就意味着SGD在Adam算法决定的下降方向上前进的距离,而在Adam下降方向的正交方向上的投影是 SGD 在自己选择的修正方向上前进的距离。

(图片来自原文,这里p为Adam下降方向,g为梯度方向,r为SGD的学习率。)

如果SGD要走完Adam未走完的路,那就首先要接过Adam的大旗——沿着 方向走一步,而后在沿着其正交方向走相应的一步。

这样我们就知道该如何确定SGD的步长(学习率)了——SGD在Adam下降方向上的正交投影,应该正好等于Adam的下降方向(含步长)。也即:

解这个方程,我们就可以得到接续进行SGD的学习率:

为了减少噪声影响,我们可以使用移动平均值来修正对学习率的估计:

这里直接复用了Adam的 beta 参数。

然后来看第一个问题,何时进行算法的切换。

作者提出的方法很简单,那就是当 SGD的相应学习率的移动平均值基本不变的时候,即:

每次迭代完都计算一下SGD接班人的相应学习率,如果发现基本稳定了,那就SGD以为学习率接班前进。不过,这一时机是不是最优的切换时机,作者并没有给出数学证明,只是通过实验验证了效果,切换时机还是一个很值得深入研究的话题。

09 优化算法的常用tricks

最后,分享一些在优化算法的选择和使用方面的一些tricks。

1.首先,各大算法孰优孰劣并无定论。

如果是刚入门,优先考虑 SGD+Nesterov Momentum或者Adam.(Standford 231n : The two recommended updates to use are either SGD+Nesterov Momentum or Adam)

2. 选择你熟悉的算法——这样你可以更加熟练地利用你的经验进行调参。

3.充分了解你的数据——如果模型是非常稀疏的,那么优先考虑自适应学习率的算法。

4. 根据你的需求来选择——在模型设计实验过程中,要快速验证新模型的效果,可以先用Adam进行快速实验优化;在模型上线或者结果发布前,可以用精调的SGD进行模型的极致优化。

5. 先用小数据集进行实验。有论文研究指出,随机梯度下降算法的收敛速度和数据集的大小的关系不大。(The mathematics of stochastic gradient descent are amazingly independent of the training set size. In particular, the asymptotic SGD convergence rates are independent from the sample size. [2])因此可以先用一个具有代表性的小数据集进行实验,测试一下最好的优化算法,并通过参数搜索来寻找最优的训练参数。

6. 考虑不同算法的组合。先用Adam进行快速下降,而后再换到SGD进行充分的调优。切换策略可以参考本文介绍的方法。

7. 数据集一定要充分的打散(shuffle)。这样在使用自适应学习率算法的时候,可以避免某些特征集中出现,而导致的有时学习过度、有时学习不足,使得下降方向出现偏差的问题。

8. 训练过程中持续监控训练数据和验证数据上的目标函数值以及精度或者AUC等指标的变化情况。对训练数据的监控是要保证模型进行了充分的训练——下降方向正确,且学习率足够高;对验证数据的监控是为了避免出现过拟合。

9. 制定一个合适的学习率衰减策略。可以使用定期衰减策略,比如每过多少个epoch就衰减一次;或者利用精度或者AUC等性能指标来监控,当测试集上的指标不变或者下跌时,就降低学习率。

Author:Maddock
转载请注明出处:Maddock 计算机视觉、图像处理、机器学习

 

 

SGD优化器和Adam区别 综上所述,选择哪种优化器取决于具体任务的需求,包括计算资源、收敛速度、鲁棒性以及对超参数调整的容忍度。 阅读详情

相关推荐

优化算法实战:SGD 与 Adam,该选哪个更适合你?

在训练深度学习模型时,我们的目标是让模型预测更准确。为了达到这个目的,我们需要“调整”模型里的参数,使得预测误差(损失)尽可能小。这个“调整参数”的过程,本质上就是一个优化问题,而优化算法就是解决这个问题的“搬砖工具”。SGD(随机梯度下降)这两种方式看起来只是几行代码的切换,但对训练速度、收敛稳定性、甚至模型表现都会有非常大的影响。不要一上来就“Adam 全场”,也别盲信“SGD 是信仰”。优化算法的选择,和你任务类型、数据集大小、实验预算都息息相关。Adam 是调试利器,SGD 是生产武器。

zyh252609的博客 1749

优化器介绍—SGD、Adam、Adagrad

在深度学习中,优化器是一个非常重要的组成部分,它通过调整模型参数的方式来最小化损失函数。本教程将介绍三种常用的优化器以及如何选择最合适的优化器。

百年孤独百年的博客 1万+

SGD,Adam,AdamW,LAMB优化器

BERT 预训练包括两个阶段:1)前 9/10 的训练 epoch 使用 128 的序列长度,2)最后 1/10 的训练 epoch 使用 512 的序列长度。优化器是用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数。优点: 简单性,在优化算法中没有太多的参数需要调整,通过少量的计算量就可以获得比较好的结果。为预先设定的超参数,分别代表参数调整的下界和上界。这一简单的调整所带来的实际效果非常显著。随机梯度下降是最简单的优化器,它采用了简单的梯度下降法,

flyingluohaipeng的博客 1万+

优化算法SGD与Adam

说来惭愧,一直在用的两个经典的优化器,几行代码就完成了参数更新,但是却一直没有深入的了解其中的原理。 improt torch ... optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) ... optimizer.zero_grad() ... optimizer.step() 首先贴一下pyto

dbdxwyl的博客 7684

深度学习各种优化函数详解

深度学习中有众多有效的优化函数,比如应用最广泛的SGD,Adam等等,而它们有什么区别,各有什么特征呢?下面就来详细解读一下一、先来看看有哪些优化函数BGD 批量梯度下降所谓的梯度下降方法是无约束条件中最常用的方法。假设f(x)是具有一阶连续偏导的函数,现在的目标是要求取最小的f(x) : min f(x)核心思想:负梯度方向是使函数值下降最快的方向,在迭代的每一步根据负梯度的方向更新x的值,从而求

qq_21460525的博客 3万+

深度学习笔记——优化算法、激活函数

本笔记介绍深度学习中常见的优化算法、激活函数。

haopinglianlian的博客 2618

DL之softmax:深度学习中常用的函数之softmax——基于numpy定义优化softmax函数代码实现

1、定义softmax()函数# T1、初级定义softmax()函数:但是较大的数值难以计算# T2、优化后的softmax()函数:解决因数值超大而导致的溢出现象# 输出总和为1是softmax函数的一个重要性质。正因为有这个性质,才可以把softmax 函数的输出解释为“概率”。# [ 0.01821127 0.24519181 0.73659691] #有74%的概率是第2个类别,有25%的概率是第1个类别,有1%的概率是第0个类别。

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4493

ANSYS APDL 后处理:用*GET和ETABLE命令把节点/单元应力结果导出到TXT文件(附完整命令流)

本文详细介绍了在ANSYS APDL中使用*GET和ETABLE命令导出节点和单元应力数据到TXT文件的完整方案。通过节点解和单元解的核心逻辑分析,提供了从基础到进阶的数据导出方法,包括节点应力、单元应力数据的提取与格式化输出,以及高级技巧如选择性导出与数据过滤。帮助工程师高效完成有限元分析后处理工作。

weixin_26805597的博客 631

深度学习——优化函数

在深度学习中,优化函数(Optimization Function)是指用于调整模型参数(如神经网络的权重和偏置),以最小化损失函数(Loss Function)的一类算法或方法。二、常见的优化函数(优化算法) 下面详细介绍几种最常用的深度学习优化算法,它们都是基于梯度下降(Gradient Descent)的思想,但在更新策略上有所不同,以提高训练效率、稳定性和收敛速度。带动量的SGD(Momentum SGD) 为了解决普通SGD更新方向震荡的问题,引入了"动量"的概念,累积之前的梯度信息。

qq1851417332的博客 1985

MySQL根据idb文件恢复数据

恢复前提 MySQL 5.* 和 8.* 的恢复方式大同小异,最基本的区别是8.* 中,不再有表结构frm文件,所以要恢复 8.* 的数据,就必须要有完整的建表语句。 而恢复 5.* 的数据,就需要idb文件和 frm文件,当然,如果有完整的建表语句的话,不用frm文件也行。 恢复步骤 需要注意的是,以下操作需要选定数据库后执行。 5.* 恢复表结构 确定表列数 首先创建一张 与需要恢复数据的表 的名字相同的新表,如果已知原表的字段数量的话,就按照原表字段数建表,字段名和类型都不用考虑,如果不知道数量的话,

weixin_45121446的博客 5449

脆弱的冗余:链路聚合(LACP)中单条链路故障引发的网络震荡

show etherchannel summary# 查看聚合组中所有端口的标志位,健康状态应为 ‘P’ (Port-channel) 或 ‘SU’(Stand-up)。本次故障的核心教训是:网络系统对“部分故障”的容忍度和自愈能力,远比应对“完全故障”要重要和复杂得多。3.加强监控:部署网管系统,监控聚合端口的包错误计数、LACP状态变化频率,并设置阈值告警。标签: #链路聚合 #LACP故障 #网络冗余 #排障案例 #网络高可用性。修复链路:更换光模块、清洁光纤接口、检查物理线路。

danyth的博客 1983

深度学习优化函数

这里添加的是我学习中看到的博客,后期有空整理知识点,你也可以点开链接看看。 学习博客: 深度学习优化函数详解

wchzh2015的博客 460

Windows与Linux安装miniconda并启动python项目及指令

官方介绍:Miniconda 是 conda 的免费最小安装程序。它是 Anaconda 的一个小型引导版本,仅​​包含 conda、Python、它们都依赖的包以及少量其他有用的包(例如 pip、zlib 等)。如果您需要更多软件包,请使用该 命令从 Anaconda 公共存储库或其他渠道(例如 conda-forge 或 bioconda)默认提供的数千个软件包中进行安装。minicoda下载地址最好挂个梯子。如果你需要指定版本的conda,可以在这里下载历史版本的miniconda。

一直走的很慢的鸭子 3191

理清深度学习优化函数发展脉络

深度学习中有很多优化函数,常见的那些你还记得它的定义以及优缺点吗?深度学习网络训练中,有很多可供选择的优化函数如SGD、Adam等等,到底用哪个好呢?其实这个问题没有确切的答案,优化函数是需要配合损失函数使用的,说白了,优化函数也是一种超参数,是需要尝试的,哪个效果好就用哪个……这些优化函数其实差别不大,都是基于一个基本框架来演进的,所以下面先介绍下优化算法的基本框架:(记住这个框架!!!)假设当前时刻待优化的参数为 θt\theta_tθt​ ,损失函数为 J(θ)J(\theta)J(θ) ,学习率为

207

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 273

<PLC><工控>汇川Easy521PLC与压力传感器485通讯实例

有些PLC在进行串口通讯时,配置完串口参数后,还需要自己编程序来读写,但本例中汇川Easy521配置完成后,想要读取从站什么数据,只需要在“COM0 Modbus配置窗口”配置即可。可以同时配置多个从站。在配置窗口的右侧点击新增按钮,就会自动生成一条从站的配置,默认从站站号为“1”,触发方式是“循环”,功能码是03(读寄存器),从站寄存器地址为0,长度为“1”,映射地址需要自己添加。因为我们是将PLC设置为Modbus主站,所以压力传感器就是从站,我们的需求时PLC从这些从站传感器中读取数据,比如压力值。

用沸腾的热血,支付我们的人生吧! 6458

深度学习中的损失函数和网络优化方法

损失函数(Loss Function),又称为代价函数或目标函数,是衡量模型预测值与真实值之间差异的函数。它为模型训练提供了优化的方向,通过最小化损失函数来调整模型参数。梯度优化方法是深度学习中用于训练神经网络的核心算法,其目的是通过迭代调整网络参数,最小化损失函数,从而提高模型的预测准确性。梯度优化方法的重要性在于它们直接影响到模型的训练效率和最终性能。定义:梯度优化方法利用损失函数对模型参数的梯度信息来指导参数更新的方向和幅度。梯度是一个向量,其分量是损失函数对每个参数的偏导数,指向损失增加最快的方向。

2301_77539454的博客 1872

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

系统总结深度学习的主要的损失函数和优化器

本次博客是深度学习的作业:系统总结深度学习的主要的损失函数和优化器,并指出各自的适应条件和优缺点。觉得很有意义,就记录下来供大家参考。 损失函数 损失函数的作用 损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。 损失函数的分类 损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。 常见的损失函数及其优缺点 函数名 表达式 优点 缺点

qq_43787895的博客 788

Python控制程控电源(USB)

随着智能电动汽车行业的持续发展,汽车电子或嵌入式设备在软硬件的测试中,都会使用程控电源供电,特别是自动化测试、压力测试场景必定使用到程控电源控制,控制电源上下电,监听电源电流、电压等,以下就以常见的艾德克斯程控电源为例,分享如何通过USB连接方式Python语言来控制程控电源。

测试领域技术分享 2865

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习——损失函数及优化

目录损失(Loss)什么是损失函数例子:多分类SVM损失优化(Optimization)如何优化随机梯度下降法 刚学完用resnet18训练数据实现cifar10分类,现在反过头来发现自己的损失函数,后向传播,梯度下降这一块的概念学的并不是很好,重新学习了一遍。 损失(Loss) 在我们训练模型的过程中,我们需要衡量这一个模型的参数是好还是坏,而衡量这一个模型参数的好坏就是看输出的损失。训练模型的过程中,会输出这一个模型对一个图片分类的预测标签,这一个预测标签和这一个图片的真实标签的差异就是我们所说的损失。

scarecrow_sun的博客 4199

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【深度学习基础】损失函数与优化算法详解:从理论到实践

本文将从理论推导、代码实现和实战调参三个维度展开: - **理论**:解析损失函数与优化算法的数学原理,理解其适用场景与局限性。 - **实践**:通过Python代码(NumPy/PyTorch)手写核心算法,并结合框架API演示实际应用。 - **调参**:总结学习率设置、批量大小选择等关键技巧,帮助读者避开训练中的常见“坑”。

🚀免费专栏:✅穿越之灵脉重构师:重启天元代码系列✅Python筑基系列✅创新语言开发系列✅代码故事茶馆✅AI筑梦工作站 2500

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习中的损失函数优化策略

1.背景介绍 深度学习是人工智能领域的一个重要分支,它主要通过多层神经网络来学习数据的复杂关系。在训练深度学习模型时,我们需要一个损失函数来度量模型的预测与真实值之间的差距。损失函数的目的是为了指导模型进行优化,使模型的预测更加接近真实值。因此,损失函数优化策略在深度学习中具有重要意义。 在这篇文章中,我们将从以下几个方面进行阐述: 背景介绍 核心概念与联系 核心算法原理和具体操作步骤以及...

AI天才研究院 843

深度学习损失函数、优化器选择——调参与优化

早些年很多深度学习的研究人员还在做着调参、炼丹的工作,随着深度卷积神经网络发展到现在,调参的工作渐渐地不被看重,甚至出现了很多自动调参的工具。本文就深度学习中经常使用的损失函数、优化器、学习率迭代策略等进行介绍。 一、损失函数 损失函数是指用于计算标签值和预测值之间差异的函数,对于不同的任务,使用的损失函数也不相同,在目标检测等领域,损失函数往往需要自己定义。 1、L1 Loss L1Loss 计算的是预测值和真实值之间绝对误差的平均数。公式如下所示: #pytorch代码 torch.nn.L1Loss

qq_40356092的博客 7179
上一篇: 微信小程序(三)自定义分享按钮和原生分享&区分不同按钮的分享&带参数分享和获取
下一篇: 基于深度学习的依存句法分析进展
CopperDong
博客等级 码龄14年 1205粉丝 466原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值