(2024|ICLR,∞-Diff,无限维平滑扩散,希尔伯特空间,超分辨率,多尺度架构)具有子采样平滑状态的无限分辨率扩散

news2024/9/27 16:44:24

∞-Diff: Infinite Resolution Diffusion with Subsampled Mollified States

目录

0. 摘要

1. 简介

2. 生成式神经场

3. 无限维扩散模型

3.1 平滑化(Mollificaition)

3.2 无限维度平滑扩散

4. 参数化扩散过程

4.1 神经算子

4.2 多尺度架构

4.3 高效稀疏算子

5. 实验

6. 讨论

7. 结论


0. 摘要

这篇论文介绍了 ∞-Diff,这是一种定义在无限维希尔伯特(Hilbert)空间中的生成扩散模型,能够对无限分辨率的数据进行建模通过在随机采样的坐标子集上进行训练,并仅在这些位置对内容进行去噪,我们学习了一个用于任意分辨率采样的连续函数。与之前基于神经场的无限维度模型使用需要潜在压缩(latent compression)的逐点函数不同,我们的方法采用了非局部积分算子(non-local integral operator)在希尔伯特空间之间进行映射,从而实现空间上下文的聚合。这是通过一种高效的多尺度函数空间架构实现的,该架构直接作用于原始稀疏坐标,并配合平滑扩散(mollified diffusion)过程以消除不规则性。通过在高分辨率数据集上的实验,我们发现即使在 8 倍下采样率下,我们的模型仍能保持高质量的扩散效果。这带来了显著的运行时间和内存节省,生成的样本具有更低的 FID 分数,并且在超越训练分辨率的同时保留细节。

1. 简介

深度神经网络通常假设数据可以用固定的均匀网格表示,但底层信号往往是连续的。因此,这些方法在分辨率增加时扩展性较差。神经场(Neural fields)(Xie等人, 2022; Sitzmann等人, 2020; Mildenhall等人, 2021)解决了这个问题,通过直接将数据表示为从坐标到强度(如像素值)的映射,使得参数化和内存/运行时间独立于分辨率,从而可以在通常无法适应内存的数据上进行训练。基于神经场的生成模型(Dupont等人, 2022a;b; Bond-Taylor和Willcocks, 2021; Du等人, 2021)被开发出来以利用这些特性。这些方法在坐标之间本质上是独立的,因此通过压缩的潜在向量来为网络提供全局信息。然而,这些方法生成的样本质量显著低于有限维度的生成模型

2. 生成式神经场

神经场(Xie等人, 2022; Mildenhall等人, 2021; Sitzmann等人, 2020)是一种用于连续数据表示的方法,它将坐标 c 映射到值 v(如 RGB 强度),即 f_θ(c) = v。这使得表示数据所需的内存与其分辨率解耦

【刚开始的直觉:分辨率越大,像素点越多,坐标应该也越多。所以内存与分辨率解耦是反直觉的。

实际上,在使用神经场时,通常将坐标归一化到 [-1,1],然后通过一个定义在该区域的连续函数表示值 v:f_θ(c) = v。

映射函数 fθ 通常是一个 MLP 网络,通过最小化在每个坐标上对应于真实值的重建损失来进行优化。fθ 的局部性质允许通过在坐标子集上评估 fθ 来蒙特卡洛(Monte-Carlo)的近似损失,从而可以在比内存能容纳的更高分辨率数据上进行训练。由于 fθ 在每个坐标上是独立的,无法像卷积 / transformer 那样在多个点上进行转换,为了表示函数空间的方法通常还会以描述单个数据点的压缩潜在向量 z 为条件,即 fθ(c, z)。

  • Dupont 等人(2022a)首先使用元学习(meta-learning)将数据集压缩到潜在条件神经场(latent conditional neural fields)中,然后使用 DDPM(Ho等人, 2020)或标准化流(Normalizing Flow)(Rezende和Mohamed, 2015)来近似潜在空间的分布。
  • Bond-Taylor 和 Willcocks(2021)通过单步梯度步骤构建了一个类似 VAE 的模型来获取潜在变量。
  • Zhuang等人(2023)设计了一个扩散模型,使用少量坐标子集来提供上下文。
  • 最后,一些方法使用超网络来输出神经场的权重:Dupont 等人(2022b)将超网络定义为对抗框架中的生成器,而 Du 等人(2021)则使用流形学习来表示潜在空间。

