BGD 实战

梯度下降方法

2.1、三种梯度下降不同

梯度下降分三类:批量梯度下降BGD(Batch Gradient Descent)、小批量梯度下降MBGD(Mini-Batch Gradient Descent)、随机梯度下降SGD(Stochastic Gradient Descent)。
在这里插入图片描述

三种梯度下降有什么不同呢?我们从梯度下降步骤开始讲起,梯度下降步骤分一下四步:

  • 1、随机赋值,Random 随机数生成 θ \theta θ,随机一组数值 w 0 、 w 1 … … w n w_0、w_1……w_n w0w1……wn

  • 2、求梯度 g ,梯度代表曲线某点上的切线的斜率,沿着切线往下就相当于沿着坡度最陡峭的方向下降

  • 3、if g < 0, θ \theta θ 变大,if g > 0, θ \theta θ 变小

  • 4、判断是否收敛 convergence,如果收敛跳出迭代,如果没有达到收敛,回第 2 步再次执行2~4步

    收敛的判断标准是:随着迭代进行损失函数Loss,变化非常微小甚至不再改变,即认为达到收敛

三种梯度下降不同,体现在第二步中:

  • BGD是指在每次迭代使用所有样本来进行梯度的更新

  • MBGD是指在每次迭代使用一部分样本(所有样本500个,使用其中一部分样本)来进行梯度的更新

  • SGD是指每次迭代随机选择一个样本来进行梯度更新

2.2、线性回归梯度更新公式

回顾上一讲公式!

最小二乘法公式如下:

J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2}\sum\limits_{i = 1}^n(h_{\theta}(x^{(i)}) - y^{(i)})^2 J(θ)=21i=1n(hθ(x(i))y(i))2

矩阵写法:

J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y) J(θ)=21(y)T(y)

接着我们来讲解如何求解上面梯度下降的第 2 步,即我们要推导出损失函数的导函数来。

  • θ j n + 1 = θ j n − η ∗ ∂ J ( θ ) ∂ θ j \theta_j^{n + 1} = \theta_j^{n} - \eta * \frac{\partial J(\theta)}{\partial \theta_j} θjn+1=θjnηθjJ(θ) 其中 j 表示第 j 个系数

  • ∂ J ( θ ) ∂ θ j = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 \frac{\partial J(\theta)}{\partial \theta_j} = \frac{\partial}{\partial \theta_j}\frac{1}{2}(h_{\theta}(x) - y)^2 θjJ(θ)=θj21(hθ(x)y)2

= 1 2 ∗ 2 ( h θ ( x ) − y ) ∂ ∂ θ j ( h θ ( x ) − y ) = \frac{1}{2}*2(h_{\theta}(x) - y)\frac{\partial}{\partial \theta_j}(h_{\theta}(x) - y) =212(hθ(x)y)θj(hθ(x)y)(1)

= ( h θ ( x ) − y ) ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = (h_{\theta}(x) - y)\frac{\partial}{\partial \theta_j}(\sum\limits_{i = 0}^n\theta_ix_i - y) =(hθ(x)y)θj(i=0nθixiy) (2)

= ( h θ ( x ) − y ) x j = (h_{\theta}(x) - y)x_j =(hθ(x)y)xj (3)

   x 2 x^2 x2的导数就是 2x,根据链式求导法则,我们可以推出上面第(1)步。然后是多元线性回归,所以 h θ ( x ) h_{\theta}(x) hθ(x) 就 是 θ T x \theta^Tx θTx 即是 w 0 x 0 + w 1 x 1 + … … + w n x n w_0x_0 + w_1x_1 + …… + w_nx_n w0x0+w1x1+……+wnxn ∑ i = 0 n θ i x i \sum\limits_{i = 0}^n\theta_ix_i i=0nθixi。到这里我们是对 θ j \theta_j θj 来求偏导,那么和 w j w_j wj 没有关系的可以忽略不计,所以只剩下 x j x_j xj

  我们可以得到结论就是 θ j \theta_j θj 对应的梯度与预测值 y ^ \hat{y} y^ 和真实值 y 有关,这里 y ^ \hat{y} y^ 和 y 是列向量(即多个数据),同时还与 θ j \theta_j θj 对应的特征维度 x j x_j xj 有关,这里 x j x_j xj 是原始数据集矩阵的第 j 列。如果我们分别去对每个维度 θ 0 、 θ 1 … … θ n \theta_0、\theta_1……\theta_n θ0θ1……θn 求偏导,即可得到所有维度对应的梯度值。

  • g 0 = ( h θ ( x ) − y ) x 0 g_0 = (h_{\theta}(x) - y)x_0 g0=(hθ(x)y)x0
  • g 1 = ( h θ ( x ) − y ) x 1 g_1 = (h_{\theta}(x) - y)x_1 g1=(hθ(x)y)x1
  • ……
  • g j = ( h θ ( x ) − y ) x j g_j = (h_{\theta}(x) - y)x_j gj=(hθ(x)y)xj

