梯度下降中的学习率如何确定

1.固定学习率的梯度下降

y=x^4+2x ,初值取x=1.5,学习率使用0.01

#coding:utf-8
#求x^4+2x的导数
def g(x):
    return 4.0*x**3+2;
#梯度下降法求f(x)的最小值
x=1.5
a=0.01
y1=x**4+2*x
y2=1000
i=0
while y2-y1>10**-20:
    i=i+1
    d=g(x)
    x-=d*a
    y2 = y1
    y1=x**4+2*x
    print("%d \t %f \t%f\n" %(i,a,x))
print (y1)

运行结果如下:

迭代次数     学习率        x

……           ……            ……

283      0.010000     -0.793701

284      0.010000     -0.793701

285      0.010000     -0.793701

286      0.010000     -0.793701

y=-1.1905507889761484

可知通过286次的迭代达到我们要求得精度

下面做个试验看一下不同的函数对相同的学习率有什么影响

(1) y=x^2 ,初值取x=1.5,学习率使用0.01

分析:

效果还不错,经过200次迭代,x=0.0258543,经过1000次迭代,x=2.52445×10 -9

(2)y=x^4 ,初值取x=1.5,学习率使用0.01

分析:

效果不理想,经过200次迭代,x=0.24436; 经过1000次迭代,x=0.111275

通过对比,明显看到第一个函数更理想,想要达到我们的要求得迭代次数更少。同时发现,不同的学习率对不同的函数时不一样的,每个函数的每次迭代都应该寻找一个最适合的学习率才可以使得迭代次数变少并保证函数收敛,不会震荡。

2.优化学习率

调整学习率: 在斜率(方向导数)大的地方,使用小学习率,在斜率(方向导数)小的地方,使用大学习率

(1)计算学习率的方法

视角转换:

记当前点为x k ,当前搜索方向为d k (如:负梯度方向),因为学习率α是待考察的对象,因此,将下列函数f(x k +αd k )看做是关于α的函数h(α)。

h(α)=f(x k +αd k) ,α>0

当α=0时,h(0)=f(x k )

导数

学习率α的计算标准:

因为梯度下降是寻找f(x)的最小值,那么,在x k 和d k 给定的前提下,即寻找函数f(x k +αd k )的最小值。即:

进一步,如果h(α)可导,局部最小值处的α满足:

学习率函数导数的分析:

将α=0带入:

下降方向d k 可以选负梯度方向

从而:

如果能够找到足够大的α,使得

则必存在某α,使得

α * 即为要寻找的学习率。

(2)求a的两种方法

1)二分线性搜索:不断将区间[α1, α2]分成两半,选择端点异号的一侧,知道区间足够小或者找到当前最优学习率。

2)回溯线性搜索:基于Armijo准则计算搜素方向上的最大步长,其基本思想是沿着搜索方向移动一个较大的步长估计值,然后以迭代形式不断缩减步长,直到该步长使得函数值f(x k +αd k )相对与当前函数值f(x k )的减小程度大于预设的期望值(即满足Armijo准则)为止。

代码实现:

 1 def get_A_Atmiho(x,d,a):
 2     c1=0.3
 3     now=f(x)
 4     next=f(x-a*d)
 5     #下面的循环是寻找最大的步长a,使得目标函数可以向减小的方向移动
 6     count=30
 7     while next<now:
 8         a=a*2
 9         next=f(x-a*d)
10         count=-1
11         if count==0:
12             break
13     #寻找一个比较大的a使得减小后的函数值相对于当前函数值的差满足预设的期望值
14     count=50
15     while next>now-c1*a*d**2:
16         a=a/2
17         next=f(x-a*d)
18         count-=1
19         if count==0:
20             break
21     return  a;

加上上面这个求步长的函数后,每次求值不管x的初始值是什么,迭代次数一般不多于20次就可达到要求得精度,而以前固定步长都要迭代200步左右。通过调整c1可以改变预设期望值,当c1比较小时,一般迭代次数就会减少

回溯与二分线性搜索的异同

(1)二分线性搜索的目标是求得满足h‘(α)≈0的最优步长近似值,而回溯线性搜索放松了对步长的约束,只要步长能使函数值有足够大的变化即可。

(2)二分线性搜索可以减少下降次数,但在计算最优步长上花费了不少代价;回溯线性搜索找到一个差不多的步长即可。

时间: 2024-08-29 10:24:21

梯度下降中的学习率如何确定的相关文章

实际梯度下降中的两个重要调节方面

Gradient Descent in Practice I - Feature Scaling(特征归一化) 调整处理X的范围,以提高梯度下降效果和减小迭代次数. Note: [6:20 - The average size of a house is 1000 but 100 is accidentally written instead] We can speed up gradient descent by having each of our input values in rough

梯度下降实用技巧II之学习率 Gradient descent in practice II -- learning rate

