当前位置: 首页 > news >正文

梯度下降的数学原理:用泰勒公式剖析梯度下降

梯度下降(Gradient Descent)是机器学习中非常核心的优化算法,通过不断调整模型参数,让损失函数(Loss Function)逐渐变小,从而提高模型的性能。损失函数是一个用来衡量预测值与真实值差距的函数,因此最小化损失函数是训练机器学习模型的目标。这篇文章用一个更数学化的视角来剖析梯度下降的原理,特别是通过泰勒公式来解释为什么沿着梯度反方向调整参数能够有效减少损失函数的值。

1. 损失函数与目标

1.1 什么是损失函数?

损失函数 L ( θ ) L(\theta) L(θ) 是模型参数 θ \theta θ 的函数,用于量化模型预测值 y ^ \hat{y} y^ 和真实值 y y y 的差距。以下是两种常见的损失函数:

  • 均方误差(MSE):
    L ( θ ) = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L(\theta) = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 L(θ)=n1i=1n(yiy^i)2 这里, y i y_i yi 是真实值, y ^ i \hat{y}_i y^i 是由模型参数 θ \theta θ 计算得到的预测值。
  • 交叉熵损失(Cross-Entropy Loss):
    L ( θ ) = − 1 n ∑ i = 1 n [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] L(\theta) = -\frac{1}{n} \sum_{i=1}^n \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right] L(θ)=n1i=1n[yilogy^i+(1yi)log(1y^i)]
    这个损失函数常用于分类任务,特别是二分类问题。

1.2 目标

在机器学习的训练过程中,我们希望找到一组最优参数 θ \theta θ,让损失函数 L ( θ ) L(\theta) L(θ) 达到最小值:
min ⁡ θ L ( θ ) \min_\theta L(\theta) θminL(θ)
直观上,这意味着我们希望模型的预测尽可能接近真实值。

2. 用泰勒公式分析损失函数的变化

为了理解梯度下降背后的数学原理,我们需要借助泰勒公式,来研究参数 θ \theta θ 的调整如何影响损失函数 L ( θ ) L(\theta) L(θ) 的值。

2.1 一阶泰勒展开

假设当前模型参数是 θ t \theta_t θt,损失函数在这一点的值为 L ( θ t ) L(\theta_t) L(θt)。如果将参数从 θ t \theta_t θt 调整为 θ t + 1 \theta_{t+1} θt+1,损失函数的值可以用一阶泰勒展开近似:
L ( θ t + 1 ) ≈ L ( θ t ) + ∇ L ( θ t ) T ( θ t + 1 − θ t ) L(\theta_{t+1}) \approx L(\theta_t) + \nabla L(\theta_t)^T (\theta_{t+1} - \theta_t) L(θt+1)L(θt)+L(θt)T(θt+1θt)

  • L ( θ t ) L(\theta_t) L(θt):当前参数点的损失函数值。
  • ∇ L ( θ t ) \nabla L(\theta_t) L(θt):损失函数在 θ t \theta_t θt 处的梯度,表示损失函数在每个参数维度上的变化率。
  • θ t + 1 − θ t \theta_{t+1} - \theta_t θt+1θt:参数调整的变化量。

这个公式告诉我们,损失函数的变化主要由两部分决定:

  1. 当前的损失函数值 L ( θ t ) L(\theta_t) L(θt)
  2. 参数变化方向和大小对损失函数的贡献,即 ∇ L ( θ t ) T ( θ t + 1 − θ t ) \nabla L(\theta_t)^T (\theta_{t+1} - \theta_t) L(θt)T(θt+1θt)

2.2 梯度的含义梯度

