(ICCV-2023)使用 Transformer 的可扩展扩散模型

news2024/9/20 8:34:48

使用 Transformer 的可扩展扩散模型

Paper Title:Scalable Diffusion Models with Transformers

Paper是UC Berkeley发表在ICCV 2023的工作

paper地址

code地址

图1

图 1:具有 transformer 主干的扩散模型实现了最先进的图像质量。我们展示了在 ImageNet 上以 512$\times 512 和 256 512 和 256 512256\times$256 分辨率训练的两个类条件 DiT-XL/2 模型中的选定样本。

Abstract

我们探索了一种基于transformer架构的新类扩散模型。我们训练图像的潜在扩散模型,将常用的 U U U-Net主干替换为在潜在patch上操作的transformer。我们通过Gflops衡量的前向传递复杂性分析了我们的扩散transformer(DiTs)的可扩展性。我们发现,通过增加transformer的深度/宽度或增加输入token的数量来提高Gflops的DiTs,其FID(Fréchet Inception Distance)值始终较低。除了具有良好的可扩展性外,我们最大的DiT-XL/2模型在类条件ImageNet 512 × 512 512 \times 512 512×512 256 × 256 256 \times 256 256×256基准上优于所有之前的扩散模型,在后者上实现了2.27的最先进FID。

1. Introduction

机器学习正在经历由 transformer 推动的复兴。在过去五年中,自然语言处理 [42, 8]、视觉 [10] 和其他几个领域的神经架构已被 transformer [60] 所取代。然而,许多类别的图像级生成模型仍然没有赶上这一趋势——虽然 transformer 在自回归模型中得到了广泛的应用 [43, 3, 6, 47],但在其他生成建模框架中却很少采用。例如,扩散模型一直处于图像生成领域最新进展的前沿 [9, 46];然而,它们都采用卷积 U-Net 架构作为事实上的主干选择。

Ho 等人 [19] 的开创性工作首次为扩散模型引入了 U-Net 主干。U-Net 最初在像素级自回归模型和条件 GAN [23] 中取得成功,之后从 PixelCNN++ [52, 58] 继承而来,并进行了一些更改。该模型是卷积的,主要由 ResNet [15] 块组成。与标准 U-Net [49] 相比,额外的空间自注意力块(Transformer 中必不可少的组件)以较低的分辨率散布。Dhariwal 和 Nichol [9] 放弃了 UNet 的几种架构选择,例如使用自适应归一化层 [40] 为卷积层注入条件信息和通道计数。但是,Ho 等人的 UNet 的高级设计基本保持不变。

通过这项工作,我们旨在揭开扩散模型中架构选择的重要性,并为未来的生成模型研究提供经验基线。我们表明,U-Net 归纳偏差对扩散模型的性能并不重要,它们可以很容易地用标准设计(如transformer)取代。因此,扩散模型可以从最近的架构统一趋势中受益 - 例如,通过继承其他领域的最佳实践和训练方法,以及保留可扩展性、稳健性和效率等有利特性。标准化架构还将为跨领域研究开辟新的可能性。

在本文中,我们重点介绍一类基于 Transformer 的新型扩散模型。我们将其称为扩散 Transformer,简称 DiT。DiT 遵循 Vision Transformer (ViT) [10] 的最佳实践,事实证明,ViT 在视觉识别方面的扩展效果比传统卷积网络(例如 ResNet [15])更有效。

更具体地说,我们研究了 Transformer 相对于网络复杂度与样本质量的扩展行为。我们表明,通过在潜在扩散模型 (LDM) [48] 框架下构建和基准测试 DiT 设计空间(其中扩散模型在 VAE 的潜在空间内训练),我们可以成功地用 Transformer 替换 U-Net 主干。我们进一步表明,DiT 是扩散模型的可扩展架构:网络复杂度(以 Gflops 衡量)与样本质量(以 FID 衡量)之间存在很强的相关性。通过简单地扩大 DiT 的规模并使用高容量主干(118.6 Gflops)训练 LDM,我们就能够在类条件 256$\times$256 ImageNet 生成基准上实现 2.27 FID 的最佳结果。

