多模态论文笔记——GLIDE(DALL·E 2模型的核心部件)

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍了OpenAI的DALL·E 2模型中重要的组成部分,用于图像生成的GLIDE模型及其论文。

文章目录

之前,我们在DALL·E系列的文章:DALL·E 2模型及其论文详解 中,提到了DALL·E 2 结合了 CLIP 模型 和 GLIDE 模型,使用了 CLIP 提供的图像特征GLIDE 作为基于扩散模型的文本-图像生成方法 ,通过一个 两阶段生成架构 来生成高质量的图像。在这里,我们详细介绍GLIDE的实现:

在扩散模型经过了一系列发展之后,OpenAI 开始探索基于扩散模型(Diffusion Model)的图像生成和编辑方法,也就是本篇论文(在本篇论文后,才结合了CLIP推出了DALL·E 2)。

在论文中,作者对比了两种不同的 guidance 策略,分别是通过 CLIP 引导和 classifier-free 的引导。验证了 classifier-free 的方式生成的图片更真实,与提示的文本有更好的相关性,后续很多模型,包括SD系列模型都使用了classifier-free guidance。在文中作者还验证了 classifier-free 的引导的 GLIDE 模型在 35 亿参数的情况下优于 120 亿参数的 DALL-E 模型

论文

GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models

背景

GLIDE模型在背景中简要回顾了扩散模型中的几个关键实现点,扩散,无分类器指导和CLIP指导。如下:

扩散模型(Diffusion Models)

阐述DDPM(由Sohl-Dickstein等人引入并由Song和Ermon、Ho等人改进的高斯扩散模型)。

本质上是在原始图片中加入噪声,之后训练模型预测加入的噪声并且去除的过程。详细的加噪和去噪可以参考我在SD系列中的文章:Stable Diffusion的加噪和去噪详解

下面是本论文中的概要介绍:

给定一个来自数据分布的样本 x 0 ∼ q ( x 0 ) x_0 \sim q(x_0) x0∼q(x0),我们通过逐步向样本中添加高斯噪声来产生一个由潜变量 x 1 , . . . , x T x_1, ..., x_T x1,...,xT组成的马尔科夫链:

q ( x t ∣ x t − 1 ) : = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) q(x_t \mid x_{t-1}) := \mathcal{N}(x_t; \sqrt{\alpha_t} x_{t-1}, (1-\alpha_t)\mathcal{I}) q(xt∣xt−1):=N(xt;αt xt−1,(1−αt)I)

参数解释

  • x t x_t xt:扩散过程中的潜变量(在第 t t t步的样本)。这是在步骤 t t t时的样本,逐步加入噪声。
  • x t − 1 x_{t-1} xt−1:上一时刻的潜变量。
  • α t \alpha_t αt:控制噪声添加幅度的系数,它在每个时间步骤中控制噪声的大小,通常 α t \alpha_t αt 是随时间递减的,意味着初期的样本保留更多信息,而到后期则加入更多噪声。
  • N ( x t ; μ , Σ ) \mathcal{N}(x_t; \mu, \Sigma) N(xt;μ,Σ):表示高斯分布,其中 μ \mu μ 和 Σ \Sigma Σ 是均值和协方差。对于每个步骤,这里给出的高斯分布的均值为 α t x t − 1 \sqrt{\alpha_t} x_{t-1} αt xt−1,协方差为 ( 1 − α t ) I (1 - \alpha_t) \mathcal{I} (1−αt)I,即一个逐渐增加的噪声项。

如果每一步加入的噪声幅度 1 − α t 1 - \alpha_t 1−αt足够小,那么后验 q ( x t − 1 ∣ x t ) q(x_{t-1} \mid x_t) q(xt−1∣xt)可以被对角高斯很好地近似。进一步地,如果在整个链中添加的噪声幅度 1 − α 1 , . . . , α T 1 - \alpha_1, ..., \alpha_T 1−α1,...,αT足够大,那么 x T x_T xT可以被 N ( 0 , I ) \mathcal{N}(0, \mathcal{I}) N(0,I)很好地近似。这些性质表明可以学习一个模型 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} \mid x_t) pθ(xt−1∣xt)来逼近真实后验:

