梯度下降法的原理及例题计算

梯度下降法的原理及例题计算

参数选取的不同会影响到假设函数,在计算机中可以不断的猜测这个参数θ,我们通常会将参数的初始值设为0参数迭代的范围可以称为步长,在机器学习领域中有一个更专业的称呼叫学习率。显而易见,学习率的设置会直接影响到函数收敛的速度。在计算机中就是通过设置不同的学习率进行参数θ的迭代更新。

1相关问题
梯度下降法的表达式:θ_j:=θ_j-α ∂J(θ_j )/(∂θ_j )
形式化 GD(θ_j,α, ∂J(θ_j )/(∂θ_j ) )
θ_j:参数,给定初始值;
α:学习率;
∂J(θ_j )/(∂θ_j ):梯度;
伪代码:
repeat
{
θ_j:=θ_j-α ∂J(θ_j )/(∂θ_j )
}

问题1:学习率是什么?
学习率在上面的表达式中即是参数α,它是一个很小的正数。
问题2:梯度是什么?
多元函数的梯度定义为:∇f(x)=(∂f/(∂x_1 ),…,∂f/(∂x_n ))^T,所谓梯度也就是对多元函数求偏导。沿着梯度的负方向也就是函数下降速度最快的一个方向。
例如:在这里插入图片描述
问题3:为什么用梯度下降法更新参数?θ_j:=θ_j-α ∂J(θ_j )/(∂θ_j )
梯度是函数变化最快的方向,因为前面有个减号。使得参数θ在向J(θ)越来越小的方向更新,而损失函数J(θ)在最小的时候也就是模拟的预测函数h最好的时候。需要求的参数θ正是在J(θ)最小时候的取值。

2学习率的设置与调整策略
学习率的设置至关重要,它决定了损失函数能否收敛以及收敛的快慢。下面通过选取不同大小学习率来观察损失函数的变化情况如图1,并做具体的说明。
在这里插入图片描述
图1:学习率设置对损失函数的影响
曲线初始时上扬【红线】 :初始学习率过大导致振荡发散,应减小学习率并从头开始训练 。
曲线初始时强势下降没多久归于水平 【蓝线】 :后期学习率过大导致无法收敛,应减小学习率,并重新训练后几轮 。
曲线全程缓慢 【黄线】:初始学习率过小导致收敛慢,应增大学习率,并从头开始训练 。
曲线下降速度较快,很好地收敛【绿线】:选取了较为合适的学习率,曲线能够以较快的速度收敛到损失函数很小的值。
那么应该如何来调整学习率,从而让损失函数尽快地收敛呢?接下来给出三种调整策
略。
一:从一般的经验来看,学习率可以设置为0.001,0.003,0.01,0.03,0.1,0.3…具体需结合实际情况对比判断;二:根据数据集的大小来选择合适的学习率,当使用平方和误差作为代价函数时,随着数据量的增多,学习率应该被设置为相应更小的值(从梯度下降算法的原理可以分析得出);三:训练全过程并不是使用一个固定值的学习速度,而是随着时间的推移让学习率动态变化,比如刚开始训练,离最优值还很远,可以使用较大的学习率下的快一点,当快接近最优值时为避免跨过最优值,收敛速度要放缓(轮数减缓、指数减缓、分数减缓),使用较小学习率训练。
但是训练时的最优值并不能提前知道,所以具体的解决办法是:在每次迭代后,使用估计的模型的参数来查看误差函数的值,如果相对于上一次迭代,错误率减少了,就可以以5%的幅度增大学习率如果相对于上一次迭代,错误率增大了,说明跳过最优值,那么应该重新设置上一轮迭代的值,并且减少学习率到之前的50%。因此,这是一种学习率自适应调节的方法。

3梯度下降法的限制
虽然梯度下降法在使损失函数收敛到最小值上有优异表现,但是我们的损失函数并不总是凸函数,意味着初始值选取的不同,很可能导致收敛到局部最优解。那么如何保证收敛到的值是全局最优解呢?
在这里插入图片描述
图2:初始点选取对损失函数收敛的影响
如图2,选取了两个不同的初始值,并利用梯度下降法进行迭代,最后收敛到两个不同的局部最优解。为了保证损失函数最小,可以将这两个值进行比较,选取最小的那个值。同理,可以多选取几个不同的初始值进行尝试,选取最小的值做为全局最优解。

B.4梯度下降法实例与代码实现
假设损失函数为J(θ)=θ2,学习率为0.4,初始化参数起点为1,现在利用梯度下降法进行迭代:θ0=1,θ1=θ0-αJ^’ (θ^0 )=1-0.42=0.2,θ2=θ1-αJ^’ (θ^1 )=0.04,θ3=0.008,θ4=0.0016,将θ与J(θ)的关系图画出来,如图3,可以看出在进行到第四次迭代损失函数收敛到了最小值附近,这时候对应的参数θ就是假设函数h的参数。
在这里插入图片描述
图3:θ取值与J(θ)的关系图
但是损失函数通常是比较复杂的多项式,下面给出表达式f(x)=x4-3x3+2,利用计算机进行梯度下降法的迭代,如算法B.1所示。
算法B.1 梯度下降法的代码实现
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-5,5,0.001)/从-5到5每隔0.001个单位取值/
y=x**4-3
x3+2/给出损失函数表达式/
plt.plot(x,y)
plt.show()
old=0
new=5
step=0.01/设置学习率/
precision=0.00001
def derivative(x):
return 4*x
3-9x**2/求梯度/
while abs(new-old)>precision: /梯度下降法的终止条件/
old=new
new=new-step
derivative(new) /**/
print(new)
上述算法将学习率设置为0.01,对给定的损失函数进行迭代,当满足终止条件时,算法终止。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小批量梯度下降法是一种介于批量梯度下降法和随机梯度下降法之间的优化算法。它在每次迭代时不仅考虑单个样本(随机梯度下降法),也不是考虑全部样本(批量梯度下降法),而是选择一个适当的小批量样本进行梯度计算和参数更新。 下面我将通过一个例题来解释小批量梯度下降法的过程: 假设我们有一个包含m个训练样本的数据集,目标是通过线性回归模型来拟合这些数据。我们的模型参数为w和b,损失函数为均方误差函数。 1. 初始化模型参数w和b为随机值或0。 2. 设置学习率α和小批量大小batch_size。 3. 将训练数据集随机打乱,并将其分成大小为batch_size的小批量。 4. 对于每个小批量数据,执行以下步骤: a. 计算当前小批量数据的预测值y_pred。 b. 计算当前小批量数据的损失函数值loss。 c. 计算损失函数对参数w和b的梯度grad_w和grad_b。 d. 更新参数w和b:w = w - α * grad_w,b = b - α * grad_b。 5. 重复步骤4直到达到指定的迭代次数或损失函数满足收敛条件。 通过不断迭代更新参数,小批量梯度下降法可以逐渐调整模型参数,使得模型能够更好地拟合训练数据。由于每次迭代只使用部分样本,因此它的计算效率相对于批量梯度下降法有所提升,同时也具有一定的随机性,有助于避免陷入局部最优解。 希望这个例题能够帮助你理解小批量梯度下降法的过程!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值