2. Related Work

Transformer。Transformer [60] 已取代语言、视觉 [10]、强化学习 [5, 25] 和元学习 [39] 等领域的特定领域架构。它们在增加模型大小、训练计算和语言领域数据 [26] 的情况下表现出了出色的扩展特性,可用作通用自回归模型 [17] 和 ViT [63]。除了语言之外,Transformer 还被训练用于自回归预测像素 [38, 7, 6]。它们还在离散码本 [59] 上被训练为自回归模型 [11, 47] 和掩码生成模型 [4, 14];前者在多达 20B 个参数的情况下表现出出色的扩展行为 [62]。最后,人们在 DDPM 中探索了使用 Transformer 来合成非空间数据;例如,在 DALL·E2[46, 41] 中生成 CLIP 图像嵌入。在本文中,我们研究了变压器作为图像扩散模型的骨干时的缩放特性。

去噪扩散概率模型 (DDPM)。
扩散 [54, 19] 和基于分数的生成模型 [22, 56] 作为图像生成模型 [35, 46, 50, 48] 尤其成功,在许多情况下甚至优于之前最先进的生成对抗网络 (GAN) [12]。过去两年来,DDPM 的改进主要得益于改进的采样技术 [19, 55, 27],最显著的是无分类器指导 [21]、重新制定扩散模型以预测噪声而不是像素 [19] 以及使用级联管道,其中低分辨率基础扩散模型与上采样器并行训练 [20, 9]。对于上面列出的所有扩散模型,卷积 U-Nets [49] 是事实上的主干架构选择。并行工作 [24] 为 DDPM 引入了一种基于注意力机制的新颖、高效的架构;我们探索了纯 Transformer。

架构复杂性。在评估图像生成文献中的架构复杂性时,通常使用参数计数。一般来说,参数计数不能很好地代表图像模型的复杂性,因为它们没有考虑图像分辨率等因素,而图像分辨率会显著影响性能 [44, 45]。相反,本文的大部分分析都是通过计算的视角进行的。
这使我们与架构设计文献保持一致,其中广泛使用flops来衡量复杂性。在实践中,黄金指标将取决于特定的应用场景。Nichol 和 Dhariwal 改进扩散模型的开创性工作 [36, 9] 与我们最相关——在那里,他们分析了 U-Net 架构类的可扩展性。在本文中,我们重点关注 Transformer 类。

3. Diffusion Transformers

3.1. Preliminaries


扩散公式。在介绍我们的架构之前,我们简要回顾一些理解扩散模型(DDPMs)[54, 19]所需的基本概念。高斯扩散模型假设一个前向加噪过程,逐渐将噪声应用于真实数据 x 0 : q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) x_0: q\left(x_t \mid x_0\right)=\mathcal{N}\left(x_t ; \sqrt{\bar{\alpha}_t} x_0,\left(1-\bar{\alpha}_t\right) \mathbf{I}\right) x0:q(xtx0)=N(xt;αˉt x0,(1αˉt)I),其中常数 α ˉ t \bar{\alpha}_t αˉt是超参数。通过应用重新参数化技巧,我们可以采样 x t = α ˉ t x 0 + 1 − α ˉ t ϵ t x_t=\sqrt{\bar{\alpha}_t} x_0+\sqrt{1-\bar{\alpha}_t} \epsilon_t xt=αˉt x0+1αˉt ϵt,其中 ϵ t ∼ N ( 0 , I ) \epsilon_t \sim \mathcal{N}(0, \mathbf{I}) ϵtN(0,I)