p θ ( x t − 1 ∣ x t ) : = N ( μ θ ( x t ) , Σ θ ( x t ) ) p_\theta(x_{t-1} \mid x_t) := \mathcal{N}(\mu_\theta(x_t), \Sigma_\theta(x_t)) pθ(xt−1∣xt):=N(μθ(xt),Σθ(xt))

参数解释

  • p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} \mid x_t) pθ(xt−1∣xt):由模型学习的后验分布,用于根据当前的噪声样本 x t x_t xt 预测上一时刻的潜变量 x t − 1 x_{t-1} xt−1。
  • μ θ ( x t ) \mu_\theta(x_t) μθ(xt):该模型的预测均值,通常是通过神经网络预测的结果,它是恢复原始样本的核心。
  • Σ θ ( x t ) \Sigma_\theta(x_t) Σθ(xt):该模型的预测协方差,通常在训练中被固定为常数,表示噪声的分布。后来的一些工作通过学习 Σ θ \Sigma_\theta Σθ 进一步改进了模型。

其可以被用来产生样本 x 0 ∼ p θ ( x 0 ) x_0 \sim p_\theta(x_0) x0∼pθ(x0),通过从高斯噪声 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, \mathcal{I}) xT∼N(0,I)开始并以一系列步骤 x T − 1 , x T − 2 , . . . , x 0 x_{T-1}, x_{T-2}, ..., x_0 xT−1,xT−2,...,x0逐渐减少噪声。

虽然 log ⁡ p θ ( x 0 ) \log p_\theta(x_0) logpθ(x0)存在一个易处理的变分下界(VLB),但通过优化一个重新加权VLB项的代理目标可以得到更好的结果。为了计算这个代理目标,我们通过对 x 0 x_0 x0施加高斯噪声 ϵ \epsilon ϵ来生成样本 x t ∼ q ( x t ∣ x 0 ) x_t \sim q(x_t \mid x_0) xt∼q(xt∣x0),然后使用标准均方误差损失训练一个模型 ϵ θ \epsilon_\theta ϵθ来预测添加的噪声:

L simple : = E t ∼ [ 1 , T ] , x 0 ∼ q ( x 0 ) , ϵ ∼ N ( 0 , I ) [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] L_{\text{simple}} := \mathbb{E}{t \sim [1, T], x_0 \sim q(x_0), \epsilon \sim \mathcal{N}(0, \mathcal{I})}[\|\epsilon - \epsilon\theta(x_t, t)\|^2] Lsimple:=Et∼[1,T],x0∼q(x0),ϵ∼N(0,I)[∥ϵ−ϵθ(xt,t)∥2]

参数解释

  • t ∼ [ 1 , T ] t \sim [1, T] t∼[1,T]:在训练中,时间步 t t t 是随机选择的,表示在扩散过程中采样的每个时间步。
  • x 0 ∼ q ( x 0 ) x_0 \sim q(x_0) x0∼q(x0):从数据分布 q ( x 0 ) q(x_0) q(x0) 中采样原始样本 x 0 x_0 x0,通常是从真实数据集中采样。
  • ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \mathcal{I}) ϵ∼N(0,I):标准高斯噪声,表示向 x 0 x_0 x0 添加的噪声。
  • ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t):由模型预测的噪声。目标是使模型能够精确地预测出添加到 x t x_t xt 中的噪声 ϵ \epsilon ϵ。

Ho等人展示了如何从 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t)推导出 μ θ ( x t ) \mu_\theta(x_t) μθ(xt),并将 Σ θ \Sigma_\theta Σθ固定为常数。他们还证明了其与之前基于分数匹配的去噪模型的等价性,其中分数函数为 ∇ x t log ⁡ p ( x t ) ∝ ϵ θ ( x t , t ) \nabla_{x_t} \log p(x_t) \propto \epsilon_\theta(x_t, t) ∇xtlogp(xt)∝ϵθ(xt,t)。在后续工作中,Nichol和Dhariwal提出了一种学习 Σ θ \Sigma_\theta Σθ的策略,使得模型能够以更少的扩散步骤产生高质量的样本。我们在训练本文的模型时采用了这种技术。

