梯度下降推导与优化算法的理解和 Python 实现

动量因子计算 python_BARRA 10 个风格因子的计算方式 BARRA 10 个风格因子的计算方式本文主要参考 BARRA-USE5BARRA 风险模型作为量化多因子的范例, 其十个风格因子作为最常见的, 解释程度很高的十个因子, 经常被用作风险因子, 甚至是作为阿尔法因子. 了解其计算方法对于我们构造其他风险因子和阿尔法因子有很大帮助.1 SIZE(市值因子)定义:为公司股票总市值的自然对数, 最常见的风格因子2 BETA(贝塔因子)定义:股票超额收益日... 阅读详情

梯度下降推导与优化算法的理解和Python实现

目录

  1. 梯度下降算法推导

  2. 优化算法的理解和Python实现

  3. SGD

  4. Momentum

  5. Nestrov

  6. AdaGrad

  7. RMSprop

  8. Adam

  9. 算法的表现

1

梯度下降算法推导

模型的算法就是为了通过模型学习,使得训练集的输入获得的实际输出与理想输出尽可能相近。极大似然函数的本质就是衡量在某个参数下,样本整体估计和真实情况一样的概率,交叉熵函数的本质是衡量样本预测值与真实值之间的差距,差距越大代表越不相似

1. 为什么要最小化损失函数而不是最大化模型模型正确识别的数目?

我们将不同的损失函数都定义为损失函数:;因为最大化模型正确识别的数目的函数并不是关于 的平滑函数,而交叉熵等损失函数可以更容易地调整  来使得模型进行训练,然后再进行模型准确率的计算,这是一种曲径折跃的解决问题的方式。

2. 如何推导梯度下降?为什么梯度下降的更新方向是梯度的负方向?

损失函数  是一个包含多个参数的函数,假设将损失函数简化为只包含两个参数的 , 如下图所示,我们的目标就是找到函数  的全局最小值。当然,在实际工作中,得到一组参数使得损失函数达到全局最小值是一种理想情况,更一般的情况则是根据评价指标去评价模型是否可以得到一个我们能够接受的结果。

下面开始推导

假设在  的方向移动  ,在  的方向移动 ,那么  的变化为:

 (1)

最小化损失函数简而言之就是损失函数的值随着时间越来越小,可得目标函数  ,因为 ,  ,写成向量表示,设  ,  ,(1)更新为:

 (2)

如何令  呢?假设令  ,那么(2)更新为:

 (3)

因为  ,那么可以看到(3)中的  是符合优化目标的,这从侧面也解释了为什么梯度下降的更新方向是梯度的负方向。

将上述过程重复多次,  就会达到一个极小值,这就是梯度下降的推导,将其应用到神经网络模型中,就是用梯度向量和学习率调整  ,所以:

2

优化算法的理解和Python实现

在推导了梯度下降算法,再来看各个优化算法也就不难了。引用【1】中总结的框架,首先定义:待优化参数:  ,目标函数:  ,初始学习率 。

而后,开始进行迭代优化。在每个epoch  :

  1. 计算目标函数关于当前参数的梯度: 

  2. 根据历史梯度计算一阶动量和二阶动量:

  3. 计算当前时刻的下降梯度: 

  4. 根据下降梯度进行更新: 

掌握了这个框架,你可以轻轻松松设计自己的优化算法。步骤3、4对于各个算法都是一致的,主要的差别就体现在1和2上。

注:下面的内容大部分取自引用【2】和【3】

3

SGD

随机梯度下降法不用多说,每一个参数按照梯度的方向来减小以追求最小化损失函数,梯度下降法目前主要分为三种方法,区别在于每次参数更新时计算的样本数据量不同:批量梯度下降法(BGD, Batch Gradient Descent),随机梯度下降法(SGD, Stochastic Gradient Descent)及小批量梯度下降法(Mini-batch Gradient Descent)。

SGD缺点

  • 选择合适的learning rate比较困难 ,学习率太低会收敛缓慢,学习率过高会使收敛时的波动过大

  • 所有参数都是用同样的learning rate

  • SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点

更新方式

