题目
使用梯度下降训练线性回归模型的基本步骤
信息
- 类型:问答
- 难度:⭐
考点
梯度下降原理,损失函数计算,参数更新,模型训练流程
快速回答
训练线性回归模型的基本步骤:
- 初始化模型参数(权重和偏置)
- 计算预测值:ŷ = wX + b
- 计算损失函数(如均方误差)
- 计算损失函数关于参数的梯度
- 使用学习率更新参数:w = w - α*∂loss/∂w
- 重复步骤2-5直到收敛
原理说明
梯度下降是优化模型参数的核心算法,通过迭代调整参数使损失函数最小化。在线性回归中:
- 预测函数:ŷ = wX + b(w:权重, b:偏置)
- 损失函数:均方误差(MSE) = (1/n)Σ(yᵢ - ŷᵢ)²
- 梯度计算:
∂loss/∂w = (2/n)Σ(ŷᵢ - yᵢ)Xᵢ
∂loss/∂b = (2/n)Σ(ŷᵢ - yᵢ)
代码示例(Python)
# 生成示例数据
import numpy as np
X = np.array([1, 2, 3, 4], dtype=np.float32)
y = np.array([2, 4, 6, 8], dtype=np.float32)
# 初始化参数
w = 0.0
b = 0.0
learning_rate = 0.01
epochs = 100
# 训练循环
for epoch in range(epochs):
# 前向传播
y_pred = w * X + b
# 计算损失 (MSE)
loss = np.mean((y_pred - y)**2)
# 计算梯度
dw = np.mean(2 * (y_pred - y) * X)
db = np.mean(2 * (y_pred - y))
# 更新参数
w -= learning_rate * dw
b -= learning_rate * db
if epoch % 10 == 0:
print(f'Epoch {epoch}: w={w:.3f}, b={b:.3f}, loss={loss:.8f}')
print(f'训练结果: w={w:.3f}, b={b:.3f}')最佳实践
- 特征缩放:标准化输入数据加速收敛
- 学习率选择:典型值0.01-0.1,可使用学习率衰减
- 收敛判断:当损失变化小于阈值时停止训练
- 批量选择:小批量梯度下降平衡效率与稳定性
常见错误
- 未归一化数据:导致梯度下降震荡或收敛慢
- 学习率过大:损失函数发散(overshooting)
- 学习率过小:收敛速度过慢
- 忘记更新偏置项:只更新权重忽略偏置
- 梯度计算错误:公式推导或代码实现错误
扩展知识
- 梯度下降变体:随机梯度下降(SGD)、Adam等优化器
- 正则化:L1/L2正则化防止过拟合
- 多项式回归:通过特征工程扩展为曲线拟合
- 向量化实现:使用矩阵运算加速计算
梯度公式向量形式:∇ = (2/n)Xᵀ(ŷ - y)