Python实现随机梯度下降(SGD)算法详解

听雨眠
听雨眠
发布时间:2026-10-13| 3人浏览过
原创

本文基于神经网络训练场景,详细解析如何使用Python实现随机梯度下降(SGD)算法。重点介绍训练集、轮数、小批量大小及学习率等关键参数的配置,并深入剖析update_mini_batch函数在计算偏导数及更新权重和偏置过程中的核心作用,帮助开发者掌握模型优化的关键步骤。

在利用神经网络进行样本训练的过程中,实现随机梯度下降(SGD)算法是核心环节。本文内容参考麦子学院彭亮老师的讲解进行总结,关于神经网络的具体结构定义,可参考其他相关博客文章。

def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
 if test_data:
  n_test = len(test_data)#有多少个测试集
  n = len(training_data)
  for j in xrange(epochs):
   random.shuffle(training_data)
   mini_batches = [
    training_data[k:k+mini_batch_size] 
    for k in xrange(0,n,mini_batch_size)]
   for mini_batch in mini_batches:
    self.update_mini_batch(mini_batch, eta)
   if test_data:
    print "Epoch {0}: {1}/{2}".format(j, self.evaluate(test_data),n_test)
   else:
    print "Epoch {0} complete".format(j) 

在此算法框架中,training_data代表训练数据集,由多个元组(tuples)构成。每个元组包含(x,y),其中x为图像的向量表示,y对应图像的类别标签。参数epochs定义训练的总轮数,mini_batch_size指定每次训练所处理的实例数量,eta代表学习率,而test_data则用于指定测试集。其中,self.update_mini_batch函数至关重要,它是更新神经网络权重和偏置的关键机制,后续将对该函数进行具体定义。

def update_mini_batch(self, mini_batch,eta): 
 nabla_b = [np.zeros(b.shape) for b in self.biases]
 nabla_w = [np.zeros(w.shape) for w in self.weights]
 for x,y in mini_batch:
  delta_nabla_b, delta_nable_w = self.backprop(x,y)#目标函数对b和w的偏导数
  nabla_b = [nb+dnb for nb,dnb in zip(nabla_b,delta_nabla_b)]
  nabla_w = [nw+dnw for nw,dnw in zip(nabla_w,delta_nabla_w)]#累加b和w
 #最终更新权重为
 self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]
 self.baises = [b-(eta/len(mini_batch))*nb for b, nb in zip(self.baises, nabla_b)]

update_mini_batch函数的主要功能是根据传入的数据,对神经网络的权重和偏置进行更新操作。

以上内容为本文的全部介绍,旨在为读者的学习提供有益参考,同时也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。