Python实现

class SGD:
    def __init__(self, lr=0.01):
        self.lr = lr

    def update(self, params, grads):
        for key in params.keys():
            params[key] -= self.lr * grads[key]

4

Momentum

在梯度下降的基础上加入了动量,动量优化方法引入物理学中的动量思想:当我们将一个小球从山上滚下来,没有阻力时,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。momentum算法思想:参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是通过积累之前的动量来加速当前的梯度。下面的式子中,  表示动量,  表示动量因子,通常取值0.9或者近似值。

更新方式

Python实现

class Momentum:
    def __init__(self, lr=0.01, momemtum=0.9):
        self.lr = lr
        self.momemtum = momemtum
        self.v = None

    def update(self, params, grads):
        if self.v is None:
            self.v = {}
            for key, val in params.items():
                self.v[key] = np.zeros_like(val)

        for key in params.keys():
            self.v[key] = self.momemtum * self.v[key] - self.lr * grads[key]
            params[key] += self.v[key]

5

Nestrov

Nestrov也是一种动量更新的方式,但是与普通动量方式不同的是,Nestrov为了加速收敛,提前按照之前的动量走了一步,然后求导后按梯度再走一步。

更新方式

但是这样一来,就给实现带来了很大的麻烦,因为我们当前是在W的位置上,无法求得W+αv处的梯度,所以我们要进行一定改变。由于W与W+αv对参数来说没有什么区别,所以我们可以假设当前的参数就是W+αv。就像下图,按照Nestrov的本意,在0处应该先按照棕色的箭头走αv到1,然后求得1处的梯度,按照梯度走一步到2。

现在,我们假设当前的W就是1处的参数,但是,当前的动量v仍然是0处的动量,那么更新方式就可以写作:

为了便于理解, W和v的更新可以看做是 空间中向量相加 的方式,这样一来,动量v就由0处的动量更新到了下一步的2处的动量。但是下一轮的W相应的应该在3处,所以W还要再走一步αv,即完整的更新过程应该如下所示:

第二行的v是第一行更新的结果,为了统一v的表示,更新过程还可以写作:

Python实现

class Nestrov:
    def __init__(self, lr=0.01, momentum=0.9):
        self.lr = lr
        self.momentum = momentum
        self.v = None

    def update(self, params, grads):
        if self.v is None:
            self.v = {}
            for key, val in params.items():
                self.v[key] = np.zeros_like(val)

        for key in params.keys():
            self.v[key] = self.momentum * self.v[key] - self.lr * grads[key]
            params[key] += self.momentum * self.v[key] - self.lr * grads[key]

但是根据我看到的各个框架的代码,它们好像都把动量延迟更新了一步,所以实现起来有点不一样(或者说是上下两个式子的顺序进行了颠倒),我也找不到好的解释,但是在MNIST数据集上最终的结果要好于原来的实现。

Python实现

class Nestrov:
    def __init__(self, lr=0.01, momentum=0.9):
        self.lr = lr
        self.momentum = momentum
        self.v = None

    def update(self, params, grads):
        if self.v is None:
            self.v = {}
            for key, val in params.items():
                self.v[key] = np.zeros_like(val)

        for key in params.keys():
            self.v[key] *= self.momentum
            self.v[key] -= self.lr * grads[key]
            params[key] += self.momentum * self.momentum * self.v[key]
            params[key] -= (1 + self.momentum) * self.lr * grads[key]

6

Adagrad

前面介绍了几种动量法,动量法旨在通过每个参数在之前的迭代中的梯度,来改变当前位置参数的梯度,在梯度稳定的地方能够加速更新的速度,在梯度不稳定的地方能够稳定梯度。

而AdaGrad则是一种完全不同的思路,它是一种自适应优化算法。它通过每个参数的历史梯度,动态更新每一个参数的学习率,使得每个参数的更新率都能够逐渐减小。前期梯度加大的,学习率减小得更快,梯度小的,学习率减小得更慢些。

