机器学习:多元线性回归_多变量梯度下降

发布时间:2026/11/5 5:32:44
机器学习:多元线性回归_多变量梯度下降 梯度下降是机器学习与深度学习中最基础、也最常用的优化算法之一。很多同学在单变量场景下能看懂公式一旦扩展到多变量就容易被偏导数、梯度向量、学习率、终止条件等概念绕晕。本文正是面向这类读者已经了解梯度下降的基本思想希望把多变量版本彻底搞清楚的初学者和工程实践者。目录多变量梯度下降一、 迭代终止条件何时停止1. 固定迭代次数2. 设定收敛阈值二、 损失函数与偏导数计算1. 损失函数示例2. 求偏导过程三、 梯度下降迭代过程与公式1. 初始化参数2. 核心更新公式3. 手动计算演示以 $\alpha0.1$ 为例四、 优化流程总结五、 梯度方向与负号的含义六、 学习率Learning Rate的影响与设置1. 学习率过小2. 学习率过大3. 推荐取值范围七、 Python 实战代码多变量梯度下降一、 迭代终止条件何时停止梯度下降是一种迭代优化算法程序不会像正规方程法那样一步算出结果后直接结束必须设定明确的停止机制。主要包括了两种思路1. 固定迭代次数预先设定一个固定的步数如 50 步或 100 步当达到该次数时程序自动终止。适用于对精度要求适中、能快速逼近最优解的场景。2. 设定收敛阈值设定一个极小的阈值区间如 0.00001 至 0.00003 之间。当连续两次迭代结果的差值小于该指定阈值时说明优化带来的收益已微乎其微此时终止迭代。二、 损失函数与偏导数计算多变量梯度下降的核心在于对多维损失函数进行偏导数求解。1. 损失函数示例为了方便理解我们这里假设损失函数为 $J(\theta) \theta_1^2 \theta_2^2$。该函数在 $\theta_10$ 且 $\theta_20$ 时取得最小值。2. 求偏导过程求偏导需遵循“控制变量法”将非目标变量视为常数针对 $\theta_1$ 求偏导将 $\theta_2$ 视为常数其导数为0结果为$2\theta_1$。针对 $\theta_2$ 求偏导将 $\theta_1$ 视为常数结果为$2\theta_2$。三、 梯度下降迭代过程与公式1. 初始化参数初始位置设定参数的起始坐标点示例中为$(1, 3)$。学习率$\alpha$决定每次更新的步长。示例中使用了较大的学习率 $0.1$。2. 核心更新公式梯度下降的通用迭代公式为 $$\theta^{(i1)} \theta^{(i)} - \alpha \cdot \nabla J(\theta)$$ 展开为双变量形式即为$\theta_1 : \theta_1 - \alpha \cdot 2\theta_1$$\theta_2 : \theta_2 - \alpha \cdot 2\theta_2$3. 手动计算演示以 $\alpha0.1$ 为例第一步从初始点 $(1, 3)$ 开始计算。$\theta_1 1 - 0.1 \times (2 \times 1) 0.8$$\theta_2 3 - 0.1 \times (2 \times 3) 2.4$参数更新后移动至新坐标$(0.8, 2.4)$。第二步基于新坐标继续迭代。$\theta_1 0.8 - 0.1 \times (2 \times 0.8) 0.64$$\theta_2 2.4 - 0.1 \times (2 \times 2.4) 1.92$参数更新后移动至新坐标$(0.64, 1.92)$。 通过对比可知多变量梯度下降的下降路径和收敛速度相比单变量会明显变慢。四、 优化流程总结梯度下降的标准执行逻辑如下给定初始位置确定参数的起始坐标。给定学习率设定每次移动的步长大小。沿负梯度方向移动根据当前点的偏导数向下降最快的方向移动指定步长。重复迭代直至收敛持续上述过程直到满足设定的阈值或达到最大迭代次数。五、 梯度方向与负号的含义梯度的几何意义数学上的梯度方向指向函数在该点上升最快的方向。优化目标导向我们的目标是使损失函数最小化因此绝不能沿着上升方向走而必须沿着梯度的反方向前进。结论公式中的负号表示取负梯度方向即函数下降最快的方向从而最高效地逼近最优解。六、 学习率Learning Rate的影响与设置学习率$\alpha$是梯度下降中最关键的超参数直接控制每一步沿负梯度方向前进的长度。1. 学习率过小影响下降速度极慢收敛效率低。若配合“固定迭代次数”作为终止条件可能出现迭代上百次仍远离最优解的情况。应对策略学习率较小时强烈建议使用阈值判断作为终止条件以保证算法的稳定性和有效性。2. 学习率过大影响步长过大极易导致错过最低点引发下降过程中的震荡甚至爆炸发散。例如如果将学习率设为 10起始点为 1 时下一步会直接跳到 -19完全偏离最优区域后续难以回归。3. 推荐取值范围实际工程开发中学习率一般设置在$0.001 \sim 0.01$即千分之一到百分之一之间较为稳妥。具体数值需结合模型复杂度与数据分布进行调试。七、 Python 实战代码下面用numpy把前面手动推导的双变量梯度下降过程完整实现一遍损失函数为 $J(\theta) \theta_1^2 \theta_2^2$初始点 $(1, 3)$学习率 $\alpha 0.1$并以「相邻两次迭代的参数变化量小于阈值」作为终止条件。import numpy as np def loss(theta): 损失函数 J(theta) theta1^2 theta2^2 return theta[0] ** 2 theta[1] ** 2 def gradient(theta): 对 theta1、theta2 分别求偏导得到梯度向量 [2theta1, 2theta2] return np.array([2 * theta[0], 2 * theta[1]]) def gradient_descent(init_theta, alpha0.1, threshold1e-5, max_iter1000): theta np.array(init_theta, dtypefloat) history [theta.copy()] for i in range(1, max_iter 1): grad gradient(theta) new_theta theta - alpha * grad # 沿负梯度方向更新 delta np.linalg.norm(new_theta - theta) # 本次迭代的移动距离 print(fiter {i:2d}: theta ({new_theta[0]:.6f}, {new_theta[1]:.6f}), floss {loss(new_theta):.8f}, delta {delta:.8f}) theta new_theta history.append(theta.copy()) if delta lt; threshold: # 收敛阈值终止条件 print(f收敛于第 {i} 次迭代最终参数 theta ({theta[0]:.6f}, {theta[1]:.6f})) break return theta, history if name main: final_theta, path gradient_descent(init_theta(1, 3), alpha0.1, threshold1e-5) print(最终结果, final_theta) print(损失值, loss(final_theta))/code/pre 运行上述代码输出大致如下节选 iter 1: theta (0.800000, 2.400000), loss 6.40000000, delta 0.63245553 iter 2: theta (0.640000, 1.920000), loss 4.09600000, delta 0.50596443 iter 3: theta (0.512000, 1.536000), loss 2.62144000, delta 0.40477154 iter 4: theta (0.409600, 1.228800), loss 1.67772160, delta 0.32381723 iter 5: theta (0.327680, 0.983040), loss 1.07374182, delta 0.25905379 iter 6: theta (0.262144, 0.786432), loss 0.68719477, delta 0.20724303 iter 7: theta (0.209715, 0.629146), loss 0.43980465, delta 0.16579442 iter 8: theta (0.167772, 0.503316), loss 0.28147498, delta 0.13263554 iter 9: theta (0.134218, 0.402653), loss 0.18014399, delta 0.10610843 iter 10: theta (0.107374, 0.322123), loss 0.11529215, delta 0.08488674 ... iter 46: theta (0.000035, 0.000105), loss 0.00000001, delta 0.00002755 iter 47: theta (0.000028, 0.000084), loss 0.00000001, delta 0.00002204 iter 48: theta (0.000022, 0.000067), loss 0.00000000, delta 0.00001763 iter 49: theta (0.000018, 0.000054), loss 0.00000000, delta 0.00001410 iter 50: theta (0.000014, 0.000043), loss 0.00000000, delta 0.00001128 iter 51: theta (0.000011, 0.000034), loss 0.00000000, delta 0.00000903 收敛于第 51 次迭代最终参数 theta (0.000011, 0.000034) 最终结果 [1.14179815e-05 3.42539446e-05] 损失值 1.3037030248540726e-09 从输出可以看到 前两步与手算完全一致第 1 次迭代得到 $(0.8, 2.4)$第 2 次迭代得到 $(0.64, 1.92)$验证了公式推导的正确性。 收敛速度呈指数衰减每次迭代参数都按固定比例缩小$\theta_1$ 与 $\theta_2$ 的比值始终保持 $1:3$说明两个维度独立收敛、互不干扰。 阈值终止条件生效当单次移动距离小于 $10^{-5}$ 时程序自动停止此时参数已非常接近最优解 $(0, 0)$损失值趋近于 0。 如果把 alpha 改成 0.001会发现迭代次数显著增加改成 1.0 以上则可能出现震荡甚至发散这与学习率的分析完全对应。建议读者动手调整参数观察 delta 与迭代次数的变化规律。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询