∇ L ( θ t ) \nabla L(\theta_t) L(θt) 是一个向量,包含损失函数对每个参数的偏导数:
∇ L ( θ t ) = ( ∂ L ∂ θ 1 , ∂ L ∂ θ 2 , … , ∂ L ∂ θ n ) \nabla L(\theta_t) = \left( \frac{\partial L}{\partial \theta_1}, \frac{\partial L}{\partial \theta_2}, \dots, \frac{\partial L}{\partial \theta_n} \right) L(θt)=(θ1L,θ2L,,θnL)
几何上,梯度指向损失函数 L ( θ ) L(\theta) L(θ) 增加最快的方向。也就是说,如果我们沿着梯度的方向调整参数,损失函数的值会迅速增大。

3. 梯度下降:让损失函数减小

我们关心的是让损失函数逐步减小,因此需要反其道而行之,沿着梯度的反方向调整参数。

3.1 参数更新公式在梯度下降中,参数的更新公式是:

θ t + 1 = θ t − α ∇ L ( θ t ) \theta_{t+1} = \theta_t - \alpha \nabla L(\theta_t) θt+1=θtαL(θt)

  • α \alpha α 是学习率(Learning Rate),控制参数调整的步长。
  • − ∇ L ( θ t ) -\nabla L(\theta_t) L(θt) 是梯度的反方向,表示损失函数下降最快的方向。这个公式的核心思想很简单:在每一步迭代中,我们根据当前的梯度信息,沿着损失函数下降最快的方向移动一小步,从而逐步逼近损失函数的最小值。

3.2 损失函数的变化将参数更新公式代入泰勒展开式,我们可以进一步研究损失函数的变化:

L ( θ t + 1 ) ≈ L ( θ t ) + ∇ L ( θ t ) T ( − α ∇ L ( θ t ) ) L(\theta_{t+1}) \approx L(\theta_t) + \nabla L(\theta_t)^T (-\alpha \nabla L(\theta_t)) L(θt+1)L(θt)+L(θt)T(αL(θt))
化简后得到:
L ( θ t + 1 ) ≈ L ( θ t ) − α ∇ L ( θ t ) 2 L(\theta_{t+1}) \approx L(\theta_t) - \alpha \nabla L(\theta_t)^2 L(θt+1)L(θt)αL(θt)2

  • ∇ L ( θ t ) 2 \nabla L(\theta_t)^2 L(θt)2 是梯度的范数平方,表示梯度的大小。
  • 因为 ∇ L ( θ t ) 2 > 0 \nabla L(\theta_t)^2 > 0 L(θt)2>0 α > 0 \alpha > 0 α>0,可以确定 L ( θ t + 1 ) < L ( θ t ) L(\theta_{t+1}) < L(\theta_t) L(θt+1)<L(θt)
    这说明,每次更新参数后,损失函数的值都会减小。

4. 梯度下降的执行流程

基于上面的分析,梯度下降法的执行流程可以总结为以下几个步骤:

  1. 初始化参数: 随机初始化模型参数 θ \theta θ(或根据经验设置初值)。
  2. 计算梯度: 在当前参数点 θ t \theta_t θt,计算损失函数的梯度 ∇ L ( θ t ) \nabla L(\theta_t) L(θt)
  3. 更新参数: 根据梯度下降公式调整参数: θ t + 1 = θ t − α ∇ L ( θ t ) \theta_{t+1} = \theta_t - \alpha \nabla L(\theta_t) θt+1=θtαL(θt)
  4. 判断收敛条件: 如果梯度的范数 ∇ L ( θ t ) \nabla L(\theta_t) L(θt) 足够小,或者损失函数的变化量小于设定阈值,则停止迭代;否则回到第 2 步。

5. 梯度下降的核心思想

通过这个分析,我们可以直观理解梯度下降法的核心思想:

  1. 梯度的方向性: 梯度 ∇ L ( θ ) \nabla L(\theta) L(θ) 指向损失函数 L ( θ ) L(\theta) L(θ) 增加最快的方向,沿着反方向调整参数可以快速减少损失。
  2. 学习率的重要性: 学习率 α \alpha α 控制了每次调整的步长,步长过大可能导致不稳定,过小则会收敛缓慢。
  3. 迭代收敛: 通过逐步调整参数,梯度下降法让损失函数值逐步减小,最终逼近最优解。
  4. 为什么必须减去梯度的值? 可以理解为是泰勒公式本身的要求,因为展开的第二项就带有一个一阶导数