扩散模型被训练以学习反向过程,反转前向过程中的扰动: p θ ( x t − 1 ∣ x t ) = N ( μ θ ( x t ) , Σ θ ( x t ) ) p_\theta\left(x_{t-1} \mid x_t\right)=\mathcal{N}\left(\mu_\theta\left(x_t\right), \Sigma_\theta\left(x_t\right)\right) pθ(xt1xt)=N(μθ(xt),Σθ(xt)),其中神经网络用于预测 p θ p_\theta pθ的统计信息。反向过程模型通过 x 0 x_0 x0的对数似然的变分下界[30]进行训练,简化为 L ( θ ) = − p ( x 0 ∣ x 1 ) + ∑ t D K L ( q ∗ ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) \mathcal{L}(\theta)=-p\left(x_0 \mid x_1\right)+\sum_t \mathcal{D}_{K L}\left(q^*\left(x_{t-1} \mid x_t, x_0\right) \| p_\theta\left(x_{t-1} \mid x_t\right)\right) L(θ)=p(x0x1)+tDKL(q(xt1xt,x0)pθ(xt1xt)),不包括训练无关的附加项。通过将 μ θ \mu_\theta μθ重参数化为噪声预测网络 ϵ θ \epsilon_\theta ϵθ,可以通过预测噪声 ϵ θ ( x t ) \epsilon_\theta\left(x_t\right) ϵθ(xt)与采样高斯噪声 ϵ t \epsilon_t ϵt之间的简单均方误差来训练模型: L simple  ( θ ) = ∥ ϵ θ ( x t ) − ϵ t ∥ 2 2 \mathcal{L}_{\text {simple }}(\theta)=\left\|\epsilon_\theta\left(x_t\right)-\epsilon_t\right\|_2^2 Lsimple (θ)=ϵθ(xt)ϵt22。但为了训练具有学习的反向过程协方差 Σ θ \Sigma_\theta Σθ的扩散模型,需要优化完整的 D K L \mathcal{D}_{K L} DKL项。我们遵循Nichol和Dhariwal的方法[36]:用 L simple  \mathcal{L}_{\text {simple }} Lsimple 训练 ϵ θ \epsilon_\theta ϵθ,并用完整的 L \mathcal{L} L训练 Σ θ \Sigma_\theta Σθ。一旦 p θ p_\theta pθ训练完成,可以通过初始化 x t max ⁡ ∼ N ( 0 , I ) x_{t_{\max }} \sim \mathcal{N}(0, \mathbf{I}) xtmaxN(0,I)并通过重参数化技巧采样 x t − 1 ∼ p θ ( x t − 1 ∣ x t ) x_{t-1} \sim p_\theta\left(x_{t-1} \mid x_t\right) xt1pθ(xt1xt)来采样新图像。

无分类器指导。条件扩散模型将额外的信息作为输入,例如类别标签 c c c。在这种情况下,反向过程变为 p θ ( x t − 1 ∣ x t , c ) p_\theta\left(x_{t-1} \mid x_t, c\right) pθ(xt1xt,c),其中 ϵ θ \epsilon_\theta ϵθ Σ θ \Sigma_\theta Σθ c c c为条件。在这种情况下,无分类器指导可用于鼓励采样过程找到使 log ⁡ p ( c ∣ x ) \log p(c \mid x) logp(cx)较高的 x x x [21]。根据贝叶斯定理, log ⁡ p ( c ∣ x ) ∝ log ⁡ p ( x ∣ c ) − log ⁡ p ( x ) \log p(c \mid x) \propto \log p(x \mid c)-\log p(x) logp(cx)logp(xc)logp(x),因此 ∇ x log ⁡ p ( c ∣ x ) ∝ ∇ x log ⁡ p ( x ∣ c ) − ∇ x log ⁡ p ( x ) \nabla_x \log p(c \mid x) \propto \nabla_x \log p(x \mid c)-\nabla_x \log p(x) xlogp(cx)xlogp(xc)xlogp(x)。通过将扩散模型的输出解释为得分函数,可以通过以下方式指导DDPM采样过程采样具有高 p ( x ∣ c ) p(x \mid c) p(xc) x x x ϵ ^ θ ( x t , c ) = ϵ θ ( x t , ∅ ) + s ⋅ ( ϵ θ ( x t , c ) − ϵ θ ( x t , ∅ ) ) \hat{\epsilon}_\theta\left(x_t, c\right)=\epsilon_\theta\left(x_t, \emptyset\right)+s \cdot \left(\epsilon_\theta\left(x_t, c\right)-\epsilon_\theta\left(x_t, \emptyset\right)\right) ϵ^θ(xt,c)=ϵθ(xt,)+s(ϵθ(xt,c)ϵθ(xt,)),其中 s > 1 s>1 s>1表示指导的规模(注意 s = 1 s=1 s=1恢复标准采样)。通过在训练期间随机丢弃 c c c并用学习的“空”嵌入 ∅ \emptyset 替换它来实现对 c = ∅ c=\emptyset c=的扩散模型的评估。无分类器指导广为人知,可显著改善样本质量,相较于通用采样技术[21,35,46],这一趋势在我们的DiT模型中也得以保持。