扩散模型还成功应用到了图像超分辨率。根据扩散的标准公式,高分辨率图像 y 0 y_0 y0在一系列步骤中被逐步地施加噪声。然而, p θ ( y t − 1 ∣ y t , x ) p_\theta(y_{t-1} \mid y_t, x) pθ(yt−1∣yt,x)额外地以下采样输入 x x x为条件,通过沿通道维度拼接 x x x(双三次上采样后)提供给模型。这些模型的结果在FID、IS和人工比较的分数上都优于以前的方法。

引导扩散(Guided Diffusion)

Dhariwal和Nicho在论文:Diffusion Models Beat GANs on Image Synthesis中,发现了类别条件扩散模型的样本往往可以使用分类器引导来改善,其中,均值为 μ θ ( x t ∣ y ) \mu_\theta(x_t \mid y) μθ(xt∣y),方差为 Σ θ ( x t ∣ y ) \Sigma_\theta(x_t \mid y) Σθ(xt∣y)的类别条件扩散模型由分类器预测的目标类别 y y y的对数概率 log ⁡ p ϕ ( y ∣ x t ) \log p_\phi(y \mid x_t) logpϕ(y∣xt)附加地扰动。得到的新的扰动后的均值 μ ^ θ ( x t ∣ y ) \hat{\mu}\theta(x_t \mid y) μ^θ(xt∣y)为:
μ ^ θ ( x t ∣ y ) = μ θ ( x t ∣ y ) + s ⋅ Σ θ ( x t ∣ y ) ∇ x t log ⁡ p ϕ ( y ∣ x t ) \hat{\mu}
\theta(x_t \mid y) = \mu_\theta(x_t \mid y) + s \cdot \Sigma_\theta(x_t \mid y) \nabla_{x_t} \log p_\phi(y \mid x_t) μ^θ(xt∣y)=μθ(xt∣y)+s⋅Σθ(xt∣y)∇xtlogpϕ(y∣xt)

系数 s s s称为引导尺度,Dhariwal和Nichol发现增加 s s s会以牺牲多样性为代价提高样本质量。

该论文主要通过对模型结构的改进引入classifier guidance(分类器)引导方法 ,显著提升了基于扩散模型的图像生成质量。

通过优化Attention机制和引入多分辨率学习,结合额外训练的分类器来引导生成过程,实现了超越传统生成模型(如StyleGAN2)的效果。
这个论文的主要内容是:

  • 验证了无条件图像生成中不同模型结构对效果的影响,进行了大量的消融实验。

  • 引入 (分类器引导) 来提升生成质量。
    模型结构改进:

  • 增加模型深度,降低宽度:保持模型大小不变,但通过增加深度和减少宽度来提升效果。

  • 增加 Attention 头的数量

  • 多尺度 Attention:不仅在 16x16 分辨率使用 Attention,还在 32x32 和 8x8 分辨率上使用。

  • 采用 BigGAN 的 residual block:在上采样和下采样激活时使用,增强生成能力。

  • 调整 residual connection 的缩放因子 :使用 1 / 2 1/\sqrt{2} 1/2 的缩放因子。
    Classifier Guidance:

  • 受到 GAN 的有条件生成启发,将类别信息引入扩散模型中,以提升生成质量。

  • 为避免每次类别变化时都需重新训练扩散模型,采用解耦类别信息的方式:额外训练一个分类模型,通过分类器引导生成过程。

  • 通过分类器引导,可以提升生成质量并避免频繁的模型重训练。

无分类器引导(Classifier-free guidance 、CFG)

