
程序员的数学课&数学建模笔记分享
文章平均质量分 57
记录序员所需要的数学及数学建模相关内容。
程序员杨弋
在职算法工程师,永怀学徒之心。
展开
-
Python实现拟牛顿法
拟牛顿法是一种求解非线性优化问题的迭代算法,通过构造目标函数Hessian矩阵的近似矩阵来避免直接计算Hessian矩阵及其逆,从而大大减少了计算量。这种方法在机器学习、深度学习、数值分析等领域都有广泛的应用。原创 2024-03-19 18:30:21 · 404 阅读 · 0 评论 -
Python实现共轭梯度法
共轭梯度法是一种求解无约束优化问题的迭代算法。它利用共轭方向的性质,通过一系列一维搜索过程找到函数的最小值。与共轭方向法相比,共轭梯度法不需要事先给定一组共轭方向,而是在迭代过程中逐步构造出这些方向。原创 2024-03-19 18:20:12 · 461 阅读 · 0 评论 -
Python实现简单的梯度下降算法
梯度下降算法是一种用于求解最小化问题的优化算法。在机器学习和深度学习中,它常用于优化损失函数,从而找到最佳的模型参数。原创 2024-03-19 18:04:37 · 361 阅读 · 0 评论 -
Python实现牛顿法
牛顿法是一种在实数域和复数域上近似求解方程的方法。其核心思想是利用函数的泰勒级数的前几项来找到函数f(x) = 0的根。这种方法在函数足够平滑时通常能够非常快速地收敛到根。原创 2024-03-19 18:13:02 · 269 阅读 · 0 评论 -
克服牛顿法对Hessian矩阵求逆的困难
牛顿法是一种高效的优化算法,它在许多领域都有着广泛的应用,如机器学习、统计、以及科学计算等。然而,传统的牛顿法在每一步迭代中都需要计算Hessian矩阵(二阶导数矩阵)的逆,这在计算上是非常昂贵的,特别是在处理大规模问题时。为了克服这个困难,人们提出了多种策略,包括拟牛顿法、共轭梯度法等。原创 2024-03-19 18:15:05 · 676 阅读 · 0 评论 -
用近似方法替代牛顿法的Hessian矩阵
牛顿法是一种非常有效的优化算法,但由于其需要计算Hessian矩阵(二阶导数矩阵)及其逆,使得该方法在大型或复杂问题上变得难以实施。因此,许多研究者提出了使用近似方法来替代直接计算Hessian矩阵的策略,以此减少计算量并加速优化过程。原创 2024-03-19 18:24:41 · 558 阅读 · 0 评论 -
参数少、迭代次数少的优化算法
在机器学习和深度学习的实践中,优化算法的选择对于模型的训练速度和效果至关重要。有些优化算法需要调整的参数较少,且能在较短的迭代次数内达到良好的收敛效果。本文将介绍两种参数较少且通常能快速收敛的优化算法:随机梯度下降(Stochastic Gradient Descent, SGD)和Adam优化算法。原创 2024-03-19 18:07:09 · 329 阅读 · 0 评论 -
参数少、迭代次数少的优化算法
在机器学习和优化问题中,我们常常面临需要快速找到最优解的挑战。当参数数量众多或者计算资源有限时,使用参数少、迭代次数少的优化算法尤为重要。本文将介绍一种这样的算法——随机梯度下降法(Stochastic Gradient Descent, SGD),并解释其公式、应用场景及提供示例代码。随机梯度下降法是对传统梯度下降法的一种改进,它每次迭代只使用一个样本来计算梯度,而不是使用全部样本。来运行随机梯度下降算法。注意,在这个例子中,我们将批大小设置为1,即每次迭代只使用一个样本,这是随机梯度下降法的一个特点。原创 2024-03-14 10:52:05 · 640 阅读 · 0 评论 -
Python实现拟牛顿法
拟牛顿法(Quasi-Newton Methods)是一类用于求解无约束优化问题的迭代算法,它们试图通过近似目标函数的二阶导数信息(即Hessian矩阵或其逆矩阵)来改进梯度下降法的性能。由于拟牛顿法能够利用目标函数的曲率信息来加速收敛,因此在处理大规模数据集和复杂模型时,它通常比简单的梯度下降法更有效。拟牛顿法的基本思想是构造一个近似的Hessian矩阵或其逆矩阵,使得它满足某种拟牛顿条件。根据更新规则的不同,拟牛顿法可以分为多种,其中最常见的有BFGS方法和DFP方法。原创 2024-03-14 11:22:26 · 517 阅读 · 0 评论 -
用近似方法替代牛顿法的Hessian矩阵
然而,牛顿法需要计算目标函数的二阶导数,即Hessian矩阵,这在实际应用中可能面临计算量大、内存消耗高或者Hessian矩阵非正定等问题。例如,拟牛顿法使用一系列正定矩阵来近似Hessian矩阵的逆,其中最常见的有BFGS和DFP方法。而近似方法可以通过调整近似矩阵的性质,使其保持正定,从而解决这一问题。其中,x_k是第k次迭代的解,H_k是目标函数在x_k处的Hessian矩阵,g_k是目标函数在x_k处的梯度向量。其中,B_k是第k次迭代的近似矩阵,ΔB_k是根据某种规则计算得到的更新量。原创 2024-03-14 11:01:55 · 502 阅读 · 0 评论 -
克服牛顿法对Hessian矩阵求逆的困难
其中,x_k 是第 k 次迭代的解,H_k 是目标函数在 x_k 处的 Hessian 矩阵,g_k 是目标函数在 x_k 处的梯度向量。这个公式表示,通过计算 Hessian 矩阵的逆与梯度向量的乘积,我们可以得到下一步的迭代方向。此外,在深度学习中,牛顿法也可以用于优化神经网络的参数,提高模型的性能。在这些领域中,我们通常需要求解复杂的优化问题,而牛顿法及其改进版本能够提供高效的求解方法。通过这个示例,我们可以看到,使用拟牛顿法可以有效地克服Hessian矩阵求逆的困难,同时保持较快的收敛速度。原创 2024-03-14 10:56:12 · 560 阅读 · 0 评论 -
优化理论:最直观易理解的优化算法
在这个示例中,我们定义了一个一元二次函数 f(x) = x^2 及其梯度 ∇f(x) = 2x。然后,我们使用梯度下降法从初始值 x_start 开始,通过不断迭代更新 x 的值,直到达到预设的迭代次数 epochs。在每次迭代中,我们计算目标函数的梯度,并根据学习率调整 x 的值。在本文中,我们将介绍一种直观易理解的优化算法——梯度下降法,并解释其公式、应用场景以及提供示例代码。梯度下降法是一种迭代优化算法,用于求解目标函数的最小值。假设目标函数为 f(x),其中 x 是待优化的参数向量。原创 2024-03-14 10:45:18 · 472 阅读 · 0 评论 -
Python实现简单的梯度下降算法
梯度下降算法是一种优化算法,它通过迭代的方式来更新参数,以最小化或最大化一个损失函数。本文将解释梯度下降算法的基本公式,探讨其应用场景,并给出一个使用Python实现的简单示例代码。梯度下降算法的核心思想是通过计算损失函数关于模型参数的梯度,并按照梯度的反方向更新参数,以使得损失函数逐渐减小。具体地,假设我们的损失函数为 J(θ),其中 θ 是模型的参数向量。通过不断迭代上述公式,我们可以逐渐逼近损失函数的最小值,从而得到最优的模型参数。最后,我们打印出优化后的参数和损失函数值随迭代次数的变化。原创 2024-03-14 10:49:45 · 339 阅读 · 0 评论 -
Python实现牛顿法
它使用函数f的泰勒级数的前面几项来寻找方程f(x) = 0的根。当函数f(x)是一个二次函数时,牛顿法一次就可以得到方程的根。对于非线性函数,牛顿法可能需要多次迭代才能得到足够精确的近似根。例如,它可以用于求解非线性方程的根,优化问题(如寻找函数的极小值或极大值),以及机器学习中的参数估计等。次迭代内收敛到足够精确的解,或者导数在某一点变为0(这意味着没有解),那么函数就会返回。这个公式的直观理解是:我们在x_n处用f(x)的切线来近似f(x),然后用这个切线与x轴的交点作为新的近似根。原创 2024-03-14 10:54:08 · 737 阅读 · 0 评论 -
Python实现共轭梯度法
在函数内部,我们实现了共轭梯度法的迭代过程,包括计算搜索方向、步长和更新解向量等步骤。共轭梯度法(Conjugate Gradient Method)是一种求解无约束最优化问题的迭代方法,特别适用于对称正定线性系统的求解。它结合了最速下降法和牛顿法的优点,能够在较少的迭代次数内达到较高的精度。由于它能够在不计算Hessian矩阵的情况下充分利用目标函数的二次性质,因此在处理大规模问题时具有较高的效率。共轭梯度法的关键在于构造一组共轭方向,使得在每个方向上进行一次线搜索后,都能使目标函数值有显著的下降。原创 2024-03-14 10:59:10 · 794 阅读 · 0 评论 -
程序员的数学:世界线收束
然而,随着时间的推移,这些世界线可能会逐渐收敛,最终趋向于一个或几个最可能的结果。世界线收束的概念最初来自于物理学,尤其是在量子力学中,用以描述粒子可能遵循的多种路径最终收敛到一个确定的结果。通过多次模拟这个过程,我们可以观察到世界线收束的现象:虽然每个模拟的结果都是随机的,但随着时间的推移,这些结果逐渐收敛到一个平均值附近。通过模拟这些因素的所有可能组合,我们可以观察到世界线收束的现象,从而预测系统的未来状态。在实际情况中,由于各种因素的影响(如噪声、不确定性等),世界线可能会收敛到不同的区域或分布。原创 2024-03-14 10:34:39 · 613 阅读 · 0 评论 -
程序员的数学:自然语言处理背后的内核
在这个示例中,我们首先定义了一个Sequential模型,它包含了一个嵌入层(Embedding)来将整数序列转换为词嵌入向量,一个简单RNN层来处理序列数据,以及一个全连接层(Dense)来进行分类。而Transformer模型则采用了自注意力机制(self-attention mechanism),使得模型能够同时关注序列中的所有位置,从而更好地捕捉词与词之间的依赖关系。然而,随着深度学习的发展,更复杂的模型如循环神经网络(RNN)和Transformer等开始占据主导地位。原创 2024-03-14 10:40:30 · 302 阅读 · 0 评论 -
程序员的数学:泊松分布构成的随机过程
这些分布不仅帮助我们理解数据的本质和特性,还能为我们提供强大的工具来模拟和分析各种随机现象。这种分布的特点是事件的平均发生率是恒定的,而实际发生次数则是随机的。:在物理学中,放射性元素的衰变过程是一个典型的随机过程。每个原子衰变的时间是随机的,但整体上遵循泊松分布。:呼叫中心每天接收的呼叫数量是随机的,但通常有一个稳定的平均话务量。利用泊松分布,我们可以预测未来一段时间内的呼叫数量,从而合理安排客服人员的工作时间和资源。泊松分布可以帮助我们预测库存需求的变化,从而制定更合理的采购和库存策略。原创 2024-03-14 10:31:39 · 396 阅读 · 0 评论 -
程序员的数学:马尔可夫过程,随机变量随着时间开始起变化
马尔可夫过程是一类特殊的随机过程,它满足所谓的“马尔可夫性”。简单来说,如果一个随机过程在给定现在状态的情况下,其未来的状态与过去状态是独立的,那么这个随机过程就称为马尔可夫过程。其中,马尔可夫过程是一个尤为重要的概念,它描述了一类随机变量随着时间变化而变化的随机过程。马尔可夫链是马尔可夫过程的一种特殊情况,它描述的是离散时间、离散状态的随机过程。在马尔可夫链中,每个时间点只能取有限个或可数无穷个可能的状态,并且从一个状态转移到另一个状态的概率只与当前状态有关,而与之前的状态无关。三、马尔可夫过程的应用。原创 2024-03-13 13:57:36 · 438 阅读 · 0 评论 -
程序员的数学:正态分布构成的随机过程
首先,我们需要理解什么是正态分布。比如,我们可以假设某个系统的状态在一段时间内是随机变化的,并且这些状态的变化服从正态分布。那么,我们就可以利用这个随机过程来生成一系列的状态数据,用于分析和预测系统的行为。今天,我们将探讨一种由正态分布构成的随机过程,并了解其在编程中的应用。如果随机过程中的每一个随机变量都服从正态分布,并且这些随机变量之间存在一定的相关性,那么我们就称之为由正态分布构成的随机过程。其中,x 是随机变量,μ 是均值,σ 是标准差,sqrt 是平方根函数,exp 是指数函数,π 是圆周率。原创 2024-03-14 10:27:42 · 358 阅读 · 0 评论 -
程序员的数学:随机过程的记忆碎片
例如,在自然语言处理中,我们可以使用马尔科夫模型来预测文本中下一个词的出现概率,基于当前词和前几个词的状态。马尔科夫过程是一种特殊的随机过程,其未来状态只依赖于当前状态,而与过去状态无关。总结来说,程序员的数学中,随机过程的记忆碎片是一个重要的概念。通过掌握马尔科夫过程、独立同分布过程等基本概念,并编写相应的示例代码进行模拟,我们可以更深入地理解这些概念在实际问题中的应用。通过调整转移概率矩阵、初始状态、模拟步数以及概率分布等参数,我们可以观察不同随机过程的行为特性,并理解它们在实际应用中的意义。原创 2024-03-14 10:38:15 · 365 阅读 · 0 评论