深度学习——3种常见的Transformer位置编码【sin/cos、基于频率的二维位置编码(2D Frequency Embeddings)、RoPE】

🌺历史文章列表🌺

  1. 深度学习——优化算法、激活函数、归一化、正则化
  2. 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
  3. 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
  4. 万字长文解读深度学习——卷积神经网络CNN
  5. 万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN
  6. 万字长文解读深度学习——Transformer
  7. 万字长文解读深度学习——GPT、BERT、T5
  8. 万字长文解读深度学习——ViT、ViLT、DiT
  9. 万字长文解读深度学习——CLIP、BLIP
  10. 万字长文解读深度学习——AE、VAE
  11. 万字长文解读深度学习——GAN
  12. 万字长文解读深度学习——训练、优化、部署细节

文章目录

  • Transformer中常见的编码方式
    • 正弦/余弦位置编码(Sinusoidal Positional Encoding)
    • 基于频率的二维位置编码(2D Frequency Embeddings)
    • 旋转式位置编码(Rotary Position Embeddings, RoPE)
      • RoPE 的数学原理
      • RoPE 的实现步骤
        • 1. 计算旋转角度
        • 2. 构造旋转矩阵
        • 3. 旋转变换
        • 4. 自注意力机制
      • RoPE 的优点
      • 应用场景
      • 总结

Transformer中常见的编码方式

  • 自注意力机制(Self-Attention)本身不具备任何顺序或空间位置信息。
  • 为此,需要显式地将位置信息嵌入输入特征,以确保模型能够感知特征间的空间或时间关系。

正弦/余弦位置编码(Sinusoidal Positional Encoding)

在 Transformer 的原始论文(Vaswani et al., 2017)中提出的,最原始的位置编码。正弦/余弦位置编码也叫1D Frequency Embeddings,通过频率函数将每个位置嵌入到特征空间中。

公式:
P E ( p o s , 2 i ) = sin ⁡ ( p o s 1000 0 2 i d ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) PE(pos,2i)=sin(10000d2ipos)
P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i d ) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right) PE(pos,2i+1)=cos(10000d2ipos)

  • p o s pos pos:表示输入序列的位置。
  • d d d:表示embedding维度。
  • 正弦和余弦的周期性特点可以让模型捕获相对位置信息。

说明:

  • 正弦 sin ⁡ \sin sin 被应用于所有偶数维(索引为 2 i 2i 2i);
  • 余弦 cos ⁡ \cos cos 被应用于所有奇数维(索引为 2 i + 1 2i+1 2i+1)。

这种设计的意义在于:

  1. 区分不同维度的位置信息
    • 对偶数维和奇数维分别使用不同的函数,可以让不同维度的位置信息具有不同的变化模式
    • 例如,偶数维的位置信息可能更注重某种语义,奇数维则可能补充另一种语义。
  2. 模型的平移不变性
    • 在一些任务中,特别是相对位置编码时,正弦和余弦函数的周期性可以帮助模型更容易地捕获相对距离信息。
  3. 消除对称性
    • 如果只用一种函数,比如全是 sin ⁡ \sin sin,可能导致偶数维和奇数维的输出具有对称性,降低信息的区分度

基于频率的二维位置编码(2D Frequency Embeddings)

主要针对Transformer处理二维数据(如图像)的情况。在 ViT(Vision Transformer)的标准实现中,将两个独立的 1D Frequency Embeddings 分别应用于图像的行(height)和列(width)方向,然后通过拼接(concat)或求和(add)来构造最终的 2D Frequency Embeddings

实现方式:两个 1D Frequency Embeddings 构成 2D Embeddings