在最后会详细解释


梯度下降法作为机器学习中最基础的优化算法之一,其数学原理非常直观,但效果却极为强大。通过梯度下降,我们可以高效地找到损失函数的最优解,从而训练出性能优秀的机器学习模型。


补充

从泰勒展开到梯度下降:为什么要让 θ \theta θ 减去 α \alpha α 倍梯度?

在机器学习的优化过程中,我们常常使用梯度下降法(Gradient Descent)来最小化损失函数 L ( θ ) L(\theta) L(θ)。下面通过泰勒展开的思路,解释为什么选择
θ ← θ − α ∇ L ( θ ) \theta\leftarrow \theta - \alpha \nabla L(\theta) θθαL(θ)
能够保证损失函数持续下降。

我们先从泰勒公式出发,通过分析损失函数在当前参数附近的局部线性变化,发现如果让参数在梯度反方向移动,就能够在每一步迭代里最大程度地让损失函数减小。然后,才自然地得到 θ \theta θ的更新规则是「减去 α \alpha α倍的梯度」。


1. 从泰勒公式出发

在参数 θ \theta θ 附近,对损失函数 L ( θ ) L(\theta) L(θ) 做一阶泰勒展开:
L ( θ + Δ θ ) ≈ L ( θ ) + ∇ L ( θ ) T Δ θ . L(\theta + \Delta\theta) \approx L(\theta) + \nabla L(\theta)^T \Delta\theta. L(θ+Δθ)L(θ)+L(θ)TΔθ.

  • ∇ L ( θ ) \nabla L(\theta) L(θ) 是损失函数在 θ \theta θ 处的梯度向量。
  • Δ θ \Delta\theta Δθ 是参数改变的量。我们的目标是让 L ( θ + Δ θ ) < L ( θ ) L(\theta + \Delta\theta) < L(\theta) L(θ+Δθ)<L(θ),因此需要
    ∇ L ( θ ) T Δ θ < 0. \nabla L(\theta)^T \,\Delta\theta < 0. L(θ)TΔθ<0.

2. 梯度反方向:最快下降的方向

  1. 梯度方向: ∇ L ( θ ) \nabla L(\theta) L(θ) 指向 L ( θ ) L(\theta) L(θ) 增长(上升)最快的方向。
  2. 反梯度方向: − ∇ L ( θ ) -\nabla L(\theta) L(θ) 则是 L ( θ ) L(\theta) L(θ) 减少(下降)最快的方向。如果令
    Δ θ = − α ∇ L ( θ ) , \Delta\theta = -\alpha \,\nabla L(\theta), Δθ=αL(θ),
    那么
    ∇ L ( θ ) T Δ θ = ∇ L ( θ ) T ( − α ∇ L ( θ ) ) = − α ∇ L ( θ ) 2 , \nabla L(\theta)^T \,\Delta\theta = \nabla L(\theta)^T \bigl(-\alpha \nabla L(\theta)\bigr)= -\,\alpha\,\nabla L(\theta)^2, L(θ)TΔθ=L(θ)T(αL(θ))=αL(θ)2,
    由于 ∇ L ( θ ) 2 > 0 \nabla L(\theta)^2 > 0 L(θ)2>0 α > 0 \alpha > 0 α>0,所以该结果为负值,即
    L ( θ + Δ θ ) ≈ L ( θ ) − α ∇ L ( θ ) 2 < L ( θ ) . L(\theta + \Delta\theta) \approx L(\theta) - \alpha \,\nabla L(\theta)^2 < L(\theta). L(θ+Δθ)L(θ)αL(θ)2<L(θ).
    这表示我们在当前点处让损失函数确实向下移动了一步。

3. 推导更新公式