总结:

θ j n + 1 = θ j n − η ∗ ( h θ ( x ) − y ) x j \theta_j^{n + 1} = \theta_j^{n} - \eta * (h_{\theta}(x) - y )x_j θjn+1=θjnη(hθ(x)y)xj

2.3、批量梯度下降BGD

  批量梯度下降法是最原始的形式,它是指在每次迭代使用所有样本来进行梯度的更新。每次迭代参数更新公式如下:

θ j n + 1 = θ j n − η ∗ 1 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j^{n + 1} = \theta_j^{n} - \eta *\frac{1}{n}\sum\limits_{i = 1}^{n} (h_{\theta}(x^{(i)}) - y^{(i)} )x_j^{(i)} θjn+1=θjnηn1i=1n(hθ(x(i))y(i))xj(i)

去掉 1 n \frac{1}{n} n1 也可以,因为它是一个常量,可以和 η \eta η 合并

θ j n + 1 = θ j n − η ∗ ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j^{n + 1} = \theta_j^{n} - \eta *\sum\limits_{i = 1}^{n} (h_{\theta}(x^{(i)}) - y^{(i)} )x_j^{(i)} θjn+1=θjnηi=1n(hθ(x(i))y(i))xj(i)

矩阵写法:

θ n + 1 = θ n − η ∗ X T ( X θ − y ) \theta^{n + 1} = \theta^{n} - \eta * X^T(X\theta -y) θn+1=θnηXT(y)

其中 𝑖 = 1, 2, …, n 表示样本数, 𝑗 = 0, 1……表示特征数,这里我们使用了偏置项,即解决 x 0 ( i ) = 1 x_0^{(i)} = 1 x0(i)=1

注意这里更新时存在一个求和函数,即为对所有样本进行计算处理!