给定图像的大小为 H × W H \times W H×W,编码维度为 D D D,这种 2D 编码的计算方式如下:

  1. 沿行(Height)方向生成 1D Frequency Embeddings
    对行索引 x ∈ [ 0 , H − 1 ] x \in [0, H-1] x[0,H1],生成对应的正弦和余弦位置编码:
    P E x , 2 i = sin ⁡ ( x 1000 0 2 i D ) , P E x , 2 i + 1 = cos ⁡ ( x 1000 0 2 i D ) PE_{x, 2i} = \sin\left(\frac{x}{10000^{\frac{2i}{D}}}\right), \quad PE_{x, 2i+1} = \cos\left(\frac{x}{10000^{\frac{2i}{D}}}\right) PEx,2i=sin(10000D2ix),PEx,2i+1=cos(10000D2ix)

  2. 沿列(Width)方向生成 1D Frequency Embeddings
    对列索引 y ∈ [ 0 , W − 1 ] y \in [0, W-1] y[0,W1],同样生成正弦和余弦位置编码:
    P E y , 2 i = sin ⁡ ( y 1000 0 2 i D ) , P E y , 2 i + 1 = cos ⁡ ( y 1000 0 2 i D ) PE_{y, 2i} = \sin\left(\frac{y}{10000^{\frac{2i}{D}}}\right), \quad PE_{y, 2i+1} = \cos\left(\frac{y}{10000^{\frac{2i}{D}}}\right) PEy,2i=sin(10000D2iy),PEy,2i+1=cos(10000D2iy)

  3. 最终组合:

    • 拼接:
      P E ( x , y ) = concat ( P E x , P E y ) PE_{(x, y)} = \text{concat}(PE_x, PE_y) PE(x,y)=concat(PEx,PEy)
      最终维度为 (2D)
    • 求和:
      P E ( x , y ) = P E x + P E y PE_{(x, y)} = PE_x + PE_y PE(x,y)=PEx+PEy
      最终维度为 (D)

说明:

  1. 分解二维结构:

    • 图像的二维空间本质上可以分解行和列的两个独立维度。因此,分别对行和列编码是一种有效的做法,既利用了图像的二维特性,又保持了实现的简单性。
  2. 保持 Transformer 的通用性:

    • Transformer 本质是基于序列操作的,而将二维图像划分为行和列的独立序列后,位置编码的计算方式可以复用 NLP 中的正/余弦编码
  3. 减少计算复杂度:

    • 相较于直接生成每个位置 ( x , y ) (x, y) (x,y)的二维正弦编码,这种方法的计算复杂度更低,同时效果相近。

旋转式位置编码(Rotary Position Embeddings, RoPE)

Rotary Position Embeddings (RoPE) 是一种基于旋转变换的位置编码方法,同时支持绝对位置相对位置的建模。

传统位置编码的局限

  1. 绝对位置编码(如正弦/余弦编码)
    • 提供固定的绝对位置信息。
    • 不能自然建模相对位置关系。
  2. 相对位置编码
    • 能够建模相邻元素间的相对距离。
    • 但实现复杂度较高,尤其在长序列任务中开销较大。

RoPE 的创新点
RoPE 提出了旋转式变换的思路,通过将位置信息直接嵌入到输入特征的投影空间,既能高效建模绝对位置,又能自然捕捉相对位置关系。

RoPE 的数学原理

输入特征与位置编码的表示

  1. 假设输入向量为 x ∈ R d \mathbf{x} \in \mathbb{R}^d xRd,其中 d d d 是特征维度。
  2. 每个输入向量的维度分为偶数和奇数两部分,分别进行正弦和余弦编码:
    • PE i = sin ⁡ ( pos 1000 0 2 i / d ) \text{PE}_i = \sin\left(\frac{\text{pos}}{10000^{2i/d}}\right) PEi=sin(100002i/dpos)(偶数维度)。
    • PE i = cos ⁡ ( pos 1000 0 2 i / d ) \text{PE}_i = \cos\left(\frac{\text{pos}}{10000^{2i/d}}\right) PEi=cos(100002i/dpos)(奇数维度)。
    • pos \text{pos} pos 是输入的位置信息。

