大数据机器学习-梯度下降:从技术到实战的全面指南

news2024/11/29 4:49:47

大数据机器学习-梯度下降:从技术到实战的全面指南

文章目录

  • 大数据机器学习-梯度下降:从技术到实战的全面指南
  • 一、简介
    • 什么是梯度下降?
    • 为什么梯度下降重要?
  • 二、梯度下降的数学原理
    • 代价函数(Cost Function)
    • 梯度(Gradient)
    • 更新规则
      • 代码示例:基础的梯度下降更新规则
  • 三、批量梯度下降(Batch Gradient Descent)
    • 基础算法
    • 代码示例
  • 四、随机梯度下降(Stochastic Gradient Descent)
    • 基础算法
    • 代码示例
    • 优缺点
  • 五、小批量梯度下降(Mini-batch Gradient Descent)
    • 基础算法
    • 代码示例
    • 优缺点

本文全面深入地探讨了梯度下降及其变体——批量梯度下降、随机梯度下降和小批量梯度下降的原理和应用。通过数学表达式和基于PyTorch的代码示例,本文旨在为读者提供一种直观且实用的视角,以理解这些优化算法的工作原理和应用场景。

在这里插入图片描述

一、简介

梯度下降(Gradient Descent)是一种在机器学习和深度学习中广泛应用的优化算法。该算法的核心思想非常直观:找到一个函数的局部最小值(或最大值)通过不断地沿着该函数的梯度(gradient)方向更新参数。

什么是梯度下降?

简单地说,梯度下降是一个用于找到函数最小值的迭代算法。在机器学习中,这个“函数”通常是损失函数(Loss Function),该函数衡量模型预测与实际标签之间的误差。通过最小化这个损失函数,模型可以“学习”到从输入数据到输出标签之间的映射关系。

为什么梯度下降重要?

  1. 广泛应用:从简单的线性回归到复杂的深度神经网络,梯度下降都发挥着至关重要的作用。
  2. 解决不可解析问题:对于很多复杂的问题,我们往往无法找到解析解(analytical solution),而梯度下降提供了一种有效的数值方法。
  3. 扩展性:梯度下降算法可以很好地适应大规模数据集和高维参数空间。
  4. 灵活性与多样性:梯度下降有多种变体,如批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-batch Gradient Descent),各自有其优点和适用场景。

二、梯度下降的数学原理

在这里插入图片描述

在深入研究梯度下降的各种实现之前,了解其数学背景是非常有用的。这有助于更全面地理解算法的工作原理和如何选择合适的算法变体。

代价函数(Cost Function)

在机器学习中,代价函数(也称为损失函数,Loss Function)是一个用于衡量模型预测与实际标签(或目标)之间差异的函数。通常用 ( J(\theta) ) 来表示,其中 ( \theta ) 是模型的参数。

在这里插入图片描述

梯度(Gradient)

在这里插入图片描述

更新规则

在这里插入图片描述

代码示例:基础的梯度下降更新规则

import numpy as np

def gradient_descent_update(theta, grad, alpha):
    """
    Perform a single gradient descent update.
    
    Parameters:
    theta (ndarray): Current parameter values.
    grad (ndarray): Gradient of the cost function at current parameters.
    alpha (float): Learning rate.
    
    Returns:
    ndarray: Updated parameter values.
    """
    return theta - alpha * grad

# Initialize parameters
theta = np.array([1.0, 2.0])
# Hypothetical gradient (for demonstration)
grad = np.array([0.5, 1.0])
# Learning rate
alpha = 0.01

# Perform a single update
theta_new = gradient_descent_update(theta, grad, alpha)
print("Updated theta:", theta_new)

输出:

Updated theta: [0.995 1.99 ]

在接下来的部分,我们将探讨梯度下降的几种不同变体,包括批量梯度下降、随机梯度下降和小批量梯度下降,以及一些高级的优化技巧。通过这些内容,你将能更全面地理解梯度下降的应用和局限性。


三、批量梯度下降(Batch Gradient Descent)

在这里插入图片描述