优点:
  (1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
  (2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
缺点:
  (1)当样本数目 n 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:

在这里插入图片描述

2.4、随机梯度下降SGD

随机梯度下降法不同于批量梯度下降,随机梯度下降是每次迭代使用一个样本来对参数进行更新。使得训练速度加快。每次迭代参数更新公式如下:

θ j n + 1 = θ j n − η ∗ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j^{n + 1} = \theta_j^{n} - \eta *(h_{\theta}(x^{(i)}) - y^{(i)} )x_j^{(i)} θjn+1=θjnη(hθ(x(i))y(i))xj(i)

θ n + 1 = θ n − η ∗ X i T ( X i θ − y i ) \theta^{n + 1} = \theta^{n} - \eta * X_i^T(X_i\theta -y_i) θn+1=θnηXiT(Xiθyi)

批量梯度下降算法每次都会使用全部训练样本,因此这些计算是冗余的,因为每次都使用完全相同的样本集。而随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的。

优点:
  (1)由于不是在全部训练数据上的更新计算,而是在每轮迭代中,随机选择一条数据进行更新计算,这样每一轮参数的更新速度大大加快。
  缺点:
  (1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
  (2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。

解释一下为什么SGD收敛速度比BGD要快:

  • 批量梯度下降(BGD):在每次迭代时,BGD 计算整个训练集的梯度,并更新模型参数。因此,每次迭代都需要处理整个数据集,计算量较大,收敛速度较慢。
  • 随机梯度下降(SGD):在每次迭代时,SGD 从训练集中随机选择一个样本,计算该样本的梯度,并更新模型参数。因此,每次迭代的计算量较小,收敛速度相对较快。

SGD 相比 BGD 收敛速度快的原因主要有以下几点:

  1. 计算效率:SGD 每次迭代只需要计算一个样本的梯度,计算效率更高。相反,BGD 需要在每次迭代中计算整个数据集的梯度,计算成本较高。
  2. 随机性:SGD 的随机性有助于跳出局部最优解。由于每次迭代只使用一个样本,SGD 的梯度估计可能并不准确,但这种不准确性有时候可以帮助算法跳出局部最优解,从而更快地找到全局最优解。
  3. 可在线学习:SGD 可以很容易地适应在线学习场景,即在新数据到来时,可以直接对模型进行更新,而无需重新处理整个数据集。这对于处理大规模数据集或需要实时更新模型的场景非常有用。

然而,SGD 的收敛过程相对不稳定,可能会在最优解附近波动。为了平衡收敛速度和稳定性,我们可以使用小批量梯度下降(Mini-batch Gradient Descent),它结合了 BGD 和 SGD 的优点,每次迭代使用一个小批量的样本来计算梯度并更新模型参数。

从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程就会盲目一些。其迭代的收敛曲线示意图可以表示如下:

在这里插入图片描述

2.5、小批量梯度下降MBGD

小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代使用总样本中的一部分(batch_size)样本来对参数进行更新。这里我们假设 batch_size = 32,样本数 n = 1000 。实现了更新速度与更新次数之间的平衡。每次迭代参数更新公式如下:

θ j n + 1 = θ j n − η ∗ 1 b a t c h _ s i z e ∑ i = 1 b a t c h _ s i z e ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j^{n + 1} = \theta_j^{n} - \eta *\frac{1}{batch\_size}\sum\limits_{i = 1}^{batch\_size} (h_{\theta}(x^{(i)}) - y^{(i)} )x_j^{(i)} θjn+1=θjnηbatch_size1i=1batch_size(hθ(x(i))y(i))xj(i)

相对于随机梯度下降算法,小批量梯度下降算法降低了收敛波动性, 即降低了参数更新的方差,使得更新更加稳定。相对于全量梯度下降,其提高了每次学习的速度。并且其不用担心内存瓶颈从而可以利用矩阵运算进行高效计算。

一般情况下,小批量梯度下降是梯度下降的推荐变体,特别是在深度学习中。每次随机选择2的幂数个样本来进行学习,例如:8、16、32、64、128、256。因为计算机的结构就是二进制的。但是也要根据具体问题而选择,实践中可以进行多次试验, 选择一个更新速度与更次次数都较适合的样本数。

MBGD梯度下降迭代的收敛曲线更加温柔一些:

在这里插入图片描述

2.6、梯度下降优化

虽然梯度下降算法效果很好,并且广泛使用,但是不管用上面三种哪一种,都存在一些挑战与问题,我们可以从以下几点进行优化:

  1. 选择一个合理的学习速率很难。如果学习速率过小,则会导致收敛速度很慢。如果学习速率过大,那么其会阻碍收敛,即在极值点附近会振荡。
    请添加图片描述

  2. 学习速率调整,试图在每次更新过程中, 改变学习速率。从经验上看,**学习率在一开始要保持大些来保证收敛速度,在收敛到最优点附近时要小些以避免来回震荡。**比较简单的学习率调整可以通过 **学习率衰减(Learning Rate Decay)**的方式来实现。假设初始化学习率为 η 0 \eta_0 η0,在第 t 次迭代时的学习率 η t \eta_t ηt。常用的衰减方式为可以设置为 按迭代次数 进行衰减,迭代次数越大,学习率越小!
    在这里插入图片描述
    在这里插入图片描述

  3. 模型所有的参数每次更新都是使用相同的学习速率。如果数据特征是稀疏的,或者每个特征有着不同的统计特征与空间,那么便不能在每次更新中每个参数使用相同的学习速率,那些很少出现的特征应该使用一个相对较大的学习速率。另一种高效的方式,数据预处理,归一化!
    在这里插入图片描述

  4. 对于非凸目标函数,容易陷入那些次优的局部极值点中,如在神经网路中。那么如何避免呢。
    在这里插入图片描述

    简单的问题,一般使用随机梯度下降即可解决。在深度学习里,对梯度下降进行了很多改进,比如:自适应梯度下降。在深度学习章节,我们会具体介绍。

  5. 轮次和批次

    轮次:epoch,轮次顾名思义是把我们已有的训练集数据学习多少轮,迭代多少次。

    批次:batch,批次这里指的的我们已有的训练集数据比较多的时候,一轮要学习太多数据, 那就把一轮次要学习的数据分成多个批次,一批一批数据的学习。

2.6、梯度下降优化

虽然梯度下降算法效果很好,并且广泛使用,但是不管用上面三种哪一种,都存在一些挑战与问题,我们可以从以下几点进行优化:

  1. 选择一个合理的学习速率很难。如果学习速率过小,则会导致收敛速度很慢。如果学习速率过大,那么其会阻碍收敛,即在极值点附近会振荡。

导入

import numpy as np
import matplotlib.pyplot as plt

记载数据

 # 记载数据
X = np.random.rand(100, 1)
w, b = np.random.randint(1, 10, size=2)
y = w * X + b + np.random.randn(100, 1) * 0.1

初始化系统:

# 包括斜率和截距
theta = np.random.randn(2, 1)

# 梯度下降,轮次
epochs = 2000

# 学习率
learning_rate = 0.01
# 偏置项 截距b 系数1
X_ = np.c_[X, np.ones((100, 1))]

实现梯度下降

for epoch in range(epochs):
    g = X_.T.dot(X_.dot(theta) - y)
    theta = theta - learning_rate * g
print("真实的斜率和截距", w, b)
print("梯度计算所得的是", theta)
plt.scatter(X, y, color='r')
x_ = np.linspace(0, 1, 100)
y_ = x_ * theta[0, 0] + theta[1, 0]
plt.plot(x_, y_, color='green')

梯度下降

使用正规方程进行求解

from sklearn.linear_model import LinearRegression
model = LinearRegression(fit_intercept=False)
model.fit(X_, y)
print('线性回归算法集合的系数是', model.coef_)

使用正规方程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROB端口需求

对于一个 4-way 的超标量处理器来说&#xff0c;在重排序缓存&#xff08;ROB&#xff09;中每周期可以退休的指令个数应该是不小于四条的&#xff1b;如图给出的ROB,在那些最旧的指令中,有三条指令都已经变为了complete状态,那么在一个周期内就可以将这三条指令都退休。 要实现…

Vue路由跳转重定向动态路由VueCli

Vue路由跳转&重定向&动态路由&VueCli 一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要给当前跳转的导航加样式&#xff0c;同时要移除上一个a标签的样式&#xff0c;太麻烦&#xff01;&#xff01;&#xff01; …

抖店一件代发怎么做?保姆级运营教程!

我是电商珠珠 抖店是抖音发展的电商平台&#xff0c;一些没有电商经验的新手&#xff0c;不想囤货&#xff0c;担心卖不出去。 听说可以一件代发&#xff0c;但却不知道怎么做。 今天&#xff0c;我就来详细的跟大家讲一下。 一、选品上架 在选品的时候可以参考后台的电商…

GZ029 智能电子产品设计与开发赛题第5套

2023年全国职业院校技能大赛高职组 “GZ029智能电子产品设计与开发”赛项赛卷五 题目&#xff1a;模拟工业传送带物品检测系统的设计与开发 1 竞赛任务 在智能电视机上播放工业传送带传输物品视频&#xff0c;模拟工业传送带物品检测系统&#xff08;以下简称物品检测系统&…

wpf TelerikUI使用DragDropManager

首先&#xff0c;我先创建事务对象ApplicationInfo&#xff0c;当暴露出一对属性当例子集合对于构成ListBoxes。这个类在例子中显示如下代码&#xff1a; public class ApplicationInfo { public Double Price { get; set; } public String IconPath { get; set; } public …

Nature 子刊| 单细胞转录组揭示从猴到人的进化过程

期刊&#xff1a;Nature Ecology & Evolution IF&#xff1a;16.8 发表时间&#xff1a;2023 DOI号&#xff1a;10.1038/s41559-023-02186-7 研究背景 据推测&#xff0c;人类认知功能的增强是由于皮质扩张和细胞多样性增加所致。然而&#xff0c;推动这些表型创新的机…

产品入门第一讲:Axure的安装以及基本使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

【开源】基于Vue.js的就医保险管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 085 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S085。} 文末获取源码&#xff0c;项目编号&#xff1a;S085。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预…

竞赛保研 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

yolov8学习

1.yolov8代码结构 1.ultralytics文件夹 &#xff08;1&#xff09;assets 待评估的图片 &#xff08;2&#xff09;cfg datasets:不同数据集对应yaml文件 models:不同模型对应的yaml文件 &#xff08;3&#xff09;data 用于图像预处理的py代码

【安卓】安卓xTS之Media模块 学习笔记(3) VTS测试

因为本文内容较多&#xff0c;将目录放在这里&#xff0c;便于检索。 文章目录 文章系列1. 背景2. 参考文档3. 测试步骤3.1 VTS测试包获取3.1.1 自行编译 3.2 VTS测试包文件结构3.3 测试命令3.3.1 常见命令3.3.2 一些常见的option&#xff1a; 4. 测试结果说明4.1 结果result4…

【强化学习-读书笔记】多臂赌博机 Multi-armed bandit

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto强化学习与监督学习 强化学习与其他机器学习方法最大的不同&#xff0c;就在于前者的训练信号是用来评估&#xff08;而不是指导&#xff09;给定动作的好坏的。 …

跨国企业在跨境数据传输时需要注意的几点

对于跨国企业而言&#xff0c;跨境数据传输是一个极为关键的组成部分。这不仅涉及到数据的安全性、合规性和效率&#xff0c;还直接关系到企业的竞争力和未来发展前景。因此&#xff0c;在进行跨境数据传输时&#xff0c;企业需要特别关注以下几个关键点&#xff0c;并采取相应…

设计模式-组合模式

设计模式专栏 模式介绍模式特点应用场景组合模式和装饰者模式的区别代码示例Java实现组合模式python实现组合模式 组合模式在spring中的应用 模式介绍 组合模式是一种结构型设计模式&#xff0c;它针对由多个节点对象&#xff08;部分&#xff09;组成的树形结构的对象&#x…

MES管理系统的应用场景都包括哪些

在当今高度信息化的时代&#xff0c;企业生产管理面临着越来越多的挑战。如何实现生产过程的数字化、智能化和优化&#xff0c;提高生产效率和产品质量&#xff0c;是许多制造企业亟待解决的问题。作为一种面向车间现场生产制造过程的数字化管理工具&#xff0c;MES管理系统在企…

最大公因数,最小公倍数详解

前言 对于初学编程的小伙伴们肯定经常遇见此类问题&#xff0c;而且为之头疼&#xff0c;今天我来给大家分享一下&#xff0c;最大公因数和最小公倍数的求法。让我们开始吧&#xff01; 文章目录 1&#xff0c;最大公因数法1法2法3 2&#xff0c;最小公倍数3&#xff0c;尾声 …

Linux安装Nginx并部署Vue项目

今天部署了一个Vue项目到阿里云的云服务器上&#xff0c;现记录该过程。 1. 修改Vue项目配置 我们去项目中发送axios请求的文件里更改一下后端的接口路由&#xff1a; 2. 执行命令打包 npm run build ### 或者 yarn build 打包成功之后&#xff0c;我们会看到一个dist包&a…

【Python】修改pip 默认安装位置

使用pip安装的时候&#xff0c;一般是默认安装在c盘里的。这样做很容易会让c盘的文件堆满。那么如何让pip安装的包放入d盘呢&#xff1f; 查看pip默认安装的位置 在cmd里输入python -m site&#xff0c;这里可以看到&#xff0c;安装包会默认下载到c盘中 从这里可以看到&am…

数据结构之----逻辑结构、物理结构

数据结构之----逻辑结构、物理结构 目前我们常见的数据结构分别有&#xff1a; 数组、链表、栈、队列、哈希表、树、堆、图 而它们可以从 逻辑结构和物理结构两个维度进行分类。 什么是逻辑结构&#xff1f; 逻辑结构是指数据元素之间的逻辑关系&#xff0c;而逻辑结构又分为…

基于深度学习的yolov5入侵检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介IntroductionYOLOv5 Overview入侵检测系统架构1. 数据采集2. YOLOv5模型训练3. 实时监测4. 告警与反馈 性能评估与优化 二、功能三、系统四. 总结 一项目简…