旋转变换

  • RoPE 的核心思想是对每个特征向量进行旋转操作,具体通过二维旋转矩阵实现:
    x rot = R ( θ ) ⋅ x , \mathbf{x}_{\text{rot}} = \mathbf{R}(\theta) \cdot \mathbf{x}, xrot=R(θ)x,
    其中:
    • R ( θ ) \mathbf{R}(\theta) R(θ) 是旋转矩阵,角度 θ \theta θ 与位置有关。

    • 旋转矩阵作用于偶数维度和奇数维度的输入特征,旋转变化如下:
      [ x even ′ x odd ′ ] = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] ⋅ [ x even x odd ] \begin{bmatrix} x_{\text{even}}' \\ x_{\text{odd}}' \end{bmatrix} = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix} \cdot \begin{bmatrix} x_{\text{even}} \\ x_{\text{odd}} \end{bmatrix} [xevenxodd]=[cos(θ)sin(θ)sin(θ)cos(θ)][xevenxodd]

      符号意义

      1. [ x even x odd ] \begin{bmatrix} x_{\text{even}} \\ x_{\text{odd}} \end{bmatrix} [xevenxodd]:

        • 原始特征向量的偶数维度和奇数维度
        • 输入向量 x \mathbf{x} x 被分解为偶数索引部分 x even x_{\text{even}} xeven 和奇数索引部分 x odd x_{\text{odd}} xodd
          • 偶数维:例如,第 0、2、4… 维。
          • 奇数维:例如,第 1、3、5… 维。
      2. [ x even ′ x odd ′ ] \begin{bmatrix} x_{\text{even}}' \\ x_{\text{odd}}' \end{bmatrix} [xevenxodd]:

        • 旋转后特征向量的偶数维度和奇数维度
        • 这是嵌入位置信息后的特征表示。
      3. [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix} [cos(θ)sin(θ)sin(θ)cos(θ)]:

        • 二维旋转矩阵,用于将特征向量的偶数维度和奇数维度进行旋转变换。
        • 旋转角度 θ \theta θ与位置(如时间步或空间坐标)相关。

相对位置的自然建模

  • 通过旋转变换,两个特征间的相对位置关系可以直接通过旋转角度差 ( Δ θ ) (\Delta \theta) (Δθ) 捕捉:
    Attention ( q , k ) = dot ( q rot , k rot ) . \text{Attention}(\mathbf{q}, \mathbf{k}) = \text{dot}(\mathbf{q}_{\text{rot}}, \mathbf{k}_{\text{rot}}). Attention(q,k)=dot(qrot,krot).
    • q rot \mathbf{q}_{\text{rot}} qrot k rot \mathbf{k}_{\text{rot}} krot 是经过 RoPE 编码的查询(Query)和键(Key)向量。
    • 相对位置差的建模通过旋转后的内积自然实现。

RoPE 的实现步骤

1. 计算旋转角度

根据输入位置 pos \text{pos} pos 和维度 d d d 生成旋转角度。

公式
每个维度的旋转角度通过以下公式计算:
θ i = pos 1000 0 2 i / d , \theta_{i} = \frac{\text{pos}}{10000^{2i/d}}, θi=100002i/dpos,
其中:

  • pos \text{pos} pos:输入特征的位置索引(如序列中的时间步或图像的空间位置)。
  • d d d:特征向量的总维度。
  • i i i:当前特征维度的索引。

过程

  1. 分解频率因子

    • 为不同的维度 (i) 生成对应的频率因子:
      1 1000 0 2 i / d \frac{1}{10000^{2i/d}} 100002i/d1
      其中 d d d 控制总维度范围内的频率分布:
      • 低维度的频率变化较慢(低频),适合建模全局信息
      • 高维度的频率变化较快(高频),适合捕捉局部细节
  2. 结合位置计算角度

    • 对于每个位置 pos \text{pos} pos,乘以频率因子以生成旋转角度:
      θ i = pos ⋅ 1 1000 0 2 i / d \theta_{i} = \text{pos} \cdot \frac{1}{10000^{2i/d}} θi=pos100002i/d1
    • 不同位置的旋转角度反映了其空间或时间位置信息。