为了让损失函数一步步地下降,我们可以把上述“在反梯度方向移动”写成一个迭代式子:
Δ θ = − α ∇ L ( θ ) , \Delta\theta = -\alpha \,\nabla L(\theta), Δθ=αL(θ),
Δ θ = θ t + 1 − θ t \Delta\theta = \theta_{t+1} - \theta_t Δθ=θt+1θt
从而有:
θ t + 1 = θ t − α ∇ L ( θ t ) . \theta_{t+1} = \theta_t - \alpha \,\nabla L(\theta_t). θt+1=θtαL(θt).

  • θ t \theta_t θt 表示在第 t t t 步的参数值;
  • α \alpha α 是学习率(Learning Rate),用于控制移动的步长。在每一步迭代中,我们根据当前参数 θ t \theta_t θt 的梯度 ∇ L ( θ t ) \nabla L(\theta_t) L(θt),沿着反梯度方向走一小步,使 L ( θ ) L(\theta) L(θ) 得到下降。

4. 结论

  1. 先有泰勒展开的分析:
    通过局部线性化,明确看到 − ∇ L ( θ ) -\nabla L(\theta) L(θ) 能带来最大的负变化,让损失快速下降。
  2. 再有梯度下降的更新公式:
    使用 θ ← θ − α ∇ L ( θ ) \theta \leftarrow \theta - \alpha \nabla L(\theta) θθαL(θ),逐步向使损失函数减小的方向移动,直到达到最优或近似最优解。因此,正是因为在泰勒公式的分析中我们发现“减去 α \alpha α 倍的梯度”能够让损失在每一步减少最多,才推导出参数更新规则中要让 θ \theta θ 减去 α \alpha α 倍的梯度。

相关文章:

梯度下降的数学原理:用泰勒公式剖析梯度下降

梯度下降&#xff08;Gradient Descent&#xff09;是机器学习中非常核心的优化算法&#xff0c;通过不断调整模型参数&#xff0c;让损失函数&#xff08;Loss Function&#xff09;逐渐变小&#xff0c;从而提高模型的性能。损失函数是一个用来衡量预测值与真实值差距的函数&…...

城市应急指挥系统

城市应急指挥系统的重要性 随着现代化城市的高速发展&#xff0c;我们面临着多种应急突发情景&#xff0c;如自然灾害、事故灾难、公共卫生事件以及社会安全事件等。这些事件对城市的安全稳定构成严重威胁&#xff0c;因此&#xff0c;建立一套高效、全面的城市应急指挥系统显…...

pycharm 快捷键

PyCharm 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的快捷键来提高开发效率。以下是一些常用的 PyCharm 快捷键&#xff08;基于 Windows/Linux 系统&#xff0c;Mac 系统可能略有不同&#xff09;&#xff1a; 通用快捷键 功能快捷键&a…...

游戏网站大全

http://piano.ssjjss.com/ 钢琴模拟器 https://gangqin.bmcx.com/?tdsourcetags_pcqq_aiomsg#/ 在线钢琴 https://www.gushiwen.cn/ 古诗文; https://www.bilibili.com/video/BV1UEWpeaEQK/ https://bouncyballs.org/ 掉落的球球 https://fakeupdate.net/ 假装升级界面 ht…...

线性代数期末总复习的点点滴滴(1)

一、可逆矩阵、行列式、秩的关系 1.行列式与可逆矩阵的关系 所以&#xff0c;不难看出矩阵可逆的充分必要条件是该矩阵的行列式不为0。 2.接着来看&#xff0c;满秩和矩阵行列式的关系 不难看出满秩和行列式不为0是等价的。 3.再来看&#xff0c;满秩和矩阵可逆的关系 说明了…...

感受野如何计算?

感受野&#xff08;Receptive Field, RF&#xff09;是卷积神经网络&#xff08;CNN&#xff09;中的一个重要概念&#xff0c;它指的是网络中某个特定神经元能够接收到的输入图像上的区域大小。换句话说&#xff0c;感受野定义了输出特征图中的每个单元依赖于输入图像中哪些像…...

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户&#xff0c;使用websocket。web服务器选用nginx&#xff0c;但是域名是以前通过阿里云申请的&#xff0c;解析ip也是阿里云的服务器&#xff0c;甲方不希望更换域名。新的系统需要部署在内网服务器&#xff0c;简单拓扑图如…...

