当前位置: 首页 > news >正文

【机器学习笔记Ⅰ】4 梯度下降

梯度下降(Gradient Descent)详解

梯度下降是机器学习中最核心的优化算法,用于通过迭代调整模型参数(如权重 ( w ) 和偏置 ( b )),最小化代价函数(如均方误差、交叉熵)。它的核心思想是:
“沿着代价函数梯度(导数)的反方向逐步更新参数,直到找到最小值。”


1. 核心概念

(1) 梯度(Gradient)

  • 数学意义:多元函数的偏导数向量,指向函数值上升最快的方向。
    • 例如,代价函数 ( J(w, b) ) 的梯度为 ( \nabla J = \left[ \frac{\partial J}{\partial w}, \frac{\partial J}{\partial b} \right] )。
  • 优化意义:梯度的反方向(( -\nabla J ))是函数值下降最快的方向。

(2) 参数更新公式


2. 梯度下降的步骤

  1. 初始化参数:随机设定初始值 ( w ) 和 ( b )。
  2. 计算梯度:在当前参数下计算代价函数的梯度。
  3. 更新参数:沿梯度反方向调整参数。
  4. 重复迭代:直到梯度接近零(收敛)或达到最大迭代次数。

3. 梯度下降的类型

(1) 批量梯度下降(Batch Gradient Descent)

  • 每次迭代使用全部训练数据计算梯度。
  • 优点:稳定收敛到全局最优(凸函数时)。
  • 缺点:计算慢,不适合大数据集。

(2) 随机梯度下降(Stochastic Gradient Descent, SGD)

  • 每次迭代随机选一个样本计算梯度。
  • 优点:速度快,适合在线学习。
  • 缺点:波动大,可能无法收敛到最优解。

(3) 小批量梯度下降(Mini-Batch Gradient Descent)

  • 折中方案:每次使用一小批(如32、64个)样本计算梯度。
  • 深度学习标配:平衡效率与稳定性。

4. 关键问题与调参

(1) 学习率 ( \alpha )的选择

  • 太大:可能跳过最优解(发散)。
  • 太小:收敛速度慢。
  • 自适应学习率:如Adam、Adagrad等优化算法动态调整 ( \alpha )。

(2) 局部最优 vs 全局最优

  • 凸函数(如线性回归):梯度下降总能找到全局最优。
  • 非凸函数(如神经网络):可能陷入局部最优,但实际中局部最优通常也能接受。

(3) 特征缩放

  • 如果特征量纲差异大(如年龄 vs 收入),需先归一化/标准化,否则梯度下降会震荡。

5. 代码示例(Python实现线性回归)

import numpy as np# 生成数据
X = np.array([1, 2, 3, 4])  # 特征
y = np.array([2, 4, 6, 8])  # 目标值 (y = 2x)# 初始化参数
w = 0.0  # 权重
b = 0.0  # 偏置
alpha = 0.01  # 学习率
epochs = 100  # 迭代次数# 梯度下降
for epoch in range(epochs):# 计算预测值 y_pred = w * X + by_pred = w * X + b# 计算梯度 (MSE的导数)dw = (2/len(X)) * np.sum((y_pred - y) * X)  # dJ/dwdb = (2/len(X)) * np.sum(y_pred - y)         # dJ/db# 更新参数w = w - alpha * dwb = b - alpha * db# 打印损失if epoch % 10 == 0:loss = np.mean((y_pred - y)**2)print(f"Epoch {epoch}, Loss: {loss:.4f}, w: {w:.4f}, b: {b:.4f}")# 输出最终参数
print(f"Final w: {w}, b: {b}")  # 应接近 w=2, b=0

6. 应用场景

  • 线性回归:最小化均方误差(MSE)。
  • 逻辑回归:最小化交叉熵损失。
  • 神经网络:反向传播(Backpropagation)的核心依赖梯度下降。

7. 总结

关键点说明
目标通过迭代优化参数,最小化代价函数。
核心公式( w_{\text{new}} = w_{\text{old}} - \alpha \cdot \frac{\partial J}{\partial w} )
学习率 ( \alpha )需谨慎选择,过大导致发散,过小导致收敛慢。
类型批量(稳定但慢)、随机(快但波动)、小批量(平衡)。
注意事项特征缩放、学习率调整、防止过拟合。

http://www.lryc.cn/news/581715.html

相关文章:

  • 【管理学】乐嘉性格色彩与MBTI的优劣和适用场景
  • 【C++基础】内存管理四重奏:malloc/free vs new/delete - 面试高频考点与真题解析
  • 汇编与接口技术:8259中断实验
  • 高效处理大体积Excel文件的Java技术方案解析
  • 从0写自己的操作系统(4)实现简单的任务切换
  • FileZilla二次开发实战指南:C++架构解析与界面功能扩展
  • 在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控
  • 【机器学习笔记Ⅰ】13 正则化代价函数
  • [2025CVPR]一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA)
  • SSL 终结(SSL Termination)深度解析:从原理到实践的全维度指南
  • Python Bcrypt详解:从原理到实战的安全密码存储方案
  • 用户中心Vue3项目开发2.0
  • 2048小游戏实现
  • 线性代数--AI数学基础复习
  • 深度学习6(多分类+交叉熵损失原理+手写数字识别案例TensorFlow)
  • Chunking-free RAG
  • Web-API-day2 间歇函数setInterval与事件监听addEvenListener
  • 【Note】《Kafka: The Definitive Guide》第四章:Kafka 消费者全面解析:如何从 Kafka 高效读取消息
  • Apache Spark 4.0:将大数据分析提升到新的水平
  • A O P
  • 金融级B端页面风控设计:操作留痕与异常预警的可视化方案
  • 深度学习篇---深度学习常见的应用场景
  • 容声W60以光水离子科技实现食材“主动养鲜”
  • [Qt] visual studio code 安装 Qt插件
  • FastAPI + Tortoise-ORM + Aerich 实现数据库迁移管理(MySQL 实践)
  • 深度学习 必然用到的 线性代数知识
  • 嵌入式 数据结构学习(五) 栈与队列的实现与应用
  • React Ref 指南:原理、实现与实践
  • 【PyTorch】PyTorch中torch.nn模块的卷积层
  • 零基础,使用Idea工具写一个邮件报警程序