3. 无限维扩散模型

在本节中,我们将扩散模型扩展到无限维,以便通过在训练中对坐标进行下采样来允许更高分辨率的数据训练,并允许在任意分辨率下进行训练/采样。我们认为将条件神经场应用于扩散模型是有问题的,因为需要压缩到潜在向量,这增加了复杂性和出错的机会,而去噪函数应为无需压缩的非局部积分算子。许多同期研究也开发了无限维度的扩散模型,包括 Kerrigan等人(2023),Lim等人(2023),和Franzese等人(2023);我们建议也阅读这些研究,它们在理论处理上走得更远,而我们的研究更侧重于设计和实际扩展性。

为此,我们将扩散状态空间限制在希尔伯特空间 H 中,其元素 x ∈ H 是函数,例如 x: R^n → R^d。希尔伯特空间配备了内积 〈·, ·〉 和相应的范数 ||·||_H。为了简化,我们考虑 H 是从 [0, 1]^n 到 R^d 的 L2 函数空间,尽管以下部分可以应用于其他空间。因此,H 中的一个点可以表示图像、音频信号、视频、3D 模型等。可以用其特征函数 ˆμ(Da Prato和Zabczyk, 2014)在 H 中定义高斯测度(Gaussian measure) μ:

均值 m 位于希尔伯特空间 H 中,m∈H,协方差算子(C:H → H) 是自伴的(self-adjoint)(记作 C = C*),非负的,并且是迹类的(trace-class)(Kukush, 2020)

对于具有分布 μ 的高斯随机元素 x,有 x∼N(m,C)。Radon-Nikodym 定理表明,对于一个绝对连续于基准测度 μ 的测度 v,存在一个密度函数:例如,两高斯分布之间的密度由 Minh (2021) 给出;在函数扩散模型的背景下,请参见 Lim 等人 (2023) 和 Kerrigan 等人 (2023) 的详细讨论。

3.1 平滑化(Mollificaition)

在定义无限维度上的扩散时,似乎使用前向过程中的白噪声是很自然的,即每个坐标是一个独立同分布的高斯随机变量:即 N(0,C_I​),其中 C_I(z(s),z(s′)) = δ(s−s′),使用 Dirac delta 函数 δ。然而,这种噪声并不位于希尔伯特空间 H 中(Da Prato 和 Zabczyk, 2014),因为它不满足迹类要求。取而代之的是,通过对应于线性算子 T 平滑核(mollifier kernel) k(s)>0 与白噪声的卷积,从而获得希尔伯特空间 H 中的高斯噪声,即 N(0,T·T*),将白噪声平滑到 H 中(Higdon, 2002)。为了确保核和噪声之间的一一对应,k 必须满足

使得 T·T* 自伴且非负。考虑 k 是具有平滑参数 l>0 的高斯核,h=Tx 给出如下:

3.2 无限维度平滑扩散

为了在希尔伯特空间 H 中制定扩散模型,我们必须指定转移分布。然而,数据点 x 的不规则性可能会影响模型的稳定性,使其无法在不同的下采样率/分辨率之间进行泛化。通过仔细的超参数调整可以缓解这一问题,或者在我们的情况下,也可以对 x 进行平滑处理(就像之前的噪声平滑一样)。虽然这种需求取决于 x 的性质,但我们为了完整性而包含了这一处理。首先,我们定义边际分布

由此我们可以推导出后验分布的闭式(closed form)表示(证明见附录 B.1),即

将反向转移定义为

然后我们可以参数化 μ_θ: H×R→H 来直接预测 x0​。损失函数在等式 (3) 中可以扩展到无限维(Pinski等, 2015)。然而,由于 Ho 等人(2020) 发现预测噪声可以提高图像质量,因此我们参数化 μθ 以预测 ξ ∼ N(0,TT*),并通过重写损失函数来实现这一目标:

由于 T^{-1} 不影响最小值,我们遵循 Ho 等人 (2020) 的做法,使用简化的损失函数

Kerrigan 等人 (2023) 的同期工作表明,在无限维的极限情况下,损失函数仅对特定的 ~β_t 选择才是有限的,而 Lim 等人 (2023) 则发现了类似的情况,只有在对 μ_θ 的特定参数化下才成立;然而,由于损失函数是通过蒙特卡洛近似的,因此在实践中这并不是问题。