解决 Ubuntu 20.04 和 ROS Noetic 中的 No Module Named ‘rospkg‘ 错误

解决 Ubuntu 20.04 和 ROS Noetic 中的 “No Module Named ‘rospkg’” 错误 在 Ubuntu 20.04 系统上运行 ROS Noetic 时&#xff0c;遇到了一个常见错误&#xff1a;“缺少 rospkg 模块”。这种问题主要是由于 Python 环境配置不当所导致。以下是对该问题的详细分析&#xf…...

day14-16系统服务管理和ntp和防火墙

一、自有服务概述 服务是一些特定的进程&#xff0c;自有服务就是系统开机后就自动运行的一些进程&#xff0c;一旦客户发出请求&#xff0c;这些进程就自动为他们提供服务&#xff0c;windows系统中&#xff0c;把这些自动运行的进程&#xff0c;称为"服务" window…...

java 根据路径下载文件转换为MultipartFile,并且上传到服务器

直接上代码 controller层 GetMapping("/downloadAndUploadAttachment")UpdateOperationLogging(msg "根据路径下载文件转换为MultipartFile,并且上传到服务器")Operation(summary "根据路径下载文件转换为MultipartFile,并且上传到服务器", de…...

递归实现指数型枚举(递归)

92. 递归实现指数型枚举 - AcWing题库 每个数有选和不选两种情况 我们把每个数看成每层&#xff0c;可以画出一个递归搜索树 叶子节点就是我们的答案 很容易写出每dfs函数 dfs传入一个u表示层数 当层数大于我们n时&#xff0c;去判断每个数字的选择情况&#xff0c;输出被选…...

WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)

一:基本介绍 WebMvcConfigurer是接口&#xff0c;用于配置全局的SpringMVC的相关属性&#xff0c;采用JAVABean的方式来代替传统的XML配置文件&#xff0c;提供了跨域设置、静态资源处理器、类型转化器、自定义拦截器、页面跳转等能力。 WebMvcConfigurationSupport是webmvc的…...

HIPT论文阅读

题目《Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning》 论文地址&#xff1a;[2206.02647] Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning 项目地址&#xff1a;mahmoodlab/HI…...

完全二叉树的权值(蓝桥杯2019年试题G)

给定一棵包含N个节点的完全二叉树&#xff0c;树上的每个节点都有一个权值&#xff0c;按从上到小、从左到右的顺序依次是A1、A2……An,&#xff08;1&#xff0c;2&#xff0c;n为下标。&#xff09;如下图所示。 现在&#xff0c;小明要把相同深度的节点的权值加到一起&#…...

用adb命令给APP做压力测试,有什么不同?

压力测试 app做压力测试目的是模拟用户在使用软件时随意向软件发出指令&#xff0c;例如操作app的点击&#xff0c;滑动&#xff0c;返回等一系列随机事件&#xff0c;来检测app的承受能力 第一步&#xff1a;手机安装包需要待测的app 第二步&#xff1a;输入adb start-ser…...

Spring 6 实现 Bean 异步初始化,减少项目启动时间

在 Spring 6 中&#xff0c;异步初始化 Bean 为优化应用启动性能提供了有力手段。通过让特定的 Bean 在后台进行初始化&#xff0c;避免其阻塞应用的启动流程&#xff0c;从而显著缩短应用从启动到对外提供服务的时间。 一、基础环境搭建 首先&#xff0c;确保项目的依赖中引入…...

【案例80】麒麟操作系统无法使用Uclient访问NC65

问题现象 麒麟操作系统&#xff0c;安装Uclient&#xff0c;添加应用后无法看到登录界面&#xff0c;一直在转圈。 问题分析 进入到Uclient的工作目录 发现在工作目录下&#xff0c;无相关app.log生成。 查看Uclient的main.log发现&#xff0c;有大量的报错与Uclient下的sha…...

