批量梯度下降、随机梯度下降、小批量梯度下降

2024-02-16 01:04

本文主要是介绍批量梯度下降、随机梯度下降、小批量梯度下降,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、批量梯度下降(Batch Gradient Descent,BGD)

  在批量梯度下降中,每次迭代都使用整个训练集的数据进行梯度计算和参数更新。也就是说,每次迭代都对所有的样本求取梯度,然后更新参数。由于要处理整个训练集,批量梯度下降需要较大的内存来存储全部数据,并且计算速度相对较慢。但它的优点是可以保证收敛到全局最优解,尤其在凸优化问题上表现良好。

import numpy as npX = np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]m = len(X_b)
n_iterations = 1000
t0, t1 = 5, 50def learning_rate_schedule(t):return t0/(t1+t)theta = np.random.randn(2, 1)
for iteration in range(n_iterations):gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)eta = learning_rate_schedule(iteration)theta = theta - eta*gradientsprint(theta)

1. 三次运行结果

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

  在随机梯度下降中,每次迭代只使用一个样本进行梯度计算和参数更新。因为每次只看一个样本,随机梯度下降的计算速度很快,但对于非凸优化问题或存在噪声较多的数据集,可能会收敛到局部最优解而不是全局最优解。此外,由于随机性的存在,它可以帮助跳出局部最优解。

import numpy as npX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]m = len(X_b)
n_epochs = 1000
t0, t1 = 5, 50def learning_rate_schedule(t):return t0/(t1+t)theta = np.random.randn(2, 1)
for epoch in range(n_epochs):for i in range(m):random_index = np.random.randint(m)xi = X_b[random_index:random_index+1]yi = y[random_index:random_index+1]gradients = 2 * xi.T.dot(xi.dot(theta) - yi)eta = learning_rate_schedule(epoch*m + i)theta = theta - eta*gradientsprint(theta)

1. 三次运行结果

三、小批量梯度下降(Mini-batch Gradient Descent,MBGD)

  小批量梯度下降是介于批量梯度下降和随机梯度下降之间的一种方法。它每次迭代使用一个小批量(batch)的样本进行梯度计算和参数更新。这个小批量的大小通常是介于全数据集和单个样本之间的一个中等规模。小批量梯度下降综合了批量梯度下降的稳定性和随机梯度下降的计算效率,通常在实际应用中被广泛采用。

import numpy as npX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]m = len(X_b)
batch_size = 10
n_epochs = 1000
t0, t1 = 5, 50def learning_rate_schedule(t):return t0/(t1+t)theta = np.random.randn(2, 1)
for epoch in range(n_epochs):shuffled_index = np.random.permutation(m)X_b = X_b[shuffled_index]y = y[shuffled_index]for i in range(0, m, batch_size):xi = X_b[i: i+batch_size]yi= y[i: i+batch_size]gradients = 2/batch_size * xi.T.dot(xi.dot(theta) - yi)eta = learning_rate_schedule(epoch*m + i)theta = theta - eta*gradientsprint(theta)

1. 三次运行结果

四、sklearn—LinearRegression

import numpy as np
from sklearn.linear_model import LinearRegressionX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)reg = LinearRegression().fit(X, y)print(reg.coef_)
print(reg.intercept_)

1. 三次运行结果 


 

这篇关于批量梯度下降、随机梯度下降、小批量梯度下降的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713060

相关文章

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y