数据平滑化。通过对训练数据 x0 进行平滑处理以确保其规律性,生成的样本也具有相似的规律性。直接预测 x0 将给出原始数据的估计值,但通过预测 ξ 我们只能对 Tx_0 进行采样。然而,在具有适当边界条件的高斯平滑核的情况下,如果我们考虑 x(c) 的傅里叶变换 ^x(ω),则 T^{-1} 的存在是明确的,然后高斯卷积可以定义为

因此 Tx 在任何傅里叶可变换的函数类上都是一对一的,Tx 的有界性确保了唯一性,因此也是可逆的(John, 1955)。显式地,逆变换由

给出(Hummel 等人, 1987)。然而,逆变换的条件较差,微小的变化(例如浮点误差)会破坏平滑性(Hummel 等人, 1987)。在这种情况下,维纳滤波器可用作近似逆变换,定义为

其中 ϵ\epsilonϵ 是逆信噪比的估计值(Biemond 等人, 1990)。

4. 参数化扩散过程

为了在希尔伯特空间中建模去噪函数,有些特性是可学习函数类必须满足的,以便允许在无限分辨率数据上进行训练:

  1. 能够接受位于任意坐标的点作为输入。
  2. 能够推广到与训练时不同数量的输入点,在规则网格上采样。
  3. 能够捕捉全局和局部信息。
  4. 能扩展到大量输入点,即在运行时间和内存方面是高效的。

最近的扩散模型通常使用包含卷积编码器和解码器的 U-Net(Ronneberger 等人, 2015),并在分辨率之间通过跳跃连接有效地捕捉全局和局部信息。不幸的是,U-Net 在固定网格上工作,使其不适合我们的需求。然而,我们可以从中获得灵感,构建一个满足这些期望特性的架构。

4.1 神经算子

神经算子(Li 等人, 2020;Kovachki 等人, 2021)是一种框架,旨在通过学习直接将 PDE 参数映射到解决方案,在单步中高效地求解偏微分方程。然而,更广泛地讲,它们能够学习两个无限维函数空间之间的映射,使其适合于参数化无限维的扩散模型。

令 X 和 S 是可分离的 Banach 空间,分别表示有噪声和去噪数据的空间;一个神经算子是一个映射 F_θ: X→S。由于 x∈X 和 s∈S 都是函数,我们只能访问逐点评估。令

为域 D=[0,1]^n 的 m 点离散化(即 c 是 m 个坐标),并假设我们有观测值 x(c)∈R^(m×d)。为了实现离散化不变性,神经算子可以在任意 c∈D 处进行评估,从而允许在离散化之间传递解决方案。每一层都通过一个非局部积分核算子 K(x;ϕ) 构建,由神经网络 κ_ϕ 参数化,在空间上聚合信息。

深度网络可以类似于传统方法,通过堆叠带有非线性激活函数的线性算子层来构建,即 v0→v1→⋯→vL,其中 v_l → v_(l+1) 定义为

其中 v0 = x 为输入,vl 为激活,vL = s 为输出,逐点线性变换 W: R^d→R^d,激活函数 σ: R→R。一个例子是傅里叶神经算子(Fourier Neural Operator,FNO)(Li et al., 2021),

其中 G 是傅里叶变换,R_ϕ 是傅里叶空间中的学习变换。当坐标位于规则网格上时,可以使用快速傅里叶变换,使得 FNO 快速且可扩展。

4.2 多尺度架构

虽然有满足所有要求属性(1-4)的神经算子存在,例如 Galerkin 注意力(Cao, 2021)(无 softmax 线性注意力)和 MLP-Mixers(Tolstikhin et al., 2021),但由于内存成本高,扩展到大规模坐标仍然具有挑战性。相反,我们设计了一个受 U-Net 启发的多尺度架构(图 4),分别聚合局部和全局信息。在连续设置中,有两种主要的下采样方法:(1)选择坐标的子集(Wang 和 Golland, 2022)和(2)将点插值到规则间隔的网格(Rahman et al., 2022)。我们发现,通过反复应用(1),在非常少的点上近似非均匀间隔网格上的积分算子时,表现和泛化效果都不好,可能是由于高方差。另一方面,虽然使用规则网格去除了一些稀疏性特性,但方差问题要小得多。因此,我们采用一种混合方法,将稀疏算子应用于原始不规则采样数据的局部区域;之后将点插值到规则网格,然后应用基于网格的架构来聚合全局信息;如果规则网格的维度足够高,这种组合应该足够。虽然可以使用 FNO(Li et al., 2021; Rahman et al., 2022)架构,但我们用密集卷积(Nichol 和 Dhariwal, 2021)取得了更好的效果,并使用稀疏算子进行分辨率变化。