一个签名笔迹量化分析专家辅助系统

写在正文前 关于签名的鉴定有国家制定的标准&#xff0c;一个小册子&#xff0c;好像是 80多页 &#xff0c;俺看的还是 2000年版的&#xff0c;现在应该有很多新版本了。这方面有很多教材和书籍。而且国家也有专门的评审。 正文开始 这是翻老硬盘时发现的&#xff0c;09年左…...

富途证券C++面试题及参考答案

C++ 中堆和栈的区别 在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。 从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的…...

鸿蒙app封装 axios post请求失败问题

这个问题是我的一个疏忽大意&#xff0c;在这里记录一下。如果有相同问题的朋友&#xff0c;可以借鉴。 当我 ohpm install ohos/axios 后&#xff0c;进行简单post请求验证&#xff0c;可以请求成功。 然后&#xff0c;我对axios 进行了封装。对axios 添加请求拦截器/添加响…...

详解 Qt WebEngine 模块

Qt WebEngine 模块是 Qt 提供的一个功能强大的模块&#xff0c;用于在 Qt 应用中嵌入和显示现代网页内容。该模块基于 Chromium 引擎&#xff0c;支持丰富的 Web 技术&#xff08;如 HTML5、CSS3、JavaScript 等&#xff09;&#xff0c;适合需要嵌入网页浏览、Web 应用、JavaS…...

常用的缓存技术都有哪些

在计算机科学和软件开发领域&#xff0c;缓存技术是提高系统性能和响应速度 1. 本地缓存&#xff08;Local Cache&#xff09;&#xff1a; • 存在于应用程序本地内存中的缓存&#xff0c;用于存储频繁访问的数据&#xff0c;以减少对外部存储&#xff08;如数据库&#xff09…...

MySQL通过日志恢复数据的步骤

试验环境&#xff1a;Windows Server2012 r2、MySql-8.0.27-winx64。 1、先检查MySQL有没有开启binlog日志 通过下面的SQL命令查看MySQL是否开启日志以及日志文件的位置&#xff1a; show variables like %log_bin% 执行结果如下图所示&#xff1a; 图中&#xff0c;log_bi…...

SQL Server 表值函数使用示例

在 SQL Server 中,表值函数(Table-Valued Functions, TVFs)是一种用户定义函数,它可以返回一个表。表值函数有两种类型:内联表值函数(Inline Table-Valued Function)和多语句表值函数(Multi-Statement Table-Valued Function)。下面分别介绍这两种类型的表值函数及其使…...

计算机网络之多路转接epoll

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之多路转接epoll 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…...

BPMN与一般的流程图区别在那里?

1. 语义和标准性 BPMN&#xff08;业务流程建模符号&#xff09; 基于标准语义&#xff1a;BPMN是一种标准化的业务流程建模语言&#xff0c;拥有一套严谨的语义规范。它由国际对象管理组织&#xff08;OMG&#xff09;维护&#xff0c;定义了事件、活动、网关和流向等元素的确…...

内容与资讯API优质清单

作为开发者&#xff0c;拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源&#xff0c;为你的开发工作提供了强大的支持&#xff01;无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个合集都能满足你的需求。你可以通过这些免费API获…...

uniapp获取内容高度