Ho和Salimans在论文:CLASSIFIER-FREE DIFFUSION GUIDANCE中提出了classifier-free引导,一种用于引导扩散模型且不需要训练一个单独的分类器 模型的技术。对于classifier-free引导,在训练过程中以固定概率将类别条件扩散模型 ϵ θ ( x t ∣ y ) \epsilon_\theta(x_t \mid y) ϵθ(xt∣y)中的标签 y y y替换为空标签 ∅ \emptyset ∅ 。在采样过程中,模型的输出沿 ϵ θ ( x t ∣ y ) \epsilon_\theta(x_t \mid y) ϵθ(xt∣y)方向进一步推理,并远离 ϵ θ ( x t ∣ ∅ ) \epsilon_\theta(x_t \mid \emptyset) ϵθ(xt∣∅),如下所示:
ϵ ^ θ ( x t ∣ y ) = ϵ θ ( x t ∣ ∅ ) + s ⋅ ( ϵ θ ( x t ∣ y ) − ϵ θ ( x t ∣ ∅ ) ) \hat{\epsilon}\theta(x_t \mid y) = \epsilon\theta(x_t \mid \emptyset) + s \cdot (\epsilon_\theta(x_t \mid y) - \epsilon_\theta(x_t \mid \emptyset)) ϵ^θ(xt∣y)=ϵθ(xt∣∅)+s⋅(ϵθ(xt∣y)−ϵθ(xt∣∅))

其中, s ≥ 1 s \geq 1 s≥1为引导尺度。这种函数形式是受隐式分类器的启发:
p i ( y ∣ x t ) ∝ p ( x t ∣ y ) p ( x t ) p_i(y \mid x_t) \propto \frac{p(x_t \mid y)}{p(x_t)} pi(y∣xt)∝p(xt)p(xt∣y)

其梯度可以用真实分数 ϵ ∗ \epsilon^* ϵ∗来表示:
∇ x t log ⁡ p i ( y ∣ x t ) ∝ ∇ x t log ⁡ p ( x t ∣ y ) − ∇ x t log ⁡ p ( x t ) ∝ ϵ ∗ ( x t ∣ y ) − ϵ ∗ ( x t ) \nabla_{x_t} \log p_i(y \mid x_t) \propto \nabla_{x_t} \log p(x_t \mid y) - \nabla_{x_t} \log p(x_t) \propto \epsilon^*(x_t \mid y) - \epsilon^*(x_t) ∇xtlogpi(y∣xt)∝∇xtlogp(xt∣y)−∇xtlogp(xt)∝ϵ∗(xt∣y)−ϵ∗(xt)

为了使用通用文本提示实现classifier-free引导,我们有时在训练过程中用空序列(我们也称其为 ∅ \emptyset ∅)替换文本描述。然后我们使用修正的预测 ϵ ^ \hat{\epsilon} ϵ^向描述 c c c引导:
ϵ ^ θ ( x t ∣ c ) = ϵ θ ( x t ∣ ∅ ) + s ⋅ ( ϵ θ ( x t ∣ c ) − ϵ θ ( x t ∣ ∅ ) ) \hat{\epsilon}\theta(x_t \mid c) = \epsilon\theta(x_t \mid \emptyset) + s \cdot (\epsilon_\theta(x_t \mid c) - \epsilon_\theta(x_t \mid \emptyset)) ϵ^θ(xt∣c)=ϵθ(xt∣∅)+s⋅(ϵθ(xt∣c)−ϵθ(xt∣∅))

classifier-free引导具有两个吸引人的性质:

  1. 首先,它允许单个模型在引导过程中利用自己的知识,而不是依靠单独的(有时更小的)分类模型的知识。
  2. 其次,当以那些难以用分类器预测的信息为条件时,它简化了引导(例如文本)。

这篇论文中,提出了一种新的方法,即 Classifier-Free Diffusion Guidance (CFDG) ,用来改进基于扩散模型的图像生成任务中的指导方法。该方法在扩散模型中引入条件生成信息(如类别标签、特定属性等),通常使用分类器来引导生成过程,但论文提出了不依赖单独训练分类器的 classifier-free 方法,从而简化了模型设计并避免了额外的分类器训练。
CG和CFG的公式推导和背后的逻辑,可以参考SD系列文章中的:Stable Diffusion 3详解

CLIP 引导(CLIP Guidance)

CLIP Guidance 是一种将 CLIP(Contrastive Language-Image Pre-training)模型应用于扩散模型生成过程的技术,用于将文本描述作为条件信息引导生成图像,从而使生成的图像更符合用户定义的文本描述。

核心思想:

CLIP模型通过对比学习训练,能够在图像和文本之间建立联合表示。CLIP模型包含两个部分:

  1. 图像编码器 ( f ( x ) f(x) f(x)):将图像映射到一个向量空间。
  2. 文本编码器 ( g ( c ) g(c) g(c)):将文本描述映射到相同的向量空间。

在CLIP训练过程中,目标是使图像和对应描述的点积尽可能大,而不匹配的点积尽可能小。

在扩散模型中的应用:

扩散模型生成图像的过程是通过逐步去噪噪声图像来实现的,CLIP提供了图像与描述接近程度的分数 ,而 CLIP Guidance 通过引导扩散模型生成符合文本描述的图像。具体做法是在分类器引导中用CLIP模型代替分类器。扩散模型的反向过程中,使用CLIP模型来计算图像和文本描述之间的相似度,并将这一相似度的梯度引导图像生成过程。

公式:
μ ^ θ ( x t ∣ c ) = μ θ ( x t ∣ c ) + s ⋅ Σ θ ( x t ∣ c ) ∇ x t ( f ( x t ) ⋅ g ( c ) ) \hat{\mu}\theta(x_t \mid c) = \mu\theta(x_t \mid c) + s \cdot \Sigma_\theta(x_t \mid c) \nabla_{x_t} (f(x_t) \cdot g(c)) μ^θ(xt∣c)=μθ(xt∣c)+s⋅Σθ(xt∣c)∇xt(f(xt)⋅g(c))

其中:

  • f ( x t ) f(x_t) f(xt) 和 g ( c ) g(c) g(c) 分别是图像和文本的嵌入。
  • ∇ x t ( f ( x t ) ⋅ g ( c ) ) \nabla_{x_t} (f(x_t) \cdot g(c)) ∇xt(f(xt)⋅g(c)) 是图像和描述点积的梯度,表示引导方向。
  • s s s 是超参数,用来控制引导的强度。

CLIP相关知识可以参考:多模态论文笔记------CLIP、BLIP

模型架构

GLIDE 模型的关键思想是引入了 CLIP GuidanceClassifier-Free Guidance,从而使得模型能够在生成过程中实现更好的控制。扩散模型的总体架构是基于UNET模型。核心部件如下:

核心部件

1.扩散模型(Diffusion Model)

  • GLIDE基于扩散模型的架构。扩散模型通过逐步添加噪声到数据中,并通过反向过程逐步去除噪声来生成数据。在GLIDE中,模型从纯噪声开始,并通过多步去噪恢复到一个合理的图像。
  • 扩散过程 :数据逐渐加入噪声,形成一个马尔科夫链。反向过程则逐步从噪声图像中恢复原始数据。GLIDE使用的是去噪扩散概率模型(DDPM),并在此基础上进行了优化。

2.文本编码器(Text Encoder)

  • GLIDE使用一个文本编码器(类似于CLIP的模型)来处理输入的文本描述。文本编码器将输入的自然语言转化为一个固定大小的嵌入向量,该向量用于条件化扩散模型。
  • CLIP模型:GLIDE引入了CLIP模型,结合图像和文本的联合嵌入空间,使得文本描述能够作为条件信息引导图像生成。具体地,文本通过一个Transformer网络编码,生成的嵌入向量用于与扩散模型的生成过程进行条件化。

3.分类器引导(Classifier-Free Guidance)

  • GLIDE采用了无分类器引导(Classifier-Free Guidance)的方法来使生成的图像更符合文本描述。该方法通过在采样过程中调整梯度,使得图像生成更加贴合文本条件,而不依赖于传统的分类器引导。
  • 在训练过程中,GLIDE通过将文本描述作为条件信息引导扩散过程,使得生成的图像更加与文本一致。

GLIDE 没有独立的图像编码器 来处理生成的图像。图像生成的过程通过扩散模型实现,生成的图像与文本描述通过扩散模型的条件化机制进行一致性对齐。在每次生成过程中,文本的嵌入与图像的生成过程相结合,确保图像的内容符合输入文本。

