梯度下降算法(二)

简介: 梯度下降法中,学习率选择至关重要。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. 迭代次数过小模型可能没有足够的时间从数据中学习到有效的模式,导致欠拟合。


初始点


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


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



相关文章
|
14天前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
|
6天前
|
机器学习/深度学习 存储 算法
梯度下降算法(一)
梯度下降是一种迭代优化算法,用于找到多变量函数的最小值。它不直接求解方程,而是从随机初始点开始,沿着梯度(函数增大幅度最大方向)的反方向逐步调整参数,逐步逼近函数的最小值。在单变量函数中,梯度是导数,而在多变量函数中,梯度是一个包含所有变量偏导数的向量。通过计算梯度并乘以学习率,算法更新参数以接近最小值。代码示例展示了如何用Python实现梯度下降,通过不断迭代直到梯度足够小或达到预设的最大迭代次数。该过程可以类比为在雾中下山,通过感知坡度变化来调整前进方向。
|
8天前
|
机器学习/深度学习 算法 C语言
【深度学习】优化算法:从梯度下降到Adam
【深度学习】优化算法:从梯度下降到Adam
35 1
|
13天前
|
机器学习/深度学习 算法 PyTorch
《PyTorch深度学习实践》--3梯度下降算法
《PyTorch深度学习实践》--3梯度下降算法
|
1月前
|
算法 vr&ar Python
R语言用极大似然和梯度下降算法估计GARCH(p)过程
R语言用极大似然和梯度下降算法估计GARCH(p)过程
|
1月前
|
机器学习/深度学习 算法
反向传播原理的梯度下降算法
反向传播原理的梯度下降算法
|
9月前
|
机器学习/深度学习 算法 大数据
机器学习梯度下降算法
机器学习梯度下降算法
46 0
|
9月前
|
算法
梯度下降算法详解(从下山比喻、数学推导到代码实现)
梯度下降算法详解(从下山比喻、数学推导到代码实现)
173 0
|
10月前
|
机器学习/深度学习 算法 Python
数学和微分角度理解梯度下降算法
数学和微分角度理解梯度下降算法
|
10月前
|
机器学习/深度学习 算法 PyTorch
Gradient Descent Algorithm 梯度下降算法
Gradient Descent Algorithm 梯度下降算法
63 0