潜在扩散模型。直接在高分辨率像素空间中训练扩散模型可能会在计算上令人望而却步。潜在扩散模型(LDMs)[48]通过两阶段方法解决了这个问题:(1)学习一个自动编码器,将图像压缩成更小的空间表示,使用学习到的编码器 E E E;(2)训练表示 z = E ( x ) z=E(x) z=E(x)的扩散模型,而不是图像 x x x的扩散模型( E E E是冻结的)。然后可以通过从扩散模型中采样表示 z z z,并随后用学习到的解码器将其解码为图像 x = D ( z ) x=D(z) x=D(z)来生成新图像。

如图2所示,LDMs在使用比像素空间扩散模型如ADM少得多的Gflops的情况下,实现了良好的性能。由于我们关注计算效率,这使它们成为架构探索的一个有吸引力的起点。在本文中,我们将DiTs应用于潜在空间,尽管它们也可以无需修改地应用于像素空间。这使我们的图像生成管道成为一种基于混合的方法;我们使用现成的卷积VAE和基于transformer的DDPMs。

图1

图 2:使用 Diffusion Transformers (DiTs) 生成 ImageNet。气泡区域表示扩散模型的flops。左图:我们的 DiT 模型在 400K 次训练迭代中的 FID-50K(越低越好)。随着模型失败次数的增加,FID 的性能稳步提高。右图:我们最好的模型 DiT-XL/2 具有计算效率,并且优于所有之前基于 U-Net 的扩散模型,例如 ADM 和 LDM。

3.2. Diffusion Transformer Design Space


我们引入了扩散变换器 (DiT),这是一种新的扩散模型架构。我们的目标是尽可能忠实于标准变换器架构,以保留其缩放属性。由于我们的重点是训练图像的 DDPM(具体来说,是图像的空间表示),因此 DiT 基于对patch序列进行操作的视觉变换器 (ViT) 架构 [10]。DiT 保留了 ViT 的许多最佳实践。图 3 显示了完整 DiT 架构的概览。在本节中,我们将描述 DiT 的前向传递,以及 DiT 类设计空间的组成部分。

图3

图 3:扩散变换器 (DiT) 架构。左图:我们训练条件潜在 DiT 模型。输入潜在被分解为块并由多个 DiT 块处理。右图:我们的 DiT 块的细节。我们尝试了标准变换器块的变体,这些变体通过自适应层规范、交叉注意和额外的输入标记结合了条件。自适应层规范效果最好。