批量梯度下降(Batch Gradient Descent)是梯度下降算法的一种基础形式。在这种方法中,我们使用整个数据集来计算梯度,并更新模型参数。

基础算法

批量梯度下降的基础算法可以概括为以下几个步骤:

在这里插入图片描述

代码示例

下面的Python代码使用PyTorch库演示了批量梯度下降的基础实现。

import torch

# Hypothetical data (features and labels)
X = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]], requires_grad=True)
y = torch.tensor([[1.0], [2.0], [3.0]])

# Initialize parameters
theta = torch.tensor([[0.0], [0.0]], requires_grad=True)

# Learning rate
alpha = 0.01

# Number of iterations
n_iter = 1000

# Cost function: Mean Squared Error
def cost_function(X, y, theta):
    m = len(y)
    predictions = X @ theta
    return (1 / (2 * m)) * torch.sum((predictions - y) ** 2)

# Gradient Descent
for i in range(n_iter):
    J = cost_function(X, y, theta)
    J.backward()
    with torch.no_grad():
        theta -= alpha * theta.grad
    theta.grad.zero_()

print("Optimized theta:", theta)

输出:

Optimized theta: tensor([[0.5780],
        [0.7721]], requires_grad=True)

批量梯度下降的主要优点是它的稳定性和准确性,但缺点是当数据集非常大时,计算整体梯度可能非常耗时。接下来的章节中,我们将探索一些用于解决这一问题的变体和优化方法。


四、随机梯度下降(Stochastic Gradient Descent)

在这里插入图片描述

随机梯度下降(Stochastic Gradient Descent,简称SGD)是梯度下降的一种变体,主要用于解决批量梯度下降在大数据集上的计算瓶颈问题。与批量梯度下降使用整个数据集计算梯度不同,SGD每次只使用一个随机选择的样本来进行梯度计算和参数更新。

基础算法

随机梯度下降的基本步骤如下:

在这里插入图片描述

代码示例

下面的Python代码使用PyTorch库演示了SGD的基础实现。

import torch
import random

# Hypothetical data (features and labels)
X = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]], requires_grad=True)
y = torch.tensor([[1.0], [2.0], [3.0]])

# Initialize parameters
theta = torch.tensor([[0.0], [0.0]], requires_grad=True)

# Learning rate
alpha = 0.01

# Number of iterations
n_iter = 1000

# Stochastic Gradient Descent
for i in range(n_iter):
    # Randomly sample a data point
    idx = random.randint(0, len(y) - 1)
    x_i = X[idx]
    y_i = y[idx]

    # Compute cost for the sampled point
    J = (1 / 2) * torch.sum((x_i @ theta - y_i) ** 2)
    
    # Compute gradient
    J.backward()

    # Update parameters
    with torch.no_grad():
        theta -= alpha * theta.grad

    # Reset gradients
    theta.grad.zero_()

print("Optimized theta:", theta)

输出:

Optimized theta: tensor([[0.5931],
        [0.7819]], requires_grad=True)

优缺点

SGD虽然解决了批量梯度下降在大数据集上的计算问题,但因为每次只使用一个样本来更新模型,所以其路径通常比较“嘈杂”或“不稳定”。这既是优点也是缺点:不稳定性可能帮助算法跳出局部最优解,但也可能使得收敛速度减慢。

在接下来的部分,我们将介绍一种折衷方案——小批量梯度下降,它试图结合批量梯度下降和随机梯度下降的优点。


五、小批量梯度下降(Mini-batch Gradient Descent)

在这里插入图片描述

小批量梯度下降(Mini-batch Gradient Descent)是批量梯度下降和随机梯度下降(SGD)之间的一种折衷方法。在这种方法中,我们不是使用整个数据集,也不是使用单个样本,而是使用一个小批量(mini-batch)的样本来进行梯度的计算和参数更新。

基础算法

小批量梯度下降的基本算法步骤如下:

在这里插入图片描述

代码示例

下面的Python代码使用PyTorch库演示了小批量梯度下降的基础实现。