结果

  • 每个位置 pos \text{pos} pos 和每个维度 i i i 对应一个独特的旋转角度 θ i \theta_{i} θi
  • 输出是一个长度为 d d d 的旋转角度数组。

2. 构造旋转矩阵

旋转矩阵用于将偶数维和奇数维的特征进行二维旋转嵌入每对偶数维和奇数维被看作一个二维向量。

公式
二维旋转矩阵的形式为:
R ( θ ) = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] \mathbf{R}(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix} R(θ)=[cos(θ)sin(θ)sin(θ)cos(θ)]
过程

  1. 匹配每个维度的角度

    • 根据上一步计算的旋转角度 θ i \theta_i θi,生成每对偶数维和奇数维的旋转矩阵。
  2. 作用对象

    • 偶数维 even ( i ) \text{even}(i) even(i) 和奇数维 odd ( i + 1 ) \text{odd}(i+1) odd(i+1) 被看作一个二维向量:
      x even , x odd \mathbf{x}_{\text{even}}, \mathbf{x}_{\text{odd}} xeven,xodd
  3. 生成旋转变换

    • 使用 cos ⁡ ( θ i ) \cos(\theta_i) cos(θi) sin ⁡ ( θ i ) \sin(\theta_i) sin(θi) 填充旋转矩阵。

3. 旋转变换

将旋转矩阵作用于特征向量的偶数维和奇数维,以嵌入位置信息。

公式
旋转后的特征向量表示为:
[ x even ′ x odd ′ ] = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] ⋅ [ x even x odd ] . \begin{bmatrix} x_{\text{even}}' \\ x_{\text{odd}}' \end{bmatrix} = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix} \cdot \begin{bmatrix} x_{\text{even}} \\ x_{\text{odd}} \end{bmatrix}. [xevenxodd]=[cos(θ)sin(θ)sin(θ)cos(θ)][xevenxodd].

过程

  1. 输入特征

    • 输入特征 x \mathbf{x} x 被分解为偶数维和奇数维两部分:
      x = [ x even , x odd ] \mathbf{x} = [x_{\text{even}}, x_{\text{odd}}] x=[xeven,xodd]
  2. 旋转变换

    • 对于每对偶数维和奇数维:
      x even ′ = x even ⋅ cos ⁡ ( θ ) − x odd ⋅ sin ⁡ ( θ ) , x_{\text{even}}' = x_{\text{even}} \cdot \cos(\theta) - x_{\text{odd}} \cdot \sin(\theta), xeven=xevencos(θ)xoddsin(θ),
      x odd ′ = x even ⋅ sin ⁡ ( θ ) + x odd ⋅ cos ⁡ ( θ ) . x_{\text{odd}}' = x_{\text{even}} \cdot \sin(\theta) + x_{\text{odd}} \cdot \cos(\theta). xodd=xevensin(θ)+xoddcos(θ).
    • 旋转后的特征将位置信息嵌入到每个维度中。
  3. 重组特征

    • 将旋转后的偶数维和奇数维重新合并,得到嵌入了位置信息的特征向量。

4. 自注意力机制

使用旋转后的特征向量参与自注意力计算,在 Attention 的点积操作中显式建模 绝对位置相对位置信息

自注意力公式
自注意力的计算公式为:
Attention ( q , k ) = q ⋅ k \text{Attention}(\mathbf{q}, \mathbf{k}) = \mathbf{q} \cdot \mathbf{k} Attention(q,k)=qk

  • q \mathbf{q} q:查询向量(Query)。
  • k \mathbf{k} k:键向量(Key)。