训练和推理过程
  1. 训练过程

    • GLIDE 的训练过程与传统的扩散模型类似,通过最大化变分下界(VLB)来训练模型。与此不同的是,GLIDE 还通过无分类器引导来引导模型生成符合条件的图像。通过优化噪声预测,GLIDE 学会了如何从随机噪声生成符合文本描述的图像。
  2. 推理过程

    • 在推理时,GLIDE从噪声开始,通过逐步去噪来生成图像。在每一步的去噪过程中,模型使用文本嵌入作为条件,且根据 CLIP 引导或分类器引导调整图像,使得最终的图像符合文本描述。

训练细节

图像编辑

GLIDE 的一大特色是支持图像编辑 。用户可以通过文本描述来修改已经生成的图像。例如,用户可以输入"将这张图像中的猫替换为狗",GLIDE 将利用其扩散模型和 CLIP 引导来编辑图像,保持图像的一致性并实现编辑目标。

以往使用扩散模型的问题:

以往使用扩散模型进行图像修复的工作通常并没有显式地对模型进行针对修复任务的训练。传统方法通常通过从扩散模型中采样,并在每个采样步骤后,用从 q ( x t ∣ x 0 ) q(x_t | x_0) q(xt∣x0) 生成的样本替换图像的已知区域。然而,这种方法有一个缺点:模型无法看到全局上下文,只能依赖噪声版本的图像,可能导致边缘伪影。

为了解决这个问题,本文显式地微调了扩散模型以优化其在修复任务上的表现,类似于Saharia等人的方法。具体做法包括:

  1. 微调模型:通过随机掩码输入图像的部分区域,并在掩码版本和真实图像上训练模型。
  2. 模型结构改进 :增加了4个新的输入通道:
    • 另一个RGB通道,用于提供掩码后的真实图像。
    • 一个掩码通道,用于提供修补掩码。
    • 在微调前,初始化这些新通道的输入权重为零。
  3. 上采样模型:对于上采样模型,始终提供完整的低分辨率图像,并仅提供高分辨率图像中未被掩码的部分。

总结

论文证明了文本条件扩散模型能够生成逼真的合成图像,特别是当与classifier-free引导相结合时。

GLIDE论文中还有其他的一些内容,感兴趣的朋友可以自行查看原论文。

历史文章

机器学习

机器学习笔记合集

深度学习

深度学习笔记合集

多模态论文

深度学习笔记------ViT、ViLT
深度学习笔记------DiT(Diffusion Transformer)
深度学习笔记------CLIP、BLIP
多模态论文笔记------BLIP2
深度学习笔记------VQ-VAE和VQ-VAE-2
多模态论文笔记------dVAE(DALL·E的核心部件)
多模态论文笔记------LLaVA
多模态论文笔记------Coca
多模态论文笔记------CogVLM和CogVLM2
多模态论文笔记------U-ViT

相关推荐
Ven%2 小时前
如何让后台运行llamafactory-cli webui 即使关掉了ssh远程连接 也在运行
运维·人工智能·chrome·python·ssh·aigc
Jeo_dmy2 小时前
(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
人工智能·计算机视觉·人脸识别·猪脸识别
睡觉狂魔er3 小时前
自动驾驶控制与规划——Project 5: Lattice Planner
人工智能·机器学习·自动驾驶
xm一点不soso4 小时前
ROS2+OpenCV综合应用--11. AprilTag标签码跟随
人工智能·opencv·计算机视觉
云卓SKYDROID4 小时前
无人机+Ai应用场景!
人工智能·无人机·科普·高科技·云卓科技
是十一月末4 小时前
机器学习之过采样和下采样调整不均衡样本的逻辑回归模型
人工智能·python·算法·机器学习·逻辑回归
小禾家的5 小时前
.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人
人工智能·c#·.net
生信碱移5 小时前
万字长文:机器学习的数学基础(易读)
大数据·人工智能·深度学习·线性代数·算法·数学建模·数据分析
KeyPan5 小时前
【机器学习:四、多输入变量的回归问题】
人工智能·数码相机·算法·机器学习·计算机视觉·数据挖掘·回归
码力全開5 小时前
C 语言奇幻之旅 - 第14篇:C 语言高级主题
服务器·c语言·开发语言·人工智能·算法