梯度下降算法(二)

简介: 梯度下降法中,学习率选择至关重要。0.3的学习率导致无法找到最小值且产生震荡,而0.01则使结果接近最优解(2.99998768)。当学习率进一步减小至0.001,点远离最低点。通过迭代次数增加至1000次,可更接近最低点(2.999999999256501)。梯度下降用于最小化损失,学习率控制参数更新步长,需平衡收敛速度和稳定性。迭代次数和初始点也影响模型性能,合适的初始化能加速收敛并避开局部极小值。

梯度下降算法(一)+https://developer.aliyun.com/article/1544680?spm=a2c6h.13148508.setting.28.2a1e4f0euIPhgb


如果学习率调整为0.3,那么将找不到最低点,还会产生震荡**


我们将学习率改为0.01时,最后的值为path[-1] = 2.9999876804184145,已经很接近x = 3。



我们再将学习率改为0.001,此时曲线将离最低点还有一段距离:



包括我们将迭代次数改为1000次后,我们的x值将为2.999999999256501,无限接近与最低点。


假设我们有一些散点数据,需要拟合它:




train_x = data[:,0]
train_y = data[:,1]
X = np.concatenate([train_x.reshape(-1,1), np.ones_like(train_x.reshape(-1,1))], axis=1) 
# 加偏置
y = train_y.reshape(-1,1)


我们可以用最小二乘法来求解,求出损失最小的权值w和b,通过正规方程,得出w=0.93099006,b = -1.52679069。


回到最初的问题,正规方程或者是最小二乘法求解过程中,存在诸多的限制,接下来采用梯度下降来求解该问题;


我们使用MSE作为损失函数,则该损失函数的梯度表达式为


image.png


def linearRegression_gd(X, y, w):
    """
    梯度计算公式
    """
    m = X.shape[0]
    gd = 2 * X.T.dot(X.dot(w)-y) / m
    return gd
linearRegression_gd(X[:1,:],y[:1,:],np.array([1,1]).reshape(-1,1))
# 结果:-107.237845,-25.528548


  • X.T.dot(误差项)通过将误差项与𝑋X的转置矩阵相乘,实际上是计算了每个参数的偏导数之和,结果是一个与w维度相同的向量。
  • X.T.dot(误差项)是用来计算梯度的一种方式,它通过考虑所有样本的贡献来同时更新模型的所有参数。


我们使用梯度下降求解出的结果为w = 0.940894,b = -1.627557 ,现在已经很接近正规方程计算出的最小值,但是还没有收敛,还需继续迭代或者更换学习率。



总结:


梯度下降用于最小化损失函数以找到模型参数的最佳估计,重点就是学习率、迭代次数和初始点的选择;


学习率(Learning Rate)


  1. 学习率决定了在每次迭代中参数更新的步长
  2. 学习率过大可能导致学习过程震荡不稳,可能错过最优解,甚至使得损失函数发散。
  3. 学习率过小收敛过程会变得非常缓慢,需要大量的迭代才能达到较好的解。
  4. 学习率适当能够保证较快的收敛速度同时避免错过最优解,最理想的情况是逐渐减小学习率,以加速初期训练并在后期更精细地调整参数。


迭代次数(iterations)


  1. 一个iterations指的是整个训练数据集被模型遍历并用于更新一次参数的完整过程。
  2. 迭代次数过多可能导致过拟合,尤其是在数据集较小且模型复杂度较高的情况下。
  3. 迭代次数过小模型可能没有足够的时间从数据中学习到有效的模式,导致欠拟合。


初始点


模型参数初始值会影响梯度下降的收敛速度和最终解,良好的初始化可以加速收敛过程,避免陷入局部极小值或鞍点。


精细地调整参数。


迭代次数(iterations)


  1. 一个iterations指的是整个训练数据集被模型遍历并用于更新一次参数的完整过程。
  2. 迭代次数过多可能导致过拟合,尤其是在数据集较小且模型复杂度较高的情况下。
  3. 迭代次数过小模型可能没有足够的时间从数据中学习到有效的模式,导致欠拟合。


初始点


模型参数初始值会影响梯度下降的收敛速度和最终解,良好的初始化可以加速收敛过程,避免陷入局部极小值或鞍点。


策略:随机初始化,多次选择初始点位,避免一开始从不合适的点迭代



相关文章
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
5月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
|
2月前
|
机器学习/深度学习 算法
深度学习中的优化算法:从梯度下降到Adam
本文深入探讨了深度学习中的核心——优化算法,重点分析了梯度下降及其多种变体。通过比较梯度下降、动量方法、AdaGrad、RMSProp以及Adam等算法,揭示了它们如何更高效地找到损失函数的最小值。此外,文章还讨论了不同优化算法在实际模型训练中的表现和选择依据,为深度学习实践提供了宝贵的指导。
90 7
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
3月前
|
机器学习/深度学习 算法 Python
探索机器学习中的梯度下降优化算法
【8月更文挑战第1天】在机器学习的广阔天地里,梯度下降法如同一位勇敢的探险家,指引我们穿越复杂的数学丛林,寻找模型参数的最优解。本文将深入探讨梯度下降法的核心原理,并通过Python代码示例,展示其在解决实际问题中的应用。
74 3
|
5月前
|
机器学习/深度学习 分布式计算 并行计算
算法金 | 再见!!!梯度下降(多图)
**梯度下降及其优化算法简述** 梯度下降是一种优化算法,广泛用于机器学习和深度学习,通过迭代更新模型参数以最小化损失函数。它有几种变体,包括批梯度下降(使用全部数据)、随机梯度下降(单个样本)和小批量梯度下降(小批量样本)。每种形式在计算效率和稳定性上各有优劣。
77 4
算法金 | 再见!!!梯度下降(多图)
|
5月前
|
机器学习/深度学习 存储 算法
梯度下降算法(一)
梯度下降是一种迭代优化算法,用于找到多变量函数的最小值。它不直接求解方程,而是从随机初始点开始,沿着梯度(函数增大幅度最大方向)的反方向逐步调整参数,逐步逼近函数的最小值。在单变量函数中,梯度是导数,而在多变量函数中,梯度是一个包含所有变量偏导数的向量。通过计算梯度并乘以学习率,算法更新参数以接近最小值。代码示例展示了如何用Python实现梯度下降,通过不断迭代直到梯度足够小或达到预设的最大迭代次数。该过程可以类比为在雾中下山,通过感知坡度变化来调整前进方向。
|
5月前
|
机器学习/深度学习 算法 C语言
【深度学习】优化算法:从梯度下降到Adam
【深度学习】优化算法:从梯度下降到Adam
158 1
|
5月前
|
机器学习/深度学习 算法 PyTorch
《PyTorch深度学习实践》--3梯度下降算法
《PyTorch深度学习实践》--3梯度下降算法
|
6月前
|
机器学习/深度学习 自然语言处理 算法
深度解析深度学习中的优化算法:从梯度下降到自适应方法
【4月更文挑战第28天】 在深度学习模型训练的复杂数学迷宫中,优化算法是寻找最优权重配置的关键导航者。本文将深入探讨几种主流的优化策略,揭示它们如何引导模型收敛至损失函数的最小值。我们将比较经典的批量梯度下降(BGD)、随机梯度下降(SGD)以及动量概念的引入,进一步探索AdaGrad、RMSProp和Adam等自适应学习率方法的原理与实际应用。通过剖析这些算法的理论基础和性能表现,我们旨在为读者提供一个关于选择合适优化器的参考视角。