使用Numpy进行深度学习中5大反向传播优化算法的性能比较(一)

简介: 使用Numpy进行深度学习中5大反向传播优化算法的性能比较(一)

简介

深度学习被称为人工智能的未来。现在,神经网络被称为通用函数逼近器,也就是说,它们有能力表示这个宇宙中任何复杂的函数。计算这个具有数百万个参数的通用函数的想法来自优化的基本数学。优化可以通过多种方式完成,但在本文中,我们将重点讨论基于梯度下降的优化技术。

非凸函数的优化是研究的主要领域。多年来,不同的科学家提出了不同的优化算法来优化神经网络的成本函数。这些算法大部分都是基于梯度的方法,稍作修改。在这篇文章中,我们将讨论5个专业的下降基于算法-Gradient Descent,Momentum,Adagrad, RMSprop, Adam。

方法

为了了解每个算法在实际中是如何工作的,我们将使用一个凸二次函数。我们将对每个算法进行固定次数的迭代(20次),以比较它们在达到最优点时的收敛速度和轨迹。下面给出了为此任务选择的函数的方程,以及使用Matplotlib绘制的函数的三维图和级别集。

image.png


   

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(13,6))
ax = plt.axes(projection="3d")
start, stop, n_values = -8, 8, 800
x_vals = np.linspace(start, stop, n_values)
y_vals = np.linspace(start, stop, n_values)
X, Y = np.meshgrid(x_vals, y_vals)
Z = np.sqrt(0.1*X**2 + 2*Y**2)
plt.contourf(X,Y,Z,)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='winter', edgecolor='none')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

image.png

首先,我们将从最基本的梯度下降算法开始,然后我们将跟随它们发展的趋势来支持每个算法发展背后的想法。所以趋势是这样的

1-Gradient Descent

2-Momentum

3-Adagrad

4-RMSprop

5-Adam

因为所有这些算法在更新规则的每次迭代时都需要梯度。因此,下面给出了函数的梯度,用于在每次迭代时更新两个变量。我们将对所有算法使用固定的学习率值=0.4。

image.png

1、Gradient Descent

梯度下降法是求解最优解的最传统的方法。在这个算法中,使用当前梯度(gt)乘以一些称为学习率的因子来更新当前权值。更新规则的公式如下所示。

image.png

lr=0.4
x1=-4
x2=-6
l1_gd=[]
l2_gd=[]
for i in range(20):
  l1_gd.append(x1)
  l2_gd.append(x2)
  x1=x1-lr*0.2*x1
  x2=x2-lr*4*x2

使用梯度下降的轨迹

image.png

fig = plt.figure(figsize=(13,6))
left, bottom, width, height = 100, 0.1, 0.8, 0.8
ax = fig.add_axes([left, bottom, width, height])
start, stop, n_values = -8, 8, 100
x_vals = np.linspace(start, stop, n_values)
y_vals = np.linspace(start, stop, n_values)
X, Y = np.meshgrid(x_vals, y_vals)
Z = np.sqrt(0.1*X**2 + 2*Y**2)
plt.contourf(X,Y,Z,)
plt.plot(l1_gd[:15],l2_gd[:15],color="red",marker="*",markeredgecolor="black",linewidth=3,label="Gradient Descent")
plt.figure(figsize=(15,10))
plt.figure(figsize=(15,10))
ax.set_title('Level Sets of the Function',size=20)
ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
ax.legend()
plt.show()

正如我们在上面的图中看到的,梯度下降经历了很多振荡,收敛速度非常慢。所以在后面的部分,我们将学习梯度下降的改进,它将帮助我们实现稳定和更快的收敛。

目录
相关文章
|
4月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
4月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
431 5
|
4月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
232 0
|
4月前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法
|
4月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
464 1
|
4月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
283 0
|
6月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
601 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
6月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
549 0
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
385 1

热门文章

最新文章