RoPE 的贡献

  1. 绝对位置信息

    • 旋转变换后的 q \mathbf{q} q k \mathbf{k} k 包含绝对位置信息,使模型能够感知每个特征的位置。
  2. 相对位置信息

    • 点积中隐含了旋转角度差 Δ θ = θ 2 − θ 1 \Delta \theta = \theta_2 - \theta_1 Δθ=θ2θ1
      cos ⁡ ( Δ θ ) + sin ⁡ ( Δ θ ) , \cos(\Delta \theta) + \sin(\Delta \theta), cos(Δθ)+sin(Δθ),
      • Δ θ \Delta \theta Δθ 是两位置间的相对关系,直接体现在注意力值中。

RoPE 的优点

  1. 高效性

    • 不需要复杂的相对位置偏移矩阵或附加参数,直接通过旋转实现。
    • 适合长序列任务,计算复杂度低。
  2. 支持绝对与相对位置

    • 旋转式编码不仅能捕捉绝对位置,还能通过旋转角度差捕捉相对位置关系。
  3. 适配多模态任务

    • RoPE 能同时适用于文本、图像、视频等多模态场景的位置编码需求。
    • 在 FLUX.1 中,用于处理文本的序列关系和图像的空间关系。
  4. 自然的时空特性建模

    • 在视频任务中,可扩展为三维旋转式编码,处理时间维和空间维的关系。

应用场景

  1. 多模态任务

    • 在 FLUX.1 中,用于图像和文本模态的联合处理:
      • 文本位置被编码为序列信息。
      • 图像位置被编码为二维空间关系。
  2. 视频生成

    • 支持视频任务的时空建模,可将时间维引入位置编码。
  3. 长序列任务

    • 如文本生成、长文档理解中,RoPE 能显著提升相对位置的建模能力。

总结

旋转式位置编码(RoPE)是一种高效、灵活的位置编码方案:

  • 核心机制:通过二维旋转矩阵嵌入位置信息,既能建模绝对位置,又能自然捕捉相对位置。
  • 适用场景:从长序列任务到多模态场景,再到视频生成,RoPE 展现出强大的扩展性和适配能力。

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

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

相关文章

No.1 杀戮尖塔Godot复刻|项目概述|场景设置

项目概述 含有47个脚本文件,包括1185行代码,最长的脚本有111行 Battle Node——战斗节点 start_battle()——开始战斗turn management——管理回合win/lose conditions——识别输赢条件 EnemyHandler——敌人处理程序 enemy turn management——管理…

化工专业如何转软工

在当今数字化时代,跨考软件工程已经成为许多理工科学子的一个重要选择。化工专业的同学有着扎实的理工科基础,尤其是数学功底,这对于转向计算机领域是一个天然的优势。让我们详细探讨如何规划这段跨考之路。 编程语言的选择是入门的第一步。…

《Opencv》基础操作<1>

目录 一、Opencv简介 主要特点: 应用领域: 二、基础操作 1、模块导入 2、图片的读取和显示 (1)、读取 (2)、显示 3、 图片的保存 4、获取图像的基本属性 5、图像转灰度图 6、图像的截取 7、图…

论文阅读:A Software Platform for Manipulating theCamera Imaging Pipeline

论文代码开源链接: A Software Platform for Manipulating the Camera Imaging Pipelinehttps://karaimer.github.io/camera-pipeline/摘要:论文提出了一个Pipline软件平台,可以方便地访问相机成像Pipline的每个阶段。该软件允许修改单个模块…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…

音视频-什么是帧,视频为什么要编码

帧就是动画中的一张图片,这相当于电影胶片上的一个镜头,一帧就是一幅静止的画面,连续的帧就形成了我们看到的动画和视频。 但是直接采集后没经过处理的视频,其实是没有办法真正在互联网上进行传输的。以一张1920乘1080的图片为例&…

“蜀道山”高校联合公益赛 Web (部分)