import torch
from torch.utils.data import DataLoader, TensorDataset

# Hypothetical data (features and labels)
X = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0], [4.0, 5.0]], requires_grad=True)
y = torch.tensor([[1.0], [2.0], [3.0], [4.0]])

# Initialize parameters
theta = torch.tensor([[0.0], [0.0]], requires_grad=True)

# Learning rate and batch size
alpha = 0.01
batch_size = 2

# Prepare DataLoader
dataset = TensorDataset(X, y)
data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)

# Mini-batch Gradient Descent
for epoch in range(100):
    for X_batch, y_batch in data_loader:
        J = (1 / (2 * batch_size)) * torch.sum((X_batch @ theta - y_batch) ** 2)
        J.backward()
        with torch.no_grad():
            theta -= alpha * theta.grad
        theta.grad.zero_()

print("Optimized theta:", theta)

输出:

Optimized theta: tensor([[0.6101],
        [0.7929]], requires_grad=True)

优缺点

小批量梯度下降结合了批量梯度下降和SGD的优点:它比SGD更稳定,同时比批量梯度下降更快。这种方法广泛应用于深度学习和其他机器学习算法中。

小批量梯度下降不是没有缺点的。选择合适的批量大小可能是一个挑战,而且有时需要通过实验来确定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1322223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

明理信息科技打造专属个人或企业知识付费平台,核心功能设计

在当今信息爆炸的时代,知识管理已经成为了每个人必须面对的问题。然而,市面上的知识付费平台大多数都是通用的,无法满足个性化需求。 因此,明理信息科技提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1…

TikTok获客怎么做?可以定制一个获客工具!

随着社交媒体的兴起,越来越多的企业开始将目光投向了短视频平台,TikTok作为其中的佼佼者,凭借其独特的算法和内容推荐机制,吸引了大量用户的关注。 那么,如何在TikTok上获取更多的客户呢?本文将为您揭秘TikTok获客的…

基于JAVA的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

Codeforces Round 915(Div.2) A~C(D,E更新中...)

A.Constructive Problems(思维) 题意: 给出一个 n m n \times m nm的网格,你需要将网格上所有点均填满水,当一个格子同时满足以下两个条件时,格子中也会被填满水: 该格子的左边或右边已经被填满水了 该格子的上面或…

什么是低代码(Low-code) 低代码开发平台特点-优势介绍

随着数字化转型的加速,越来越多的企业开始认识到应用开发的重要性。然而,传统的应用开发方式往往需要耗费大量的时间和资源,而且开发周期长,难以满足企业的快速需求。在这样的背景下,Low Code Platform(低代码平台)应运…

算法分析与设计课后练习26

单源最短路径问题 第一组测试参数 const int n = 6; //图顶点个数加1 int c[n][n] = {{0,0,0,0,0,0}, {0,0,2,3,5000,5000}, {0,5000,0,1,2,5000}, {0,5000,5000,0,9,2}, {0,5000,5000,5000,0,2}, {0,5000,5000,5000,5000,0}}; // 图的邻接矩阵 第二组测试参数 const int n =…

HuatuoGPT模型介绍