切块(Patchify)。DiT的输入是一个空间表示 z z z(对于 256 × 256 × 3 256 \times 256 \times 3 256×256×3的图像, z z z的形状为 32 × 32 × 4 32 \times 32 \times 4 32×32×4)。DiT的第一层是“切块”,它通过线性嵌入输入中的每个patch,将空间输入转换为一个 T T T个token的序列,每个token的维度为 d d d。在切块之后,我们对所有输入token应用标准的ViT频率基位置嵌入(正弦-余弦版本)。切块生成的token数量 T T T由patch大小的超参数 p p p决定。如图4所示,将 p p p减半会使 T T T增加四倍,因此至少会使transformer的总Gflops增加四倍。尽管它对Gflops有显著影响,但注意到改变 p p p对下游参数数量没有有意义的影响。我们将 p = 2 , 4 , 8 p=2,4,8 p=2,4,8添加到DiT设计空间。

图4

图4:DiT的输入规格。给定patch大小 p × p p \times p p×p,形状为 I × I × C I \times I \times C I×I×C的空间表示(来自VAE的噪声潜变量)被“切块”成一个长度为 T = ( I / p ) 2 T=(I / p)^2 T=(I/p)2的序列,隐藏维度为 d d d。较小的patch大小 p p p会导致序列长度更长,从而增加Gflops。

DiT 块设计。在 patchify 之后,输入标记由一系列转换器块处理。除了噪声图像输入外,扩散模型有时还会处理其他条件信息,例如噪声时间步长 t、类标签 c、自然语言等。我们探索了四种以不同方式处理条件输入的转换器块变体。这些设计对标准 ViT 块设计进行了细微但重要的修改。所有块的设计如图 3 所示。

  • 上下文条件。我们只需将 t 和 c 的向量嵌入作为两个附加标记附加到输入序列中,将它们与图像标记处理在一起。这类似于 ViT 中的 cls 标记,它允许我们使用标准 ViT 块而无需修改。在最后一个块之后,我们从序列中删除条件标记。这种方法为模型引入了可忽略不计的新 Gflops。

  • 交叉注意力模块。我们将 t 和 c 的嵌入连接成一个长度为 2 的序列,与图像标记序列分开。Transformer 模块经过修改,在多头自注意力模块之后包含一个额外的多头交叉注意力层,类似于 Vaswani 等人 [60] 的原始设计,也类似于 LDM 用于条件化类标签的设计。交叉注意力为模型增加了最多的 Gflops,大约 15% 的开销。

  • 自适应层归一化 (adaLN) 块。继自适应归一化层 [40] 在 GANs [2,28] 和具有 UNet 主干的扩散模型 [9] 中的广泛应用之后,我们探索用自适应层归一化 (adaLN) 替换 transformer 块中的标准层归一化层。我们不是直接学习维度缩放和平移参数 γ \gamma γ β \beta β,而是从 t t t c c c 的嵌入向量之和回归这些参数。在我们探索的三种块设计中,adaLN 增加的 Gflops 最少,因此是最计算高效的。它也是唯一一种限制对所有 token 应用相同函数的条件机制。

  • adaLN-Zero 块。以前关于 ResNets 的研究发现,将每个残差块初始化为恒等函数是有益的。例如,Goyal 等人发现,在监督学习设置中零初始化每个块中最终批归一化缩放因子 γ \gamma γ 加速了大规模训练 [13]。扩散 U-Net 模型使用类似的初始化策略,在任何残差连接之前零初始化每个块中的最终卷积层。我们探索了 adaLN DiT 块的一种修改,它也执行相同的操作。除了回归 γ \gamma γ β \beta β,我们还回归维度缩放参数 α \alpha α,该参数在 DiT 块内的任何残差连接之前立即应用。我们将MLP初始化为对所有 α \alpha α输出零向量;这将整个DiT块初始化为恒等函数。与普通adaLN块一样,adaLNZero为模型增加的Gflops可以忽略不计。

我们在DiT设计空间中包括上下文内、交叉注意力、自适应层归一化和adaLN-Zero块。