梯度下降实用技巧II之学习率 Gradient descent in practice II -- learning rate 梯度下降算法中的学习率(learning rate)很难确定,下面介绍一些寻找的实用技巧.首先看下如何确定你的梯度下降算法正在正常工作:一般是要画出代价函数 和迭代次数之间的图像,如下图所示.如果随着迭代次数的增加不断下降,那么说明梯度下降算法工作的很好,当到达一定迭代次数后基本持平时,说明已经收敛了,可以选取此时的作为参数.一般选取一个数小于,如果下降的幅度小于,则认

线性规划、梯度下降、正规方程组——斯坦福ML公开课笔记1-2

几个常见问题: 1.为什么损失函数采用最小二乘法,而不是绝对值形式,也不采用最小三乘法?关于这个问题的答案,后面的课程会给出,主要是从最大似然函数角度给出的合理化解释,如果你追问,最大似然函数就代表科学的.合理的吗?那你听说过大数定律.极限中心定律吗?感觉有点像哲学问题了. 2.梯度下降法中提到学习率的问题,我们的目标函数是一个凸二次函数(就是你吃饭的碗的形状),我们知道学习率大会导致震荡,太小会走的慢,那么有没有必要动态调节这个学习率的大小,刚开始下降时可以先大,快收敛时再变小?这个是没有必要

从导数的物理意义理解梯度下降

机器学习中常会用随机梯度下降法求解一个目标函数 L(Θ) ,并且常是最小化的一个优化问题: min L(Θ) 我们所追求的是目标函数能够快速收敛或到达一个极小值点.而随机梯度法操作起来也很简单,不过是求偏导数而已,但是为什么是这样呢?为什么算出偏导数就能说下降得最快?初期并不很明了,后来看过一些数学相关的知识才稍微明白了一点,以下内容算是一个理解梯度的渐进过程.如果不当之处,欢迎指正. 以下关于梯度下降法,导数,偏导数的内容可在维基百科中找到,关于方向导数与梯度的内容可在高等数学书中找到. 预备

PyTorch【6】-线性回归_SGD_动量梯度下降

本篇是一个练手项目,目的在于: 1. 熟悉 pytorch 2. 实现 SGD 与 动量梯度下降,并对比收敛性 手动实现线性回归模型,一个很简单的模型,不多介绍,直接上代码 import torch as t import matplotlib.pylab as plt ### 制造数据 def make_data(): # y = 2x+3 x = t.rand(1, 10) * 20 y = x * 2 + 3 + t.randn(1, 10) return x, y ### 初始化参数 t

Stanford大学机器学习公开课(二):监督学习应用与梯度下降

本课内容: 1.线性回归 2.梯度下降 3.正规方程组 监督学习:告诉算法每个样本的正确答案,学习后的算法对新的输入也能输入正确的答案 1.线性回归 问题引入:假设有一房屋销售的数据如下: 引入通用符号: m =训练样本数 x =输入变量(特征) y =输出变量(目标变量) (x,y)—一个样本 ith—第i个训练样本=(x(i),y(i)) 本例中:m:数据个数,x:房屋大小,y:价格 监督学习过程: 1) 将训练样本提供给学习算法 2) 算法生成一个输出函数(一般用h表示,成为假设) 3)

通过实例详解随机梯度与梯度下降

一.梯度下降.随机梯度下降.批量梯度下降 梯度下降:梯度下降中,对于θ 的更新,所有的样本都有贡献,也就是参与调整θ .其计算得到的是一个标准梯度.因而理论上来说一次更新的幅度是比较大的.如果样本不多的情况下,当然是这样收敛的速度会更快. 随机梯度下降:随机梯度下降法,随机用样本中的一个例子来近似总体样本,来调整θ .所以随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的全局的梯度,容易陷入到局部最优解中 批量梯度下降:批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本

《机器学习》第一周 一元回归法 | 模型和代价函数,梯度下降

课程地址:https://www.coursera.org/learn/machine-learning/lecture/8SpIM/gradient-descent 一 Model and Cost Function 模型及代价函数 1 Model Representation 模型表示 首先,教授介绍了一下课程中将会用到的符号和意义: m:训练样本的数目 x:特征量 y:目标变量 (x,y):一个训练样本 (x^(i),y^(i)):i不是指数,而是指第i行的样本 Univariate li

NN优化方法对比:梯度下降、随机梯度下降和批量梯度下降

1.前言 这几种方法呢都是在求最优解中经常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中,都是围绕以下这个式子展开: 其中在上面的式子中hθ(x)代表,输入为x的时候的其当时θ参数下的输出值,与y相减则是一个相对误差,之后再平方乘以1/2,并且其中 注意到x可以一维变量,也可以是多维变量,实际上最常用的还是多维变量.我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解.这个θ的更新过程可以描