4.3 高效稀疏算子

在稀疏层面,我们使用卷积算子(Kovachki et al., 2021),发现它们比 Galerkin 注意力更具表现力,且通过多尺度架构提供全局上下文。这通过一个限制在每个坐标局部区域 N(c) 的平移不变核来定义,

由于深度核在大核的参数效率更高(尤其是对连续参数化核而言),我们限制 κ 为深度核,并发现它们在使用较少采样坐标进行训练时更能够泛化;尽管规则卷积和深度卷积的稀疏率相同,但由于规则卷积中有大量的值,值之间有更多的空间相关性。当使用非常大量的采样坐标时,完全连续卷积在内存使用和运行时间方面非常不实用。然而,在实际中,图像是在离散网格上获取和存储的。因此,通过将图像视为高维但离散的实体,我们可以利用高效的稀疏卷积库(Choy et al., 2019;Contributors, 2022),使内存使用和运行时间更加合理。具体来说,我们使用了 TorchSparse(Tang et al., 2022),并对其进行修改以允许深度卷积。Wang 和 Golland (2022) 提议使用低差异坐标序列来近似积分,因为它们具有更好的收敛率。然而,我们发现均匀采样点更有效,可能是因为高频细节更容易捕捉。

5. 实验

6. 讨论

有许多有趣的方向可以改进我们的方法,包括更强大/更高效的神经算子、更高效的稀疏方法、更好的积分近似以及改进的 UNet 设计(Williams等人,2023)。我们已经证明了扩散模型可以在 8 倍采样率下进行训练,因此我们认为还有大量的性能提升空间。此外,最近的研究也很有趣,它们通过在反向过程中迭代上采样来加速扩散采样,这需要为每个分辨率配备一个独立的模型(Jing等人,2022;Zhang等人,2023);而我们的方法的分辨率不变性允许使用一个单一模型来实现这一点。

最近的扩散进展也与我们的方法互补,这些包括一致性模型(Song等人,2023)、随机插值(Albergo等人,2023)、薛定谔桥(De Bortoli等人,2021)、临界阻尼扩散(Dockhorn等人,2022)、架构改进(Hoogeboom等人,2023)以及更快的求解器(Lu等人,2022)。与我们的平滑扩散类似,模糊化已被用于改进扩散(Rissanen等人,2023;Hoogeboom和Salimans,2023)。类似于 GASP(Dupont等人,2022b),其他神经场 GAN 方法也存在,例如 CIPS(Anokhin等人,2021)和 Poly-INR(Singh等人,2023),但这些方法使用卷积判别器,需要在固定网格上使用所有坐标,因此无法扩展到无限分辨率。此外,神经过程(Garnelo等人,2018;Dutordoir等人,2022)也与此相关,它们学习类似于高斯过程的函数分布,然而,这些方法解决的是条件推理问题,而我们构建的是一个无条件生成模型,用于处理复杂得多的数据。

与本工作同时进行的,其他论文独立提出了无限维度的扩散模型(Lim等人,2023;Franzese等人,2023;Hagemann等人,2023;Zhuang等人,2023;Kerrigan等人,2023;Baldassari等人,2023;Pidstrigach等人,2023),这些方法与我们的方法互补,并在许多方面有所不同。我们的工作主要关注高效建模复杂高维数据所需的实际开发,而这些论文则更多地关注理论基础,通常仅应用于简单数据(如高斯混合和 MNIST)。特别值得注意的是,Kerrigan等人(2023)也在希尔伯特空间中开发了扩散模型,他们在基础理论上走得更远,包括讨论获得良好定义模型的要求,并考虑了不同的函数空间;Lim等人(2023)开发了作为 SDE 定义的无限维度扩散;Franzese 等人(2023)则证明了反向 SDE 的存在性。与我们的工作不同,这些方法利用了条件神经场或在统一网格的坐标上操作,而我们的方法在原始稀疏数据上操作,允许更好的扩展性。与本工作在扩展性上最接近的是扩散概率场(Zhuang等人,2023),该方法独立地去噪坐标,使用小坐标子集作为上下文;但这比我们的方法更具限制性,并且其分辨率远小于我们的方法(最大64×64)。