文章目录 奶龙牌WAF海关警察训练平台恶意代码检测器 奶龙牌WAF <?php if ($_SERVER[REQUEST_METHOD] POST && isset($_FILES[upload_file])) {$file $_FILES[upload_file];if ($file[error] UPLOAD_ERR_OK) {$name isset($_GET[name]) ? $_GET[name] : basen…

【JavaEE初阶 — 网络原理】初识网络原理

目录 1. 网络发展史 1.1 独立模式 1.2 网络互连 1.2.1 网络互联的背景 1.2.2 网络互联的定义 1.3 局域网LAN 1.4 广域网WAN 2. 网络通信基础 2.1 IP地址 2.2 端口号 2.3 认识协议 2.4 五元组 2.5 协议分层 2.5.1 分…

Linux的介绍及虚拟机centOS系统的下载与应用

1、什么是Linux Linux 是一种类 Unix 操作系统&#xff0c;它的内核&#xff08;Kernel&#xff09;由 Linus Torvalds 于 1991 年首次发布。作为一个开源、免费的操作系统&#xff0c;Linux 被广泛用于服务器、桌面计算机、嵌入式设备、移动设备等各种场景。 1、操作系统 操…

Leetcode打卡:交替组II

执行结果&#xff1a;通过 题目&#xff1a;3208 交替组II 给你一个整数数组 colors 和一个整数 k &#xff0c;colors表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &#xff1a; colors[i] 0 表示第 i 块瓷砖的颜色是 红色 。colors[i] 1 …

【ONE·基础算法 || 动态规划(二)】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解动态规划类题型&#xff08;子数组、子序列问题&#xff09;。                文章目录 总言5、子数组问题&#xff08;数组中连续的一段&#xff09;5.1、最大子数组和&#xff08;medium&#xff09;5.1.…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

通过抓包,使用frida定位加密位置

首先我们抓取一下我们要测试的app的某一个目标api&#xff0c;通过抓api的包&#xff0c;得到关键字。 例如&#xff1a;关键字&#xff1a;x-sap-ri 我们得到想要的关键字后&#xff0c;通过拦截 类&#xff0c;寻找我们的关键字&#xff0c;及找到发包收包的位置&#xff0c…

MFC图形函数学习12——位图操作函数

位图即后缀为bmp的图形文件&#xff0c;MFC中有专门的函数处理这种格式的图形文件。这些函数只能处理作为MFC资源的bmp图&#xff0c;没有操作文件的功能&#xff0c;受限较多&#xff0c;一般常作为程序窗口界面图片、显示背景图片等用途。有关位图操作的步骤、相关函数等介绍…

钟睒睒的“傲慢与偏见”

文章内容根据网络内容整理形成 最近&#xff0c;钟睒睒关于绿瓶水不适合长期饮用的言论&#xff0c;在网上引起了一番新的热议&#xff0c;让刚平静不久的包装饮用水竞争&#xff0c;再次掀起一阵波澜&#xff0c;同时&#xff0c;其对于企业家直播带货的等系列看法&#xff0c…

比亚迪降价令背后的反思,创新还是压榨?

科技新知 原创作者丨依蔓 编辑丨蕨影 比亚迪要求供应商明年起降价10%&#xff1f; 近日&#xff0c;网传一封有关比亚迪乘用车要求供应商降价的邮件&#xff0c;署名为比亚迪集团执行副总裁、乘用车首席运营官何志奇。 邮件称&#xff0c;2025年市场竞争将更加激烈&#xff0…

自媒体图文视频自动生成软件|03| 页面和结构介绍

代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; 视频图片生成器 一个基于 Python 和 Web 的工具&#xff0c;用于生成带有文字和语音的视频以及图片。支持多种尺寸、…

(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)

文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前&#xff0c;请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…

逻辑处理器核心指纹修改

navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义&#xff1a; third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…

Linux下的火墙管理及优化

从功能角度来讲 防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进 从功能实现角度来讲 火墙是系统内核上的一个模块netfilter(数据包过滤机制) 通过netfiler来管理kernel space中的策略 netfilter简介 Netfilter是Lin…