获取内容高度 getNewsHieght(index) {uni.createSelectorQuery().select(.content_${index}).boundingClientRect(rect > {console.log(打印该盒子的元素, rect.height);swiperHeight.value rect.height// console.log(打印swiperHeight的数值,this.swiperHeight);}).exec…...

Unity局部和世界坐标系相互转换的实现原理

注&#xff1a;本篇是基于唐老师的学习视频做的一些理论实践&#xff0c;需要提前知道一些线性代数的基础知识&#xff0c;原视频链接&#xff1a; 8.数学基础知识学习说明_哔哩哔哩_bilibili 前期准备&#xff1a; 知识点①&#xff1a; Unity中需要遵守的设定&#xff1a;…...

数据结构(Java版)第六期:LinkedList与链表(一)

目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…...

浅谈文生图Stable Diffusion(SD)相关模型基础

1.U-Net模型基础 1.基础概念 UNet模型是一种基于卷积神经网络的图像分割算法&#xff0c;它采用了U型的网络结构&#xff0c;由编码器&#xff08;下采样路径&#xff09;和解码器&#xff08;上采样路径&#xff09;两部分组成。 编码器负责提取输入图像的特征&#xff0c;…...

7-10 函数和排序练习一

输入n个数(n<10)&#xff0c;对其中的素数进行排序&#xff08;剔除非素数&#xff09;&#xff0c;输出排序后的数列结果。 建议&#xff1a;编写若干函数&#xff0c;用以判断素数&#xff0c;以及对数组进行排序。 输入格式: 第一行是一个正整数t,表示测试的总数。 然后…...

【FFmpeg 教程 一】截图

本章使用 ffmpeg 实现观影中经常会用到的功能&#xff0c;截图。 以下给出两种方式。 课程需具备的基础能力&#xff1a;Python 1. 使用 subprocess 调用 FFmpeg 命令 import subprocess def extract_frame(video_path, output_image_path, timestamp"00:00:05")&qu…...

Python选择题训练工具:高效学习、答题回顾与音频朗读一站式体验

一、引言 随着人工智能技术的不断进步&#xff0c;传统的教学方式已经逐渐向智能化、互动化转变。在众多英语测试题型中&#xff0c;选择题作为一种高效的方式被广泛应用于各类培训与考试中。为了帮助学生高效学习与自测&#xff0c;本篇文章将采用Python编写一款基于 Python …...

【Python】使用Selenium 操作浏览器 自动化测试 记录

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等-CSDN博客文章浏览阅读389次。【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691?spm1001.2014.3001.5501【学习记录】浏览器指纹相关学习记录&am…...

汽车IVI中控开发入门及进阶(42):OpenVG

概览: OpenVG是一个无版权、跨平台的API,它为高级用户界面和矢量图形库(如SVG)提供了一个低级硬件加速接口。OpenVG主要针对需要便携式加速高质量矢量图形以获得引人注目的用户界面和文本的消费电子产品、手持设备、可穿戴设备和汽车设备,同时使硬件加速能够在非常低的功…...

两点间最短距离 - Dijkstra

一、汇总 算法场景说明参考BFS 树 无权图的搜索 标准BFS默认搜索一条最短路径 改造后可以输出所有最短路径 https://blog.csdn.net/m0_37145844/article/details/144534202DFS走迷宫主要利用回溯算法思想&#xff0c;不保证最短路径https://blog.csdn.net/m0_37145844/articl…...

0002__GPU

国内GPU公司主要包括以下几家‌&#xff1a; ‌摩尔线程‌&#xff1a;摩尔线程被誉为“中国版英伟达”&#xff0c;成立于2019年&#xff0c;由前英伟达全球副总裁张建中创立。该公司已获得425项授权专利&#xff0c;计划上市&#xff0c;目标估值高达1500亿元。摩尔线程的技术…...

StarRocks 排查单副本表

文章目录 StarRocks 排查单副本表方式1 查询元数据&#xff0c;检查分区级的副本数方式2 SHOW PARTITIONS命令查看 ReplicationNum修改副本数命令 StarRocks 排查单副本表 方式1 查询元数据&#xff0c;检查分区级的副本数 # 方式一 查询元数据&#xff0c;检查分区级的副本数…...

基于字节大模型的论文翻译(含免费源码)

基于字节大模型的论文翻译 源代码&#xff1a; &#x1f44f; star ✨ https://github.com/boots-coder/LLM-application 展示 项目简介 本项目是一个基于大语言模型&#xff08;Large Language Model, LLM&#xff09;的论文阅读与翻译辅助工具。它通过用户界面&#xff08…...

【原生js案例】ajax的简易封装实现后端数据交互

ajax是前端与后端数据库进行交互的最基础的工具&#xff0c;第三方的工具库比如jquery,axios都有对ajax进行第二次的封装&#xff0c;fecth是浏览器原生自带的功能&#xff0c;但是它与ajax还是有区别的&#xff0c;总结如下&#xff1a; ajax与fetch对比 实现效果 代码实现 …...

uniapp Native.js 调用安卓arr原生service

有问题&#xff0c;文中的内容不正确 最近搞了个uni小项目&#xff0c;一个定制的小平板&#xff0c;带一个nfc设备&#xff0c;厂家只给了一套安卓原生demo&#xff0c;头一次玩原生安卓&#xff0c;废了好半天劲打出来arr包&#xff0c;想镶进uniapp里&#xff0c;网上查了好…...

关于画火山图(by ggplot2)的一些总结和经验

愿武艺晴小朋友一定得每天都开心! 文献中常用经典的火山图,是展示差异表达基因的利器。每次测完转录组,做实验组和对照组的比较后,都会用到。 我自己也画了不算太多也不算太少的次数。然后最近画的时候忽然间意识到这个可视化方法我经常用,却没系统的整理过,一些tips散…...

组装一台电脑需要哪些硬件设备?点击了解

组装一台电脑是一个既有趣又实用的过程&#xff0c;我们可以根据自己的需求和预算来定制一台完全符合个人使用习惯的计算机。 一、核心部件 1、中央处理器&#xff08;CPU&#xff09; CPU是计算机的“大脑”&#xff0c;负责执行各种计算任务。它的性能直接影响到计算机的运…...

Mac M1使用pip3安装报错

1. Mac系统使用pip3安装组件的时候报”外部管理环境”错误&#xff1a; error: externally-managed-environment 2.解决办法 去掉这个提示 1、先查看当前python版本&#xff1a; python3 --version 2、查找EXTERNALLY-MANAGED 文件的位置&#xff08;根据自己当前使用的pytho…...

在Linux系统安装配置 MySQL 和 hive,hive配置为远程模式

前提&#xff1a;已安装配置好了Hadoop环境&#xff0c;因为hive的底层是Hadoop 1 Mysql安装 搜索Centos7自带的mariadb rpm -qa|grep mariadb 卸载mariadb rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps 再搜索一次看看是否还存在 rpm -qa|grep mariadb 安装mysql 创…...

亚信安全与方天股份达成战略合作,双向奔赴助力数字化转型

近日&#xff0c;亚信安全科技股份有限公司&#xff08;以下简称“亚信安全”&#xff09;正式与青岛方天科技股份有限公司&#xff08;以下简称“方天股份”&#xff09;签订合作框架协议。双方强强携手&#xff0c;在网络安全运营平台共建、信息化项目安全支撑、政企市场拓展…...

ubuntu镜像开荒ssh

直接unminimized deprecated me ubuntu 安装 ssh&#xff0c;用 service 启动 4o 在 Ubuntu 上安装并启动 SSH 服务&#xff0c;你可以按照以下步骤进行操作&#xff1a; 更新软件包列表&#xff1a; 首先&#xff0c;确保你的软件包列表是最新的。打开终端并运行以下命令&…...

前端yarn工具打包时网络连接问题排查与解决

最近线上前端打包时提示 “There appears to be trouble with your network connection”&#xff0c;以此文档记录下排查过程。 前端打包方式 docker启动临时容器打包&#xff0c;命令如下 docker run --rm -w /app -v pwd:/app alpine-node-common:v16.20-pro sh -c "…...

CCF-GESP 等级考试 C++ 真题解析目录

GESP C 一级 序号日期真题解析链接12023.03CCF-GESP 等级考试 2023年3月认证C一级真题解析22023.06CCF-GESP 等级考试 2023年6月认证C一级真题解析32023.09[CCF-GESP 等级考试 2023年9月认证C一级真题解析]42023.12[CCF-GESP 等级考试 2023年12月认证C一级真题解析]52024.03[C…...