文章目录 HuatuoGPT 模型介绍LLM4Med(医疗大模型)的作用ChatGPT 存在的问题HuatuoGPT的特点ChatGPT 与真实医生的区别解决方案用于SFT阶段的混合数据基于AI反馈的RL 评估单轮问答多轮问答人工评估 HuatuoGPT 模型介绍 HuatuoGPT(华佗GPT&…

JavaSE 排序

目录 1 概念1.1 排序1.2 稳定性 2 常见基于比较排序算法总览3 插入排序3.1 直接插入排序3.1.1 思想3.1.2 实现3.1.3 性能分析 3.2 折半插入排序3.2.1 思想3.2.2 实现3.2.3 性能分析 3.3 希尔排序3.3.1 思想3.3.2 实现3.3.3 性能分析 4 选择排序4.1 选择排序4.1.1 思想4.1.2 实现…

构建可扩展的网校平台:在线教育系统源码设计与架构最佳实践

随着科技的不断发展,在线教育系统在教育领域扮演着越来越重要的角色。本文将深入探讨如何构建一个可扩展的网校平台,重点关注在线教育系统的源码设计和架构最佳实践。 一、引言 在当前信息时代,教育已经超越了传统的教学方式,转…

cleanmymac有必要买吗 macbook空间不足怎么办 清理macbook磁盘空间

大家早上好,中午好,下午好,晚上好。 文章有点长,建议先收藏。 macbook是一款非常受欢迎的笔记本电脑,它拥有优秀的性能和设计,但是也有一个常见的问题,就是磁盘空间不足。如果你的macbook经常…

意外之喜!5款小巧工具助你轻松面对繁忙生活

​ 在繁忙的日常中,简单而巧妙的小工具能够带来意外的惊喜。这五款工具或许正是你所需要的,不妨一试。 1.图片背景移除——PhotoScissors ​ PhotoScissors是一款图片背景移除工具,可以使用人工智能技术自动识别图片的前景和背景&#xff0…

从gitlab上拉代码出现很多修改文件。

问题描述: 从gitlab上拉一个项目,出现以下非常多的已修改文件, 问题解决: Unix/Linux 系统使用的是 LF 用作换行符。Windows 一直使用的 CRLF(即,回车 CR和换行 LF)作为换行符。然而&#xf…

Next.js 学习笔记(四)——数据获取

数据获取 数据获取、缓存和重新验证 数据获取是任何应用程序的核心部分。本页介绍如何在 React 和 Next.js 中获取、缓存和重新验证数据。 有四种方法可以获取数据: 在服务器上,使用 fetch在服务器上,使用第三方库在客户端上,…

Java最全面试题专题---4、并发编程(1)

基础知识 并发编程的优缺点 为什么要使用并发编程(并发编程的优点) 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能&#…

网络游戏需要资质

网络游戏需要资质 介绍一、ICP许可证或者ICP备案二、《网络出版服务许可证》三、网络游戏的出版前置审批四、《网络文化经营许可证》 介绍 前段时间一直在忙着给公司做APP的ICP备案所以一直也没有更新文章,去办这个APP的ICP备案也是踩了些坑,今天来讲一…

安全运营之安全加固和运维

安全运营是一个将技术、流程和人有机结合的复杂系统工程,通过对已有安全产品、工具和服务产出的数据进行有效的分析,持续输出价值,解决安全问题,以确保网络安全为最终目标。 安全加固和运维是网络安全运营中的两个重要方面。 安全…

使用栈的特性实现多位计算器

创建一个栈: //定义一个ArrayStack 表示栈 class ArrayStack2 {private int maxSize; //栈的大小private int[] stack; //定义一个栈private int top -1; //定义一个栈顶指针public ArrayStack2(int size) {maxSize size;stack new int[maxSize];}//栈满public …

黑马头条--day04--文章审核

目录 一.审核 1.流程 2.内容安全第三方接口 3.百度AI审核 3.1首先注册百度云账号,然后完成个人信息认证 3.2开启文本审核和图像审核功能 3.3添加sdk依赖 3.4构建测试类 3.5文本审核 3.6图片审核 3.7对百度云审核的封装 3.7.1在自媒体服务的config目录下面…

【1.8计算机组成与体系结构】磁盘管理

目录 1.磁盘基本结构与存取过程1.1 磁盘基本结构1.2 磁盘的存取过程 2.磁盘优化分布存储3.磁盘单缓冲区与双缓冲区4.磁盘移臂调度算法 1.磁盘基本结构与存取过程 1.1 磁盘基本结构 磁盘:柱面,磁道,扇区。 1.2 磁盘的存取过程 存取时间寻…

C#调用阿里云接口实现动态域名解析,支持IPv6(Windows系统下载可用)

电信宽带一般能申请到公网IP,但是是动态的,基本上每天都要变,所以想到做一个定时任务,随系统启动,网上看了不少博文很多都支持IPv4,自己动手写了一个。 (私信可全程指导) 部署步骤…