模型大小。我们应用一系列 N N N个DiT块,每个块都在隐藏维度大小 d d d上运行。按照ViT的方式,我们使用共同扩展 N N N d d d和注意力头的标准transformer配置[10,63]。具体来说,我们使用四种配置:DiT-S、DiT-B、DiT-L和DiT-XL。它们涵盖了从0.3到118.6 Gflops的广泛模型大小和浮点运算分配范围,使我们能够评估扩展性能。表1给出了配置的详细信息。我们在DiT设计空间中添加B、S、L和XL配置。

Transformer解码器。在最终的DiT块之后,我们需要将图像token序列解码为输出噪声预测和输出对角协方差预测。两个输出的形状都与原始空间输入相等。我们使用标准线性解码器来完成这一操作;我们应用最后的层归一化(如果使用adaLN则为自适应的)并将每个token线性解码为 p × p × 2 C p \times p \times 2C p×p×2C张量,其中 C C C是DiT的空间输入的通道数。最后,我们将解码后的token重新排列为其原始的空间布局,以获得预测的噪声和协方差。

我们探索的完整DiT设计空间包括patch大小、transformer块架构和模型大小。

表1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学51单片机1602液晶时序图实例分析

上篇博文笔者分享了关于液晶1602基本的工作流程,本篇主要是通过逻辑分析仪来看一下程序使能的电平时序,是否符合产品文档给出 的时序逻辑。 先看一下1602的时序图 认识下时序图中各个标识的含义: Tc信号周期(E Cycle Time&#x…

WEB应用(十六)---反序列化

反序列化的概念 在面向对象编程语言中,就是将对象转化为字节流,这一步是序列化,字节流中包括这个对象的数据和信息,便于传输和存储,是可以在网络中传输的。需要时,通过反序列化从字节流中恢复对象。 类似于…

State-Threads初识

1.项目简介 协程(coroutine)不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。 一个程序可以包含多个协程,可以对比与一个进程包含多个线程。 我们知道多个线程相对独立,有自己的上下…

Dopple Labs 选择 Zilliz Cloud 作为安全高效的向量数据库

一直以来,我都十分赞同采用通用的标准来评估机器学习领域的技术。向量数据库领域也是如此。Zilliz 发布的性能测试对我有着很大的帮助。 ——Sam Butler Dopple.AI 机器学习总监 01.Dopple AI简介 Dopple Labs Inc. 是 Dopple.AI 的原厂,通过提供创新…

我是如何选择适合我的电脑的

当前有什么可以供自己选择 将从便携、性能、价格、游戏、视频剪辑、高性能、接口、屏幕、使用感受等方面考虑(超出普通人范围电脑不考虑) 非苹果: 轻薄笔记本:最便捷办公笔记本:游戏笔记本台式电脑台式游戏电脑台式高性能电脑 苹果&#…

ROM修改进阶教程------修改rom 内置app的几种方法与注意事项 以及运行库中arm64 .rmeabi-v7a与armeabi 区别

在定制rom的过程中。内置app是很多rom爱好者必须的技能之一。但对于初学者来说。会遇到内置的app无效果或者出现运行有bug的情况。内置app需要根据安卓版本的不同略有变化 .在高安卓版本中还需要内置apk的运行库。 通过今天的博文了解; 1-----内置APP的几种方式步骤 2-----视…

OpenHarmony南向开发 SA服务SELinux权限配置一站式傻瓜式教程

Selinux权限配置 OpenHarmony中SELinux使用详解 目录 SELinux简介SELinux概念SELinux模式OH中SELinux使用详解新增SA服务如何配置SELinux权限SELinux简介 SELinux是Security Enhanced Linux 的缩写,也就是安全强化的 Linux,旨在增强传统Linux操作系统的安全性,解决传统Li…

关于使用webflux开发思考

1、目前终于看到有系统使用spring的webflux进行系统开发,主要原因是比如gpt、千问的大模型数据返回都支持流式方式返回,比如和用户对话,可以流式的把数据给用户展示,不用一次性把数据展示到页面上。 webflux还有一个能力就是&…

MongoDB笔记1——MongoDB简介

MongoDB 什么是MongoDB 2007年10月,MongoDB由10gen团队所开发,2009年2月首度推出。 基于分布式文件存储的数据库由C语言编写。旨在为WEB应用提供可拓展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库(NoSQL&…

东芝新小黑移动硬盘数据被格式化如何恢复(2024年8月版)

在数字化时代,数据已成为我们生活和工作中不可或缺的一部分。东芝新小黑移动硬盘,以其便携性和大容量,成为许多用户存储重要数据的首选。然而,当这些宝贵的数据因意外格式化而面临丢失的风险时,我们该如何应对&#xf…

Visionpro二次开发学习笔记7-使用CogToolDisplay控件

CogToolDisplay控件可显示与视觉工具记录相关的图像,图形和其他状态信息。它使用CogRecord和ICogTool接口将图像和图形连接到CogDisplay。 图片清单 控件的CogComboBox列出当前记录及其子记录中的图像和图形。您可以单击列表并选择要显示的图像或图形。如果记录层…

基于springboot3实现单点登录(二):认证服务端搭建

前言 上文我们介绍了oauth2.0的相关理论和流程,本文我们继续实现。 Oauth2协议中有个很重要的概念,叫做”端点“, 以下整理了一些常用的端点及其参考访问路径及使用场景的信息,供参考。 这些端点在oauth2.0协议的整个生命周期…

白嫖不是梦,三分钟搞定一台服务器

在知乎上浏览时,我偶然发现了一个引人入胜的话题。这个话题附带了一张Excel表格的截图,表格设计得非常巧妙。它允许用户输入包括日薪、工作时间、通勤时间、休息时间以及学历等在内的多个变量。通过这些输入,表格能够计算出一个反映工作性价比…

JAVA—正则表达式

关于正则表达式的了解学习,以及用于校验格式,信息查找和替换分割内容。 目录 1.概述 2.书写规则 3.应用案例 4.用于信息查找 5.用于搜索替换,分割内容 1.概述 由一些特定的字符组成,代表一个规则 作用: 1.校验数据…

国外高清风景视频素材无水印哪里找?

哪里可以下载国外高清风景视频素材?有哪些高清海外素材网站?作为一名从业多年的视频剪辑师,今天就来给大家揭秘可以下载国外高清风景视频素材的网站,赶紧进来看看吧~ 1. 稻虎网 稻虎网作为国内外知名视频素材网站&a…

【机器学习】 Sigmoid函数:机器学习中的关键激活函数

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Sigmoid函数:机器学习中的关键激活函数1. 引言2. Sigmoid函数定义3.…

C++day04

1】思维导图 2】完成关系运算符重载&#xff0c;实现成员函数和全局函数的版本。 #include <iostream>using namespace std;class Stu { friend bool operator<(const Stu &L,const Stu &R); private:int age;int id; public:Stu(){}Stu(int age,int id):age…

OD工具-18个实操工具共创会

一、什么是共创会1.1 什么是共创共创&#xff0c;共同创造词组的缩写&#xff0c;字面上来看就是团队为了多个个体一起把以前没有的事物给产生出或者造出来&#xff0c;这明显的是一种典型的人类自主行为。 托德老师有一段描述:共创是一种工作状态&#xff0c;让团队中的每个个…

【时时三省】(C语言基础)操作符3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 &取地址操作符 示例: 每个内存单元都有自己的编号 编号就成为内存单元的地址&a就是找出a的地址 后面可以加一个int *pa&#xff1d;&a 是可以用来存放地址 pa是用来存放地址的…

SQL进阶技巧:有序数据合并问题之如何按照指定的规则对数据进行合并?【详解collect_list函数有序性保证】

目录 0 问题描述【小红书面试题】 1 数据准备 2 问题分析 3 小结 0 问题描述【小红书】 有如下需求,需要将左边的表变换成右边的表,注意字段内容的顺序及对应内容的一致性。 第一个字段为name,第二个字段为subject,第三个字段为score,变换后要求subject按照语文、数学…