7. 结论

总之,我们发现我们的无限维度希尔伯特空间扩散模型,其过渡密度由非局部积分算子表示,能够生成高质量的任意分辨率样本。尽管在训练期间仅观察到少量像素子集,但样本质量显著优于先前的无限维度生成模型,并且与同时训练所有像素的最先进有限维度模型竞争。虽然之前的无限维度方法使用的是潜在条件神经场,我们的发现表明,直接在原始数据上操作的稀疏神经算子是一种有能力的替代方案,提供了显著的优势,因为它消除了逐点约束,因此无需潜在压缩。未来的工作将受益于改进的神经算子,这些算子能够在更大的稀疏性下有效地操作,以提高我们方法的效率并实现进一步的扩展。

论文地址:https://arxiv.org/abs/2303.18242

项目页面:https://github.com/samb-t/infty-diff

公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)
加 VX 群请备注学校 / 单位 + 研究方向

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

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

相关文章

element-plus框架+vue3+echart——后台页面

一、图表样式 图表组件:echarts https://echarts.apache.org/examples/zh/index.html element-plus框架: https://www.cwgj.xyz/zh-CN/ 1、折线图 栅格 一共24。 12代表占一半50%, 当页面缩小到一定程度 占整个屏幕的100%。 id"mo…

【Axure教程】拖拉拽编辑页面

低代码开发平台通常提供拖拉拽编辑页面的功能,使用户无需编写大量代码即可创建复杂的应用程序和页面。这种平台的特点是通过图形用户界面来进行开发,用户可以拖拽组件到画布上进行布局和配置。 那今天作者就教大家在Axure里怎么制作拖拉拽动态编辑页面的…

01 LVS负载均衡群集

1.1 LVS群集应用基础 群集的称呼来自于英文单词“Cluster",表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。 1.1.1 群集技术概述 LVS(Linux Virtual Server)是Linux虚拟服…

linux下的线程