Adagrad缺点

  • 仍需要手工设置一个全局学习率  , 如果  设置过大的话,会使regularizer过于敏感,对梯度的调节太大

  • 中后期,分母上梯度累加的平方和会越来越大,使得参数更新量趋近于0,使得训练提前结束,无法学习

更新方式

其中δ用于防止除零错

Python实现

class AdaGrad:
    def __init__(self, lr=0.01):
        self.lr = lr
        self.h = None

    def update(self, params, grads):
        if self.h is None:
            self.h = {}
            for key, val in params.items():
                self.h[key] = np.zeros_like(val)

        for key in params.keys():
            self.h[key] += grads[key] * grads[key]
            params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)

7

RMSprop

AdaGrad有个问题,那就是学习率会不断地衰退。这样就会使得很多任务在达到最优解之前学习率就已经过量减小,所以RMSprop采用了使用指数衰减平均来慢慢丢弃先前的梯度历史。这样一来就能够防止学习率过早地减小。

RMSprop特点

  • 其实RMSprop依然依赖于全局学习率 

  • RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间

  • 适合处理非平稳目标——对于RNN效果很好

更新方式:

Python实现

class RMSprop:
    def __init__(self, lr=0.01, decay_rate=0.99):
        self.lr = lr
        self.decay_rate = decay_rate
        self.h = None

    def update(self, params, grads):
        if self.h is None:
            self.h = {}
            for key, val in params.items():
                self.h[key] = np.zeros_like(val)

        for key in params.keys():
            self.h[key] *= self.decay_rate
            self.h[key] += (1 - self.decay_rate) * grads[key] * grads[key]
            params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)

8

Adam

Adam方法结合了上述的动量(Momentum)和自适应(Adaptive),同时对梯度和学习率进行动态调整。如果说动量相当于给优化过程增加了惯性,那么自适应过程就像是给优化过程加入了阻力。速度越快,阻力也会越大。

Adam首先计算了梯度的一阶矩估计和二阶矩估计,分别代表了原来的动量和自适应部分

β_1 与 β_2 是两个特有的超参数,一般设为0.9和0.999。

但是,Adam还需要对计算出的矩估计进行修正

其中t是迭代的次数,修正的原因在

Why is it important to include a bias correction term for the Adam optimizer for Deep Learning?stats.stackexchange.com

这个问题中有非常详细的解释。简单来说就是由于m和v的初始值为0,所以第一轮的时候会非常偏向第二项,那么在后面计算更新值的时候根据β_1 与 β_2的初始值来看就会非常的大,需要将其修正回来。而且由于β_1 与 β_2很接近于1,所以如果不修正,对于最初的几轮迭代会有很严重的影响。

最后就是更新参数值,和AdaGrad几乎一样,只不过是用上了上面计算过的修正的矩估计

Adam特点

  • Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳。

  • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点

  • 为不同的参数计算不同的自适应学习率

  • 也适用于大多非凸优化问题——适用于大数据集和高维空间。

为了使得Python实现更加简洁,将修正矩估计代入原式子,也就是重新表达成只关于m和v的函数,修改如下

python实现

class Adam:
    def __init__(self, lr=0.001, beta1=0.9, beta2=0.999):
        self.lr = lr
        self.beta1 = beta1
        self.beta2 = beta2
        self.iter = 0
        self.m = None
        self.v = None

    def update(self, params, grads):
        if self.m is None:
            self.m, self.v = {}, {}
            for key, val in params.items():
                self.m[key] = np.zeros_like(val)
                self.v[key] = np.zeros_like(val)

        self.iter += 1
        lr_t = self.lr * np.sqrt(1.0 - self.beta2**self.iter) / (1.0 - self.beta1**self.iter)

        for key in params.keys():
            self.m[key] += (1 - self.beta1) * (grads[key] - self.m[key])
            self.v[key] += (1 - self.beta2) * (grads[key]**2 - self.v[key])

            params[key] -= lr_t * self.m[key] / (np.sqrt(self.v[key]) + 1e-7)

9

算法的表现

各个算法在等高线的表现,它们都从相同的点出发,走不同的路线达到最小值点。可以看到,Adagrad,Adadelta和RMSprop在正确的方向上很快地转移方向,并且快速地收敛,然而Momentum和NAG先被领到一个偏远的地方,然后才确定正确的方向,NAG比momentum率先更正方向。SGD则是缓缓地朝着最小值点前进。

