机器学习入门:从损失函数到梯度下降的实战解析

1次阅读
没有评论

共计 1629 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

为什么我们需要损失函数和梯度下降?

刚开始学习机器学习时,我常常困惑:模型怎么知道自己预测得对不对?如何自动调整参数?这就要引出损失函数和梯度下降这对黄金搭档了。

机器学习入门:从损失函数到梯度下降的实战解析

  • 损失函数 就像考试的评分标准,告诉我们当前预测值与真实值相差多少。比如预测房价时,绝对误差(MAE)会直接计算相差多少钱,而平方误差(MSE)会放大较大误差的影响。

  • 梯度下降 则是模型的学习方式,就像蒙着眼下山的人,通过感受脚下坡度(梯度)一步步找到最低点(最小损失)。没有它,模型就像无头苍蝇一样乱撞。

常见损失函数面面观

  1. 均方误差(MSE)
  2. 计算公式:(1/n) * Σ(预测值 - 真实值)²
  3. 特点:对异常值敏感,适用于回归问题
  4. Python 实现:

    def mse(y_true, y_pred):
        return ((y_true - y_pred) ** 2).mean()

  5. 交叉熵损失

  6. 计算公式:-Σ(真实值 *log(预测值))
  7. 特点:分类任务首选,尤其适合输出概率的场景
  8. 示例代码:
    def cross_entropy(y_true, y_pred):
        return -np.sum(y_true * np.log(y_pred + 1e-9))  # 加小量防 log(0)

梯度下降的实战演练

让我们用 Python 实现一个简单的线性回归梯度下降:

import numpy as np

# 生成模拟数据
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 初始化参数
eta = 0.1  # 学习率
n_iterations = 1000
m = len(X)
theta = np.random.randn(2, 1)  # 随机初始化参数

# 添加偏置项
X_b = np.c_[np.ones((100, 1)), X]

# 梯度下降主循环
for iteration in range(n_iterations):
    gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
    theta = theta - eta * gradients

学习率的艺术

  • 过大学习率:会导致在最低点附近震荡甚至发散

    # 危险示例(学习率 0.5)theta_history = []
    eta = 0.5  # 明显过大
    for iteration in range(10):  # 仅演示 10 次迭代
        gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
        theta = theta - eta * gradients
        theta_history.append(theta)

  • 过小学习率:收敛速度极慢

    # 低效示例(学习率 0.001)eta = 0.001
    n_iterations = 100000  # 需要极大迭代次数

实战中的避坑指南

  1. 特征缩放很重要
  2. 未缩放的特征会导致梯度下降震荡
  3. 标准化处理示例:

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

  4. 批量选择策略

  5. 批量梯度下降:稳定但内存要求高
  6. 随机梯度下降:内存友好但波动大
  7. 小批量梯度下降(推荐):
    batch_size = 32
    indices = np.random.permutation(m)
    X_batch = X_b[indices[:batch_size]]
    y_batch = y[indices[:batch_size]]

向神经网络进阶

当基础概念掌握后,可以探索:

  • 激活函数的作用:ReLU 解决梯度消失,sigmoid 用于概率输出

    def relu(z):
        return np.maximum(0, z)
    
    def sigmoid(z):
        return 1 / (1 + np.exp(-z))

  • 神经网络中的反向传播:链式法则的延伸应用

个人实践心得

在 Kaggle 的房价预测项目中,我发现:

  1. 组合 MSE 和 MAE 能平衡异常值影响
  2. 动态学习率(如指数衰减)效果优于固定值
  3. 特征工程的质量直接影响梯度下降效率

建议初学者先从单变量线性回归入手,逐步增加复杂度。记住:理解原理比调参更重要!

正文完
 0
评论(没有评论)