概念理解 linux下没有线程的概念,只有轻量级进程的概念, 有接口:clone() 是clone()调用,在库中创建栈 源码解析 int clone(int (*fn)(void *), void *child_stack,int flags, void *arg, .../* pid_t *p…

【Spring】详细了解静态代理和动态代理的使用

目录 1.代理模式介绍 2. 静态代理 3.动态代理 3.1 JDK动态代理 3.2 CGLIB动态代理 4. 动态代理和静态代理的区别 1.代理模式介绍 代理模式分为动态代理和静态代理,目的是在不直接暴露真实对象的情况下,通过代理对象来间接访问真实对象,从…

【设计模式】设计模式之观察者模式

文章目录 观察者模式什么是观察者模式引入组成UML图代码实现1. 定义观察者接口2. 定义主题接口3. 实现具体观察者4. 实现具体被观察者5.测试 应用场景优点缺点 观察者模式 什么是观察者模式 观察者模式(Observer Pattern)是一种设计模式 它定义了一种…

vLLMcuda安装笔记

1. 引言 最近在部署Qwen模型时,文档上有提到强烈建议用vLLM来部署模型,按照公开的性能测试数据,用vLLM部署Qwen模型的文本推理速度要比transformers部署快3~4倍。带着这个好奇就开始安装尝试,但试下来这个安装过程并没有那么顺利…

最新个人免签约支付系统源码|PHP源码 | 码支付系统 | ThinkPHP6框架 | 开源

源码介绍: 这个最新的个人专用免签约支付系统源码!是PHP源码写的哦,而且是用ThinkPHP6框架开发的,完全开源的码支付系统。 这个系统适合个人用户使用,作为收款的免签约解决方案。它还加入了监控端,可以拒…

Linux 调试追踪: trace-cmd 和 kernelshark

文章目录 1. 前言2. 概述3. trace-cmd3.1 下载3.2 交叉编译3.3 安装、运行3.3.1 trace-cmd 示范:抓取系统调度信息 4. kernelshark5. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承…

Java多线程-----定时器(Timer)及其实现

目录 一.定时器简介: 二.定时器的构造方法与常见方法: 三.定时器的模拟实现: 思路分析: 代码实现: 在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作,这…

【QT】常用控件-上

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 目录 👉🏻QWidgetenabledgeometryrect制作上下左右按钮 window frame 的影响window titlewindowIcon代码示例: 通过 qrc 管理图片作为图标 windowOpacitycursor使用qrc自…

Python | Leetcode Python题解之第309题买卖股票的最佳时机含冷冻期

题目: 题解: class Solution:def maxProfit(self, prices: List[int]) -> int:if not prices:return 0n len(prices)f0, f1, f2 -prices[0], 0, 0for i in range(1, n):newf0 max(f0, f2 - prices[i])newf1 f0 prices[i]newf2 max(f1, f2)f0, …

【笔记】《冲击弹性波理论与应用》[2-2] 振动信号分析

1.前级硬件滤波 - 降噪 2.软件降噪 2.1 移动平滑滤波 2.1.1 移动平滑滤波的效果 2.2 经验模态分解法 2.1.1 效果 3 信号分析 除了FFT,最大熵和小波变换现在也很流行。 3.1 最大熵 3.1.1 与FFT的比对 3.2 相关性分析 3.2.1 自相关 3.2.2 互相关 3.3. 小波 非等周期信号 3…

《python语言程序设计》2018第6章第28题 掷骰子 两个色子,分别是1到6

2、3、12 玩家输 7、11玩家赢 4、5、6、8、9、10算1点&#xff0c;之后出7玩家输或者和上一次相同。def rolled(num_t):count 0still_win 0second_win 0still_lose 0second_lose 0while count < num_t:a_1 random.randint(1, 6)b_1 random.randint(1, 6)tTen a_1 b…

力扣-41.缺失的第一个正数

刷力扣热题–第二十五天:41.缺失的第一个正数 新手第二十五天 奋战敲代码&#xff0c;持之以恒&#xff0c;见证成长 1.题目简介 2.题目解答 做这道题有点投机取巧的感觉&#xff0c;要求时间复杂度O(N),且空间复杂度O(1)&#xff0c;那么就是尽可能的去找到更多的可能性&…

C语言程序设计之数组1

程序设计之数组1 问题1_1代码1_1结果1_1 问题1_2代码1_2结果1_2 问题1_3代码1_3结果1_3 问题1_4代码1_4结果1_4 问题1_5代码1_5结果1_5 问题1_1 函数 f u n fun fun 的功能是&#xff1a;移动一位数组中的内容&#xff0c;若数组中有 n n n 个整数&#xff0c;要求把下标从 …

软件测试生命周期、BUG描述与处理策略

软件测试的生命周期 需求分析&#xff1a;需求是否完整、是否正确 测试计划&#xff1a;确定由谁测试、测试的起止时间、设计哪些模块 测试设计、测试开发&#xff1a;写测试用例&#xff08;手工、自动化测试用例&#xff09;、编写测试工具 执行测试用例 测试评估&…

衢州骨伤科医院为98岁高龄老人做髋关节置换,患者第三天便下地行走

灵活迈步、周身整洁、双手提着两口袋鸡蛋......在清晨的菜市场里&#xff0c;王阿婆&#xff08;化名&#xff09;在人群里穿梭&#xff0c;买一些自己和女儿想吃的菜。如果没有看到她的脸&#xff0c;大家都以为她只有 60 多岁&#xff1b;再定睛一看&#xff0c;她虽然脸上布…

Token的原理及区别,以及与Cookie,Session之间的区别?

Token&#xff0c;特别是JSON Web Token&#xff08;JWT&#xff09;&#xff0c;也是一种用于管理用户状态和身份的机制&#xff0c;但它与Cookie和Session的工作方式有所不同。下面将详细解释Token如何管理用户状态和身份。 Token的工作原理 Token是一种无状态的认证机制&am…

QQ邮箱 + Kafka + Redis + Thymeleaf 模板引擎实现简单的用户注册认证

1. 前提条件 1.1 Redis 1.1.1 拉取 Redis 镜像 docker pull redis:latest 1.1.2 启动 Redis 容器 docker run --name my-redis -d -p 6379:6379 redis:latest1.2 Kafka 1.2.1 docker-compose.yml version: 3.8 services:zookeeper:image: "zookeeper:latest"h…