‍

欢迎扫码关注:

Python实现迭代优化算法:从梯度下降到Adam与Nelder-Mead 在机器学习和数据分析中,优化算法是寻找最佳模型参数的核心技术。其基本原理是通过迭代方式,在解空间中逐步逼近目标函数的最优值。梯度下降法作为基础,通过计算目标函数的梯度来确定下降方向,但其固定学习率易导致收敛问题。为此,自适应学习率算法应运而生,它们通过引入动量或历史梯度信息动态调整步长,显著提升了训练效率与稳定性。这类技术对于模型训练、参数调优等工程实践具有重要价值。本文聚焦于梯度下降、带动量的优化算法以及Nelder-Mead等经典方法的Python实现与对比,帮助读者从底层理解优化过程,掌握算法调优的关 阅读详情

相关推荐

从“下山”到AI引擎:全面理解梯度下降(上)

本文系统介绍了梯度下降这一机器学习核心优化算法。从几何直觉的“下山”比喻切入,解释了梯度下降通过负梯度方向寻找最优参数的工作原理。文章详细阐述了参数更新规则、学习率的重要性和同步更新原则,并通过Python代码示例演示了线性回归中的梯度下降实现。最后总结了梯度下降的通用性及其在深度学习中的应用,指出尽管存在局部最小值等挑战,梯度下降仍是现代AI模型训练的基础算法。全文以直观比喻和数学公式相结合的方式,帮助读者深入理解这一优化方法的本质。

long1973m的博客 1195

梯度下降推导与优化算法的理解和Python实现

梯度下降推导与优化算法的理解和Python实现目录梯度下降算法推导优化算法的理解和Python实现SGDMomentumNestrovAdaGradRMSpropAdam算法的表现1梯...

Jerry的编程之路 555

股票python量化交易024-动量策略(中)

