精华内容
下载资源
问答
  • 梯度下降学习的优化

    千次阅读 2016-07-27 21:10:03
    问题描述令目标函数为f(x)f(x),当前点为xkx_k,当前搜索方向为dkd_k,我们把学习α\alpha看做变量,不妨设: h(α)=f(xk+αdk),a>0h(\alpha)=f(x_k+\alpha d_k), a > 0 现在问题变成求h(α)h(\alpha)的最小值,...

    一. 问题描述

    令目标函数为f(x),当前点为xk,当前搜索方向为dk,我们把学习率α看做变量,不妨设:

    h(α)=f(xk+αdk),a>0

    现在问题变成求h(α)的最小值,假设h(α)可导,则有:
    h(α)=f(xk+αdk)(xk+αdk)dk

    二. 学习率函数h(α)的分析

    由导数的性质知道,局部最小值处满足h(α)=0
    α=0代入,得:

    h(0)=f(xk)xkdk

    不妨取dk为负梯度,即dk=f(xk)xk,则有:
    h(0)=(f(xk)xk)20

    如果能够找到足够大的α,使得h(α)>0,则必存在某个值α0,使得h(α0)=0α0即为要寻找的学习率
    1. 二分线性搜索
    2. 回溯线性搜索
    3. Armijo准则
    f(xk+αdk)f(xk)+c1αf(xk)xkdk,0<c1<1

    4. 二项插值法
    f(x)=f(a)f(0)af(0)a2x2+f(0)x+f(0)可得h(α)的近似函数为:
    hq(α)=h(α0)h(0)α0h(0)α20α2+h(0)α+h(0)

    可得,最优值为:
    α=h(0)α202(h(0)α0+h(0)h(α0))

    如有错误请指正

    展开全文
  • 梯度下降学习的设定策略

    千次阅读 2019-04-23 14:39:38
    本文转载自卢明冬的博客-梯度下降学习的设定策略 1.学习的重要性 1)学习设置太小,需要花费过多的时间来收敛 2)学习设置较大,在最小值附近震荡却无法收敛到最小值 3)进入局部极值点就收敛,没有真正找到...

    发现一篇写的很好的关于学习率的文章
    本文转载自卢明冬的博客-梯度下降学习率的设定策略

    1.学习率的重要性

    1)学习率设置太小,需要花费过多的时间来收敛
    2)学习率设置较大,在最小值附近震荡却无法收敛到最小值
    3)进入局部极值点就收敛,没有真正找到的最优解
    4)停在鞍点处,不能够在另一维度继续下降
    梯度下降算法有两个重要的控制因子:一个是步长,由学习率控制;一个是方向,由梯度指定。

    2.学习率的设定类型

    1)固定学习率
    每次迭代每个参数都使用同样的学习率。找到一个比较好的固定学习率非常关键,否则会导致收敛太慢或者不收敛。
    2)不同的参数使用不同的学习率
    如果数据是稀疏的且特征分布不均,似乎我们更应该给予较少出现的特征一个大的更新。这时可能需要对不同特征对应的参数设定不同的学习率。深度学习的梯度下降算法中Adagrad 和Adam方法都针对每个参数设置了相应的学习率,这部分内容详见《梯度下降算法总结》,本篇不作讨论。
    3)动态调整学习率
    动态调整就是我们根据应用场景,在不同的优化阶段能够动态改变学习率,以得到更好的结果。动态调整学习率是本篇的重点内容,为了解决梯度学习在一些复杂问题时出现的挑战,数据科学家们在动态调整学习率的策略上做了很多研究和尝试。
    4)自适应学习率
    自适应学习率从某种程度上讲也算是动态调整学习率的范畴,不过更偏向于通过某种算法来根据实时情况计算出最优学习率,而不是人为固定一个简单策略让梯度下降按部就班地实行。

    3.学习率的设定策略

    3.1 固定学习率

    固定学习率适用于那些目标函数是凸函数的模型,通常为了保证收敛会选一个稍微小的数值,如0.01、0.001。固定学习率的选择对梯度下降影响非常大,下图展示了不同学习率对梯度下降的影响。
    在这里插入图片描述

    3.2学习率衰减

    一般情况下,初始参数所得目标值与要求的最小值距离比较远,随着迭代次数增加,会越来越靠近最小值。学习率衰减的基本思想是学习率随着训练的进行逐渐衰减,即在开始的时候使用较大的学习率,加快靠近最小值的速度,在后来些时候用较小的学习率,提高稳定性,避免因学习率太大跳过最小值,保证能够收敛到最小值。
    1)learning rate在每迭代stepsize次后减少gamma倍
    2)learning rate呈多项式曲线下降
    LR(t)=baselr(tT)powerLR(t) = baselr * (\frac{t}{T})^{power}
    3)learning rate随迭代次数增加而下降。
    LR(t)=baselr(1+gammaiter)powerLR(t) = baselr * (1+gamma*iter)^{power}

    3.3找到合适的学习率

    Leslie N. Smith在一篇《Cyclical Learning Rates for Training Neural Networks》论文中提出一个非常简单的寻找最佳学习率的方法。这种方法可以用来确定最优的初始学习率,也可以界定适合的学习率的取值范围。
    在这种方法中,我们尝试使用较低学习率来训练神经网络,但是在每个批次中以指数形式增加(或线性增加)。
    目前,该方法在 Fast.ai 包中已经作为一个函数可直接进行使用。Fast.ai 包是由 Jeremy Howard 开发的一种高级 pytorch 包(就像 Keras 之于 Tensorflow)。

    #run on learn object where learning rate is increased exponentially
    learn.lr_find()
    #plot graph of learning rate against iterations
    learn.sched.plot_lr()
    

    每次迭代后学习率以指数形式增长:
    在这里插入图片描述
    同时,记录每个学习率对应的Loss值,然后画出学习率和Loss值的关系图:
    learn.sched.plot()
    在这里插入图片描述
    通过找出学习率最高且Loss值仍在下降的值来确定最佳学习率。在上述情况中,该值将为0.01。

    3.4基于Armijo准则的线性回溯搜索算法

    既然是计算学习率,我们就需要转换视角,将学习率?看作是未知量,因当前点??、当前搜索方向??都是已知的,故有下面的关于?的函数:
    h(α)=f(xk+αdk)h(\alpha)=f(x_k+\alpha*d_k)
    梯度下降寻找f(x)最小值,那么在??和??给定的前提下,即寻找函数?(??+???)的最小值,可以证明存在?使得h(x)的导数为0,则?就是要寻找的学习率。
    1)二分线性搜索
    二分线性搜索是最简单的处理方式,不断将区间[α1,α2]分成两半,选择端点异号的一侧,直到区间足够小或者找到当前最优学习率。
    2)回溯线性搜索
    基于Armijo准则计算搜素方向上的最大步长,其基本思想是沿着搜索方向移动一个较大的步长估计值,然后以迭代形式不断缩减步长,直到该步长使得函数值?(??+α??)相对与当前函数值?(??)的减小程度大于预设的期望值(即满足Armijo准则)为止。
    (1)二分线性搜索的目标是求得满足 ℎ′(?)≈0 的最优步长近似值,而回溯线性搜索放松了对步长的约束,只要步长能使函数值有足够大的变化即可。
    (2)二分线性搜索可以减少下降次数,但在计算最优步长上花费了不少代价;回溯线性搜索找到一个差不多的步长即可。
    3)二次插值法
    二次插值法是回溯线性搜索的继续优化,利用了多项式插值(Interpolation) 方法。多项式插值的思想是通过多项式插值法拟合简单函数,然后根据该简单函数估计原函数的极值点,这里我们使用二次函数来拟合。

    3.5.循环学习率

    使用较快的学习率也有助于我们在训练中更早地跳过一些局部极小值。
    人们也把早停和学习率衰减结合起来,在迭代 10 次后损失函数没有改善的情况下学习率开始衰减,最终在学习率低于某个确定的阈值时停止。
    近年来,循环学习率变得流行起来,在循环学习率中,学习率是缓慢增加的,然后缓慢减小,以一种循环的形式持续着。
    在这里插入图片描述

    3.6余弦退火

    余弦退火可以当做是学习率衰减的一种方式,早些时候都是使用指数衰减或者线性衰减,现在余弦衰减也被普遍使用[2]。
    在采用小批量随机梯度下降(MBGD/SGD)算法时,神经网络应该越来越接近Loss值的全局最小值。当它逐渐接近这个最小值时,学习率应该变得更小来使得模型不会超调且尽可能接近这一点。
    从下图可以看出,随着x的增加,余弦值首先缓慢下降,然后加速下降,再次缓慢下降。这种下降模式能和学习率配合,以一种十分有效的计算方式来产生很好的效果。
    在这里插入图片描述

    3.7热重启随机梯度下降(SGDR)

    在训练时,梯度下降算法可能陷入局部最小值,而不是全局最小值。下图展示了陷入局部最小值的梯度下降算法。
    在这里插入图片描述
    梯度下降算法可以通过突然提高学习率,来“跳出”局部最小值并找到通向全局最小值的路径。Loshchilov和Hutter在《SGDR: Stochastic Gradient Descent with Warm Restarts》论文中提出了热重启随机梯度下降(Stochastic Gradient Descent with Warm Restarts, SGDR)方法,这种方法将余弦退火与热重启相结合,使用余弦函数作为周期函数,并在每个周期最大值时重新开始学习速率。“热重启”是因为学习率重新开始时并不是从头开始的,而是由模型在最后一步收敛的参数决定的。
    用Fast.ai库可以快速导入SGDR算法。当调用learn.fit(learning_rate, epochs)函数时,学习率在每个周期开始时重置为参数输入时的初始值,然后像上面余弦退火部分描述的那样,逐渐减小。
    在这里插入图片描述

    3.8不同网络层使用不同学习率

    一般情况下,在训练时通过优化网络层会比提高网络深度要更重要,在网络中使用有差别的学习率(Differential Learning rates),可以很好的提高模型性能。
    在这里插入图片描述

    3.9快照集成和随机加权平均

    最后将要提到的策略可以说是多个优化方法综合应用的策略,可能已经超出了“学习率的设定”主题的范围了,不过,我觉得下面的方法是最近一段时间研究出来的一些非常好的优化方法,因此也包括了进来,权当做是学习率优化的综合应用了。

    本小节主要涉及三个优化策略:快照集成(Snapshot Ensembling)、快速几何集成(Fast Geometric Ensembling,FGE)、随机加权平均(Stochastic Weight Averaging,SWA)。
    在经典机器学习中,集成学习(Ensemble learning)是非常重要的思想,很多情况下都能带来非常好的性能,因此几乎是机器学习比赛中必用的“神兵利器”。

    集成学习算法本身不算一种单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。可以说是“集百家之所长”,完美的诠释了“三个臭皮匠赛过诸葛亮”。集成学习在机器学习算法中拥有较高的准确率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。

    强力的集成学习算法主要有2种:基于Bagging的算法和基于Boosting的算法,基于Bagging的代表算法有随机森林,而基于Boosting的代表算法则有Adaboost、GBDT、XGBOOST等,这部分内容我们后面会单独讲到。
    集成学习的思路就是组合若干不同的模型,让它们基于相同的输入做出预测,接着通过某种平均化方法决定集成模型的最终预测。这个决定过程可能是通过简单的投票或取均值,也可能是通过另一个模型,该模型能够基于集成学习中众多模型的预测结果,学习并预测出更加准确的最终结果。岭回归是一种可以组合若干个不同预测的结果的方法,Kaggle 上卫星数据识别热带雨林竞赛的冠军就使用过这一方法。
    集成学习的思想同样适用于深度学习,集成应用于深度学习时,组合若干网络的预测以得到一个最终的预测。通常,使用多个不同架构的神经网络得到的性能会更好,因为不同架构的网络一般会在不同的训练样本上犯错,因而集成学习带来的收益会更大。

    当然,你也可以集成同一架构的模型,也许效果会出乎意料的好。就好比本小节将要提到的快照集成方法,在训练同一个网络的过程中保存了不同的权值快照,然后在训练之后创建了同一架构、不同权值的集成网络。这么做可以提升测试的表现,同时也超省事,因为你只需要训练一个模型、训练一次就好,只要记得随时保存权值就行。

    快照集成应用了我们刚才提到的热重启随机梯度下降(Stochastic Gradient Descent with Warm Restarts, SGDR),这种循环学习率几乎为快照集成量身打造,利用热重启随机梯度下降法的特点,每次收敛到局部极值点的时候就可以缓存一个权重快照,缓存那么几个就可以做集成学习了。

    无论是经典机器学习中的集成学习,还是深度学习里面的集成学习,抑或是改良过的快照集成方法,都是模型空间内的集成,它们均是组合若干模型,接着使用这些模型的预测以得到最终的预测结果。而一些数据科学家还提出了一种全新的权值空间内的集成,这就是随机加权平均法,该方法通过组合同一网络在训练的不同阶段的权值得到一个集成,接着使用组合后的权值做出预测。这种方法有两个好处:

    • 组合权重后,我们最终仍然得到一个模型,这有利于加速预测。
    • 事实证明,这种方法胜过当前最先进的快照集成。

    在了解其实现原理之前,我们首先需要理解损失平面(loss surface)和泛化解(generalizable solution)。

    权值空间的解
    第一个不得不提到的是,经过训练的网络是高维权值空间中的一个点。对给定的架构而言,每个不同的网络权值组合都代表了一个不同的模型。任何给定架构都有无穷的权重组合,因而有无穷多的解。训练神经网络的目标是找到一个特定的解(权值空间中的点),使得训练数据集和测试数据集上的损失函数的值都比较低。

    在训练期间,训练算法通过改变权值来改变网络并在权值空间中漫游。梯度下降算法在一个损失平面上漫游,该平面的海拔为损失函数的值。

    窄极值和宽极值
    坦白的讲,可视化并理解高维权值空间的几何特性非常困难,但我们又不得不去了解它。因为随机梯度下降的本质是,在训练时穿过这一高维空间中的损失平面,试图找到一个良好的解——损失平面上的一个损失值较低的“点”。不过后来我们发现,这一平面有很多局部极值。但这些局部极值并不都有一样好的性质。

    一般极值点会有宽的极值和窄的极值,如下图所示:
    在这里插入图片描述
    数据科学家研究试验后发现:宽的局部极小值在训练和测试过程中产生类似的损失;但对于窄的局部极小值而言,训练和测试中产生的损失就会有很大区别。这意味着,宽的极值比窄的极值有更好的泛化性
    平坦度可以用来衡量一个解的优劣。其中的原理是,训练数据集和测试数据集会产生相似但不尽相同的损失平面。你可以将其想象为测试平面相对训练平面而言平移了一点。对窄的解来说,一个在测试的时候损失较低的点可能因为这一平移产生变为损失较高的点。这意味着窄的(尖锐的)解的泛化性不好——训练损失低,测试损失高。另一方面,对于宽的(平坦的)解而言,这一平移造成的训练损失和测试损失间的差异较小。

    之所以提到窄极值和宽极值,是因为随机加权平均(SWA)就能带来讨人喜欢的、宽的(平坦的)解

    快照集成(Snapshot Ensembling)
    快照集成应用了应用了热重启随机梯度下降(SGDR),最初,SGD会在权值空间中跳出一大步。接着,由于余弦退火,学习率会逐渐降低,SGD逐步收敛到局部极小值,缓存权重作为一个模型的“快照”,把它加入集成模型。然后将学习率恢复到更高的值,这种更高的学习率将算法从局部极小值推到损失面中的随机点,然后使算法再次收敛到另一个局部极小值。重复几次,最后,他们对所有缓存权重集的预测进行平均,以产生最终预测。
    在这里插入图片描述
    上图对比了使用固定学习率的单个模型与使用循环学习率的快照集成的收敛过程,快照集成是在每次学习率周期末尾保存模型,然后在预测时使用。

    快照集成的周期长度为 20 到 40 个 epoch。较长的学习率周期是为了在权值空间中找到足够具有差异化的模型,以发挥集成的优势。如果模型太相似,那么集成模型中不同网络的预测将会过于接近,以至于集成并不会带来多大益处了。
    快照集成表现优异,提升了模型的表现,但快速几何集成效果更好。
    快速几何集成
    《Loss Surfaces, Mode Connectivity, and Fast Ensembling of DNNs》中提出的快速几何集成 FGE 和快照集成非常像,但是也有一些独特的特点。它们的不同主要有两点。第一,快速几何集成使用线性分段周期学习率规划,而不是余弦变化。第二,FGE 的周期长度要短得多——2 到 4 个 epoch。乍一看大家肯定直觉上觉得这么短的周期是不对的,因为每个周期结束的时候的得到的模型互相之间离得太近了,这样得到的集成模型没有什么优势。然而作者们发现,在足够不同的模型之间,存在着损失较低的连通路径。我们有机会沿着这些路径用较小的步长行进,同时这些模型也能够有足够大的差异,足够发挥集成的优势。因此,相比快照集成, FGE 表现更好,搜寻模型的步长更小(这也使其训练更快)。
    在这里插入图片描述
    随机加权平均(Stochastic Weight Averaging,SWA)
    随机加权平均只需快速几何集成的一小部分算力,就可以接近其表现。SWA 可以用在任意架构和数据集上,都会有不错的表现。根据论文中的实验,SWA 可以得到我之前提到过的更宽的极小值。在经典认知下,SWA 不算集成,因为在训练的最终阶段你只得到一个模型,但它的表现超过了快照集成,接近 FGE。
    在这里插入图片描述
    结合????在测试集上优于 SGD 的表现,这意味着尽管????训练时的损失较高,它的泛化性更好。

    SWA 的直觉来自以下由经验得到的观察:每个学习率周期得到的局部极小值倾向于堆积在损失平面的低损失值区域的边缘(上图左侧的图形中,褐色区域误差较低,点?1、?2、?3分别表示3个独立训练的网络,位于褐色区域的边缘)。对这些点取平均值,可能得到一个宽阔的泛化解,其损失更低(上图左侧图形中的????)。
    下面是 SWA 的工作原理。它只保存两个模型,而不是许多模型的集成:

    • 第一个模型保存模型权值的平均值(????)。在训练结束后,它将是用于预测的最终模型。
    • 第二个模型(?)将穿过权值空间,基于周期性学习率规划探索权重空间。

    SWA权重更新公式
    在这里插入图片描述
    在每个学习率周期的末尾,第二个模型的当前权重将用来更新第一个模型的权重。因此,在训练阶段,只需训练一个模型,并在内存中储存两个模型。预测时只需要平均模型,基于其进行预测将比之前描述的集成快很多,因为在那种集成中,你需要使用多个模型进行预测,最后再进行平均。

    4.小结

    本文主要介绍了几种梯度下降学习率的设定策略,其中“固定学习率”、“学习率衰减”适用于简单不太复杂的应用场景,“基于Armijo准则的线性回溯搜索算法”可以当做一种自适应学习率调整,不过由于计算复杂且无法有效解决陷入局部极小值点和鞍点处的问题,使用的人并不多。在“找到合适的学习率”一小节中,我们介绍了一种简单有效的方法,可以快速找到一个适合的学习率,同时这种方法也可以界定学习率设定的合理范围,推荐使用。“热重启随机梯度下降”是“循环学习率”和“余弦退火”的结合,可以非常有效的解决梯度下降容易陷入局部极值点和鞍点等问题,它正在成为当前效果最好的、也是最标准的做法,它简单易上手,计算量很轻,可以说事半功倍,尤其在深度学习中表现非常好,推荐使用。最后介绍了“分层学习率”、“快照集成”,“随机加权平均”,是近段时间比较好的研究成果,也是不错的综合优化方法。

    梯度下降是机器学习和深度学习中非常重要的优化算法,而学习率是用好梯度下降法的关键。除了一些其他客观的原因,学习率的设定是影响模型性能好坏的非常重要的因素,所以应该给予足够的重视。最后,还记得上面提到过的“梯度下降算法有两个重要的控制因子:一个是步长,由学习率控制;一个是方向,由梯度指定。”吗?我们已经在学习率上有了深入的探索和研究,那在方向上是否还有可以优化的方法?如果搜索方向不是严格的梯度方向是否也可行?这里就涉及使用二阶导数的牛顿法和拟牛顿法了。不过个人觉得它们远不及梯度下降重要,如果有时间再更新这方面的内容吧。

    展开全文
  • 图解深度学习-梯度下降学习可视化梯度下降学习问题 梯度下降学习问题 用最简单的SGD做实验,讨论学习问题。 学习如果太小,则会下降很慢,需要很多次迭代,如果太大,就会出现发散,具体可以动手调试,也...

    图解深度学习-梯度下降学习率可视化

    梯度下降学习率问题

    用最简单的SGD做实验,讨论学习率问题。

    学习率如果太小,则会下降很慢,需要很多次迭代,如果太大,就会出现发散,具体可以动手调试,也可以看截图。

    这里我选取的代价函数J(x)=0.5(x1)2+0.5J(x) = 0.5 (x-1)^2 + 0.5,求导方便。

    import numpy as np
    import matplotlib.pyplot as plt
    from ipywidgets import *
    
     
    #梯度函数的导数
    def gradJ(theta):
        return theta-1
     
    #梯度函数
    def J(theta):
        return 0.5*(theta-1)**2+0.5
     
    def train(lr,epoch,theta):
        thetas = []
        for i in range(epoch):
            gredient = gradJ(theta)
            theta = theta - lr*gredient
            thetas.append(theta)
        plt.figure(figsize=(10,10))
        x = np.linspace(-1,3,100)
        plt.plot(x, J(x))
        plt.plot(np.array(thetas),J(np.array(thetas)),color='r',marker='o')
        
        plt.plot(1.0, 0.5, 'r*',ms=15)
        plt.text(1.0, 0.55, 'min', color='k')
        plt.text(thetas[0]+0.1,  J(thetas[0]), 'start', color='k')
        plt.text(thetas[-1]+0.1, J(thetas[-1])-0.05, 'end', color='k')
        
        plt.xlabel('theta')
        plt.ylabel('loss')
        plt.show()
        print('theta:',theta)
        print('loss:',J(theta))
        
    #可以随时调节,查看效果 (最小值,最大值,步长)
    @interact(lr=(0, 5, 0.001),epoch=(1,100,1),init_theta=(-1,3,0.1),continuous_update=False)
    def visualize_gradient_descent(lr=0.05,epoch=10,init_theta=-1):
        train(lr,epoch,init_theta)
    
    学习率:0.05
    迭代次数:10
    参数初始化:-1
    10次迭代还没到最小值
    

    在这里插入图片描述

    学习率:0.33
    迭代次数:10
    参数初始化:-1
    10次迭代接近收敛了,可见加大学习率可以加快训练
    

    在这里插入图片描述

    学习率:1.87
    迭代次数:10
    参数初始化:-1
    轨迹开始波动了,梯度方向不停的在变,最后还没到收敛。
    
    解释下梯度方向为什么开始变了,根据公式theta= theta- lr*gredient,
    可以看到开始theta大致为2.7,梯度为正数大致为2,然后学习率又1.87 ,
    theta=2.7 - 2 x 1.87<0 即theta变为负数了,所有到曲线右边了,
    同理继续更新,此时梯度为负数了,减去一个负数等于加上正数,theta变为正数,
    所以又到曲线右边,如此循环,直到最低点。
    如此一来,来回波动很多次,所以收敛速度变慢了。我们当然希望它跟上面一样是从一个方向一直下降。
    

    在这里插入图片描述

    学习率:2.18
    迭代次数:10
    参数初始化:-1
    继续加到学习率,直到变得不收敛,我把坐标范围拉大了,看了清楚,已经开始发散了。
    
    原因是因为,学习率过大,使得更新后的theta无论正负,绝对值会越来越大,会开始往上跑,再加上越上面的梯度绝对值越来越大,所以每次更新完之后theta的绝对值继续变大,就无限循环了,不收敛了。
    
    具体可见下图。
    
    
    

    在这里插入图片描述

    把一些参数打出来了,可以看到,负值和正值绝对值都在变大,因为迭代后出现折线发散。
    

    在这里插入图片描述

    修改后的jupyter的文件链接

    好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

    展开全文
  • tensorflow 学习下降策略

    千次阅读 2018-07-26 22:32:41
    tensorflow 里面提供了几种学习率下降的策略,有指数下降法、分段固定值下降法、多项式下降法、自然指数下降法、随时间/步数下降法、余弦下降法、余弦重启式下降法、线性余弦下降法、带噪声的线性余弦下降法,下面...

    tensorflow 里面提供了几种学习率下降的策略,有指数下降法、分段固定值下降法、多项式下降法、自然指数下降法、随时间/步数下降法、余弦下降法、余弦重启式下降法、线性余弦下降法、带噪声的线性余弦下降法,下面各个介绍:

    1.指数下降法自然指数下降法:

    它们的定义的参数形式都是:

    def exponential_decay(learning_rate,
                          global_step,
                          decay_steps, #decay_steps: How often to apply decay.,比如多少步下降一次
                          decay_rate,
                          staircase=False, # 是否应用于离散情况。
                          name=None):

    不同的地方在于衰减后的学习率decayed_rate 的计算方法不一样。

    指数下降法的计算方式是:

    decayed_learning_rate = learning_rate *
                              decay_rate ^ (global_step / decay_steps)

    自然下降法的计算方式是:

    decayed_learning_rate = learning_rate * exp(-decay_rate * global_step)

    2.分段固定值下降法

    这种方法类似于分段函数式下降,比如在前5000步数内学习率为0.1,5000到10000步内是0.05,之后任意多步都是0.01,参数定义如下:

    def piecewise_constant(x, boundaries, values, name=None):
      """Piecewise constant from boundaries and interval values.
      Example: use a learning rate that's 1.0 for the first 100001 steps, 0.5
        for the next 10000 steps, and 0.1 for any additional steps.
      ```python
      global_step = tf.Variable(0, trainable=False)
      boundaries = [100000, 110000]
      values = [1.0, 0.5, 0.1]
      learning_rate = tf.train.piecewise_constant(global_step, boundaries, values)
      # Later, whenever we perform an optimization step, we increment global_step.
      ```

    3.多项式下降法:

    def polynomial_decay(learning_rate,
                         global_step,
                         decay_steps,
                         end_learning_rate=0.0001,
                         power=1.0,
                         cycle=False,
                         name=None):
    
      ```python
      global_step = min(global_step, decay_steps)
      decayed_learning_rate = (learning_rate - end_learning_rate) *
                              (1 - global_step / decay_steps) ^ (power) +
                              end_learning_rate
      ```

    4.随时间步下降法:

    def inverse_time_decay(learning_rate,
                           global_step,
                           decay_steps,
                           decay_rate,
                           staircase=False,
                           name=None):
    
      ```python
      decayed_learning_rate = learning_rate / (1 + decay_rate * global_step /
      decay_step)
      ```

    5.余弦下降:

    def cosine_decay(learning_rate, global_step, decay_steps, alpha=0.0, name=None):
    ```python
      global_step = min(global_step, decay_steps)
      cosine_decay = 0.5 * (1 + cos(pi * global_step / decay_steps))
      decayed = (1 - alpha) * cosine_decay + alpha
      decayed_learning_rate = learning_rate * decayed
      ```
    '''
    alpha: A scalar `float32` or `float64` Tensor or a Python number.
          Minimum learning rate value as a fraction of learning_rate.
    '''

     

    展开全文
  • 4)自适应学习 自适应学习从某种程度上讲也算是动态调整学习的范畴,不过更偏向于通过某种算法来根据实时情况计算出最优学习,而不是人为固定一个简单策略让梯度下降按部就班地实行。 3.学习的设定策略 ...
  • 梯度下降法-学习选取

    千次阅读 2019-04-06 19:25:16
    回顾 先来回顾一下梯度下降法参数更新方法: 对代价函数求偏导,乘以学习,来更新 ...显示了随着迭代次数的增加,代价函数的大小的变化趋势,如果梯度下降正常工作的话,每迭代一步都应该下降,大...
  • 针对原始的样本(1,2) 针对线性回归的函数 y=kx 对应的损失函数是 y=2kx^2, 那我们的方向就是希望最小化这个损失函数,得到最终的k值,然后再代入到 ...方法二:采用梯度下降与学习的方法去求得最后的k值...
  • 我们直到学习对于机器学习来说,大的学习虽然往往能够使得损失函数快速下降,但是导致不收敛或者振荡现象的发生,而小的学习虽然收敛,但是学习速率太慢,损失函数下降缓慢,需要等待长时间的训练,同时也会...
  • 学习设置太高,一个epoch直接收敛,所以损失不会下降。又没有设置防止过拟合的比如学利率一开始设置为1,因为下降太快,那么很有可能在一个epoch旧完全收敛。所以看到的validation数值并不下降,第一个epoch就已经...
  • 梯度下降中的学习的作用

    千次阅读 2018-12-19 12:07:42
    如图所示:  如果不用学习或者说学习为1,使用负梯度,即最速下降法,永远无法下降到最优值即0点处;作一次梯度下降,就移动相对称的点上;来来回回走;...
  • 听完邹博老师讲完梯度下降后,自己总结一下,希望有用
  • 梯度下降

    千次阅读 2019-08-16 10:29:39
    这就涉及到了梯度下降和学习(优化时每次采用的步长)。 首先来看一下梯度的定义。 梯度:在数学上,梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点...
  • 梯度下降算法原理讲解——机器学习

    万次阅读 多人点赞 2019-01-21 20:27:48
    详细来讲讲梯度下降算法的原理,感受数学和程序的魅力吧!!
  • 神经网络学习小记录45——Keras常用学习率下降方式汇总前言为什么要调控学习率下降方式汇总1、阶层性下降2、指数型下降3、余弦退火衰减 前言 学习是深度学习中非常重要的一环,好好学习吧! 为什么要调控学习 ...
  • 梯度下降算法:Hessian 矩阵 与 学习 的关系
  • 三、神经网络进一步优化——学习设置 一、预备知识 什么是梯度? 假设我们位于黄山的某个山腰处,山势连绵不绝,不知道怎么下山。于是决定走一步算一步,也就是每次沿着当前位置最陡峭最易下山的方向前进一小步...
  • 通过指数衰减的学习可以让模型在训练的前期快速接近较优解,又可以保证模型在训练后期不会有太大的波动,从而接近局部最优解。Tensorflow调用tf.train.exponential_decay函数实现指数衰减学习。global_step = tf...
  • 问题:次日留存率下降怎么分析? 问题中不明确项:什么留存 + 下降标准(对比什么) # 这里仅仅作为一个思维锻炼,因此我将问题简单化 问题:次日新增用户留存率下降 公式 = 当天新注册用户次日仍...
  • 梯度下降实用技巧II之学习 Gradient descent in practice II -- learning rate 梯度下降算法中的学习(learning rate)很难确定,下面介绍一些寻找的实用技巧。首先看下如何确定你的梯度下降算法正在正常工作...
  • 超参数在验证集上表现很好,但是利用该参数进行模型训练和测试,正确明显下降(有些可能会上升),请问大家这是什么问题? 优化流程:原始数据进行10-fold crossvalidation分成训练集和测试集,在训练集中对每次...
  • 其原理简单,就求函数的最小值这个应用而言,大致说来就是先求出该函数梯度,大家都知道梯度是一个函数在该点的最快上升率,那么求个相反数就是最快下降率了。将每个自变量按下列公式更新:  xt+1=xt+Δx xt+1=x...
  • 跑出来的结果训练集能达到1,测试集准确基本保持在0.5左右,二分类 数据有用shuffle, 有dropout,有正则化,learning rate也挺小的。 不知道是什么原因,求解答! ![图片说明]...
  • 1 ,梯度下降 : 总结 求梯度 : 偏导数向量和 作用 : 确定梯度下降的方向 步长 :每次下降多少距离 2 ,学习 : 定义 : 就是上面说的步长,每次移动的距离 大小 : 最好是小一点,不适合过大 1 ,小 : 走得...
  • 1、从BP算法来分析神经网络学习率下降的问题: 并且:   说明:对于神经网络的中间层,除了输出层以外,在某些情况下,梯度会下降到接近于0,是无法避免的。 但是,对于输出层而言,通过学习合适的误差函数,...
  • 简析手游七日留存率下降原因。

    千次阅读 2015-03-30 13:36:32
    以十万个冷笑话为例: 游戏主要资源: 金钱,碎片(包括装备碎片和卡牌碎片),元宝。 金钱:主要为技能的升级和装备的升级。 碎片是获得装备的主要途径,可以通过元宝和体力获得(元宝可以转化为体力)。...
  • Linux桌面用户占有为何逐月下降

    千次阅读 热门讨论 2009-10-09 06:10:00
    用户占有的不断下降反映了全球新增 PC 计算机预装 Linux 操作系统相当稀少的事实。事实上,全球新增 PC 计算机预装 Linux 的比例肯定不足原有的整体占有。简单地说, ...
  • 如何理解梯度下降

    千次阅读 多人点赞 2018-09-02 10:36:57
    从感性认识入手,由浅及深理解清楚梯度下降法,并举例说明梯度下降法的应用。
  • 梯度下降法简介

    千次阅读 2017-07-19 11:30:19
    梯度下降法简介

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,931
精华内容 100,772
关键字:

下降率