前言 接上一篇股票python量化交易023-动量策略(上),目前已经获取了 交易策略的数据。也就完成了下图中的第1点。 接下来我们需要继续完成2,3,4步骤 计算以月为周期的收益率,也叫动量因子。根据每个月的收益率决定买卖信号 def momenturm(concat_data, shift_N=1, top_n=2): ''' 根据股票池数据计算动量因子,也就是以月周期内的收益率 :param data: :param shift_N: :retur

Johnny2004的专栏 1519

python量化交易第五章

一.什么是动量策略 1.1概念: 预先对股票收益和交易量设定过滤准则,当股票收益或股票收益和交易量同时满足过滤准则就买入(做多)或卖出(做空)股票的投资策略。 核心:以股票的历史收益率作为主要的交易原则 1.2动量策略的设计思路 正向策略:涨的还会涨,跌的还会跌,买入涨最多的,卖出跌最多的,利用市场对信息的反应不足。 反向策略:涨太多了会跌,跌太多了会涨,买入跌最多的,卖出涨最多的,市场对信息反应过度 1.3动量策略的实现步骤 确定交易对象:股票池,考虑流动性(沪深300,创业板) 选定业绩评价周期:过去

weixin_43853077的博客 838

梯度下降 (Gradient Descent)

梯度下降 (Gradient Descent) 1. 背景介绍 1.1 问题的由来 在机器学习和深度学习领域,优化算法是模型训练中不可或缺的一部分。而在众多优化算法中,梯度下降(Gradient Descent)无疑是使用最广泛、最经

AI天才研究院 1132

AI优化算法:梯度下降的数学原理与实现

本文旨在为读者提供梯度下降算法的全面理解,从数学基础到代码实现,适合希望深入掌握AI优化算法的开发者和学习者。我们将覆盖标准梯度下降、随机梯度下降和小批量梯度下降等主要变体。通过生活实例引入梯度下降概念详细解释数学原理和公式推导Python实现完整示例讨论实际应用和优化技巧展望未来发展方向梯度下降:一种通过迭代方式寻找函数最小值的优化算法学习率:控制每次参数更新步长的超参数损失函数:衡量模型预测与真实值差异的函数梯度下降:通过迭代方式沿着梯度反方向更新参数,逐步逼近函数最小值。

AI智能探索者的博客 582

机器学习Gradient Descent(梯度下降) + Momentum(动量)寻找局部最优解Local Minima的过程

Gradient Descent(梯度下降) + Momentum(动量) 上次 这里 介绍了Gradient Descent寻找最优解的过程 学习到发现还有一个算法就是加上Momentum(动量,就是上一次Gradient Descent后的步长值)来作为下一次更新位置的参数,这样来寻找局部最优解Local Minima的话,会比单独使用梯度下降法来求解效果更好。 Movement:最后一步的移动目前是最小的梯度 ...

车手只需要车和手,压力来自轮胎 1229

“理解梯度下降:直觉、数学公式和推导”

梯度下降是机器学习中使用的一种流行的优化算法,通过迭代调整函数的参数来最小化函数。基本思想是将函数的参数沿函数梯度最陡峭下降的方向移动。

gongdiwudu的专栏 3333

动量因子计算 python_梯度下降推导与优化算法的理解和Python实现

1. 梯度下降算法推导模型的算法就是为了通过模型学习,使得训练集的输入获得的实际输出与理想输出尽可能相近。极大似然函数的本质就是衡量在某个参数下,样本整体估计和真实情况一样的概率,交叉熵函数的本质是衡量样本预测值与真实值之间的差距,差距越大代表越不相似1. 为什么要最小化损失函数而不是最大化模型模型正确识别的数目?我们将不同的损失函数都定义为损失函数:;因为最大化模型正确识别的数...

weixin_39800957的博客 699

优化算法:梯度下降 (Gradient Descent) 原理与代码实例讲解

《优化算法:梯度下降 (Gradient Descent) 原理与代码实例讲解》 关键词:优化算法,梯度下降,机器学习,Python实现,代码实例 摘要:

AI天才研究院 628

优化算法:Adagrad 原理与代码实例讲解

文章标题 《优化算法:Adagrad原理与代码实例讲解》 关键词: 优化算法、Adagrad、梯度下降、机器学习、Python代码实例 摘要: 本文将深入探讨Adagrad算法的原理和实现,通过详细的理论分析和实际代码实例,帮助读者理解Adagrad算法在机器

AI天才研究院 1053

用Python实现线性回归:从数学原理到代码实战

用Python实现线性回归:从数学原理到代码实战

qq_63911508的博客 958

GIS坐标系转换以及空间校正和地理配准

许多小伙伴都对坐标系,投影这类问题迷迷糊糊,我之前也一样,现在总结一下。 坐标系的转换1.为什么要进行坐标系的转换?2. 不同坐标系的介绍1.地理坐标系我国常见的地理坐标(1).北京54坐标系(2).西安80坐标系(3).WGS-84坐标系(4).大地2000坐标系2.投影坐标系我国常用的投影坐标系(1) UTM投影(2) 高斯-克吕格投影(3) 兰伯特投影(4) 阿尔伯斯投影投影坐标系的选择3. 坐标系的转换1.已知坐标系之间的转换1.1 两坐标系的参考椭球相同1.2 两坐标系的参考椭球不一致,但是GIS

m0_47258611的博客 8915

2021-07-21集成学习第三次大作业

1.回归问题和分类问题的联系和区别,如何利用回归问题理解分类问题 2.为什么分类问题的损失函数可以是交叉熵而不均方误差 参考:https://blog.csdn.net/liuweiyuxiang/article/details/90707375 3.线性判别分析和逻辑回归在估计参数方面有什么异同点 4.从零推导SVM 5.二次判别分析,线性判别分析,朴素贝叶斯之间的联系和区别 6.使用python+numpy实现逻辑回归 import numpy as np class logistic: de

weixin_43141656的博客 224

Anomalib实战:5分钟搞定图像异常检测模型训练(附完整代码)

本文提供了一份基于Anomalib框架的图像异常检测快速实战指南。文章详细介绍了从环境搭建、数据准备到模型训练与推理的完整流程,重点推荐了训练速度快、效果稳定的PatchCore模型,并附带了可运行的完整代码,旨在帮助开发者快速上手工业质检等实际应用。

weixin_29039773的博客 423

达芬奇Pro开发板硬件验证全流程指南

FPGA开发板硬件验证是嵌入式系统可靠性的基石,其核心在于理解SoC启动时序、IO资源映射与高速接口物理层约束。基于Xilinx Zynq-7000异构架构的开发平台,需围绕电源完整性、时钟稳定性、信号完整性及软硬协同启动链路展开分层测试。技术价值体现在规避量产失效率、支撑高可靠工业控制与实时图像处理等场景。典型应用涵盖千兆以太网通信验证、DVP摄像头与RGB LCD显示链路调试、以及SFP+光纤接口PRBS误码率测试。本文聚焦达芬奇Pro系列开发板,深入解析JTAG下载、QSPI Flash重烧录、RGM

weixin_42453228的博客 126

【机器学习入门】(7) 线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降

各位同学好,今天我和大家分享一下python机器学习中的线形回归算法。内容有: (1) 线性回归方程、(2) 损失函数推导、(3) 似然函数、(4) 三种梯度下降方法 1.概念简述 线性回归是通过一个或多个自变量与因变量之间进行建模的回归分析,其特点为一个或多个称为回归系数的模型参数的线性组合。如下图所示,样本点为历史数据,回归曲线要能最贴切的模拟样本点的趋势,将误差降到最小。 2. 线性回归方程 线形回归方程,就是有 n 个特征,然后每个特征Xi都有相应...

博观而约取,厚积而薄发 1万+

2025数学建模美赛C题完整建模思路——奥运会奖牌榜的模型

2025数学建模美赛C题完整建模思路——奥运会奖牌榜的模型

Yilu264的博客 1万+

优化算法之梯度下降

本文系统介绍了梯度下降优化算法的基础知识。首先阐述了函数的基本概念和线性模型的一般表达式($\hat{y}=w^Tx+b$),并讨论了权重随机初始化与偏置初始化为0的原则。在损失函数部分,重点讲解了均方误差(MSE)的定义及其在回归问题中的应用。文章深入探讨了优化算法的数学基础,包括导数的定义、常用导数公式,以及扩展到多元函数时的偏导数和梯度概念。最后介绍了链式法则在复合函数求导中的应用,为理解梯度下降算法奠定了理论基础。这些内容构成了深度学习优化方法的核心数学框架。

m0_55297736的博客 718

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2881

基于Python实现学习进度跟踪系统

{{ task }}: {{ "%.1f"|format(hours) }}小时

寒寒豆豆软件公司的博客 196

梯度下降与牛顿法(Python)

最近两天一直在复习李航老师的《统计学习方法》这本书上面的知识,看到了优化算法。推导了梯度下降与牛顿法的计算公式,并最终实现了相应python代码。想着记录下来,所以我就用这篇文章来记录一些要点。 梯度下降 关于梯度下降没什么好说的了,就主要是利用函数的一阶导。代码如下: def gradient_descent_ld(grad, cur_x=0.1, learning_rate=0.01,...

飞奔的菜猪的博客 1330

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6106

python牛顿法与拟牛顿法_梯度下降与牛顿法(Python)

最近两天一直在复习李航老师的《统计学习方法》这本书上面的知识,看到了优化算法。推导了梯度下降与牛顿法的计算公式,并最终实现了相应python代码。想着记录下来,所以我就用这篇文章来记录一些要点。梯度下降关于梯度下降没什么好说的了,就主要是利用函数的一阶导。代码如下:def gradient_descent_ld(grad, cur_x=0.1, learning_rate=0.01, precis...

weixin_39632057的博客 323

YOLOv8 交通管理三大核心功能 —— 二、违章检测系统 详细解释及代码完整示例

YOLOv8交通违章检测系统

u010117029的博客 503

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: Pandas进阶修炼120题
下一篇: GitHub 星标 3500+,180 页《Python之路2.0.pdf》首次开放下载!
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值