【扩散模型】【网络结构探索】神经网络扩散:Neural Network Diffusion(论文解读)

项目地址:https://github.com/NUS-HPC-AI-Lab/Neural-Network-Diffusion


文章目录

  • 摘要
  • 一、前言
  • 二、Nerual Network Diffusion (神经网络扩散)
    • 2.1扩散模型(预备知识)
    • 2.2 总览
    • 2.3 参数自动编码器
    • 2.4 参数生成
  • 三、实验
    • 3.1 设置
    • 3.2 结果
    • 3.3 消融实验与分析
  • 四、P-diff只是记忆吗?
    • 4.1 问题和实验设计
    • 4.2 相似性指标
    • 4.3 预测的相似性
    • 4.4 潜在表示的比较
    • 4.5 p-diff过程的运动轨迹
    • 4.6 从记忆到生成新的参数
  • 五、相关工作
    • 1.引入库
    • 2.读入数据
  • 总结


摘要

  扩散模型在图像和视频生成方面取得了显著的成功。这项工作证明了,扩散模型也可以生成高性能的神经网络参数利用一个自动编码器和一个标准的潜在扩散模型。自动编码器提取训练后的网络参数子集的潜在表示。然后训练一个扩散模型,从随机噪声中合成这些潜在的参数表示。然后,它生成新的表示,通过自动编码器的解码器,其输出准备用作网络参数的新子集。

  在不同的架构和数据集上,我们的扩散过程始终以最小的额外成本生成与训练网络相比的性能相当或改进的模型。值得注意的是,我们根据经验发现,生成的模型与训练后的网络表现不同。


一、前言

  扩散模型的起源可以追溯到非平衡热力学。在(Sohl-Dickstein等人)中,首先利用扩散过程逐步去除输入中的噪声,并生成清晰的图像。后来的工作,如DDPM和DDIM,采用了以正向过程和反向过程为特征的训练范式,细化了扩散模型。

  当时,由扩散模型生成的图像的质量还没有达到预期的水平。Guided-Diffusion进行了消融,找到了更好的架构,这代表了将扩散模型超越基于GAN的方法的开创性努力。随后,GLIDE、Imagen、DALL·E2和SD实现了艺术家所采用的逼真图像。

  扩散模型在其他领域的潜力:本文展示了扩散模型在生成高性能模型参数方面的惊人能力,这是一项与传统的视觉生成有根本不同的任务。 参数生成的重点是创建能够在给定任务上表现良好的神经网络参数。从先验和概率建模方面进行了探索,即 随机神经网络 贝叶斯神经网络。然而,在参数生成中使用扩散模型还没有得到很好的探索。

  仔细研究神经网络训练和扩散模型,基于扩散的图像生成随机梯度下降(SGD)学习过程在以下几个方面有共同之处 (如图1,顶部为扩散过程;底部为ResNet-18在CIFAR-100训练过程中批归一化(BN)的参数分布。上半部分为BN权重,下半部分为 BN偏差。)

在这里插入图片描述

i)神经网络训练和扩散模型的反向过程都可以看作是从随机噪声/初始化到特定分布的过渡。
ii)高质量的图像和高性能的参数也可以通过多重噪声的添加而退化为简单的分布,如高斯分布。

  基于上述观察,我们引入了一种新的参数生成方法,即神经网络扩散 p-diff(p代表参数),该方法采用了一个标准的潜在扩散模型来合成一组新的参数。这是由于扩散模型有能力将给定的随机分布转换为特定的随机分布。首先,对于由SGD优化器训练的模型参数的一个子集,我们训练自动编码器来提取这些参数的潜在表示。然后,我们利用一个标准的潜在扩散模型来综合来自随机噪声的潜在表示。最后,将合成的潜在表示通过经过训练的自动编码器的解码器,得到新的高性能模型参数。

  我们的方法有以下特点:
i)它在几秒内跨多个数据集和架构实现相似甚至增强的性能,即由SGD优化器训练的模型。
ii)我们生成的模型,与训练好的模型有很大的差异,这说明我们的方法可以合成新的参数,而不是记忆训练样本。

二、Nerual Network Diffusion (神经网络扩散)

2.1扩散模型(预备知识)

  扩散模型通常由由 timesteps 索引的多步链中的正向和反向过程组成

前向过程

  给定一个样本 x0∼q (x),正向过程在T步中,逐步增加的高斯噪声,得到x1、x2、···、xT:

在这里插入图片描述
其中q和N表示前向过程,以及由 βt 参数化的高斯噪声,I 为单位矩阵。

反向过程

  反向过程的目的是训练一个去噪网络递归地去除 xt 中的噪声。当t从T减少到0时,它在多步链上向后移动。数学表述为:

在这里插入图片描述
  其中p表示反向过程,µθ(xt, t)Σθ(xt, t) 是由去噪网络参数θ估计的高斯均值和方差。去噪网络采用标准负对数似然法 进行优化(DKL(·||·) 为KL散度):

在这里插入图片描述
  训练扩散模型的目标是找到在每个时间步长t中,最大化 forward transitions的似然的 reverse transitions。在实践中,训练等价地由最小化变分上界构成。推理过程的目的,是通过优化去噪参数θ 和反向的多步链,从随机噪声中生成新的样本。

训练和推理程序

2.2 总览

  神经网络扩散 p-diff ,目的是从随机噪声中生成高性能的参数。如图2所示,方法由两个过程组成,即参数自动编码器和生成器

在这里插入图片描述

1.给定一组训练好的高性能模型,选择参数中的一个子集,并压平为一维向量。
2.引入一个编码器,从这些向量中提取潜在表示,并伴随着一个解码器,负责从潜在表示中重建参数。
3.训练一个标准的潜在扩散模型,从随机噪声中合成潜在表示。

  经过训练后,利用p-diff通过以下链生成新的参数:随机噪声→反向处理→训练的解码器→生成的参数

2.3 参数自动编码器

2.3.1数据准备
  收集自动编码器的训练数据,我们从头开始训练一个模型,并在最后一个epoch密集地保存权重(只通过SGD优化器更新参数子集,并修复模型的剩余参数)。利用保存的参数子集S=[s1…,sk,…,sK]来训练自动编码器,其中K是训练样本的数量。对于一些在大规模数据集上训练的大型架构,考虑到从头训练的成本,对预训练模型的参数子集进行微调,并将微调后的参数密集保存为训练样本。

2.3.2训练
  将参数S压缩成一维向量 V = [v1,…,vk,…,vK],其中 V∈RK×D ,D是子集参数的大小。然后,训练一个自动编码器来重构这些参数V。为了增强其鲁棒性和泛化性,在输入参数和潜在表示中同时引入了随机噪声增强。Encoder和Decoder过程:

在这里插入图片描述
其中,fencoder(·, σ)fdecoder(·, ρ) 分别表示由σ和ρ参数化的编码器和解码器。
Z为潜在表示,ξ为随机噪声,Z表示,V’ 为重构参数。默认使用一个一个4层编码器和解码器的自动编码器。将V’V之间的均方误差(MSE)损失最小化如下:

在这里插入图片描述

2.4 参数生成

  最直接的策略是,通过扩散模型直接生成新的参数。该操作的内存成本太重,特别是当V的维数超大时。在此基础上,我们将扩散过程默认应用于潜在表示Z,具体使用DDPM来优化:

在这里插入图片描述
其中t在1和T之间均匀采样,超参数 α ˉ \bar{α} αˉt 表示每一步的噪声强度,ϵ是添加的高斯噪声,ϵθ表示由θ参数化的去噪网络。训练完成后,直接利用随机噪声,逆扩散和解码,生成一组新的高性能参数。这些生成的参数与剩余的模型参数连接起来,形成新的模型进行评估。神经网络参数和图像像素在几个关键方面表现出显著的差异,包括数据类型、维度、范围和物理解释。与图像不同的是,神经网络参数大多没有空间相关性,因此我们在参数自编码器和参数生成过程中,用一维卷积代替二维卷积

三、实验

3.1 设置

3.1.1数据集和框架

  评估数据集,包括MNIST,CIFAR-10/100,ImageNet-1K,STL-10,Flowers,Pets和F-101。网络主要在ResNet-18/50、ViT-Tiny/Base和ConvNeXt-T/B上进行实验。

3.1.2训练细节

  自动编码器和潜在扩散模型都包括一个基于4层的一维CNN的Encoder和Decoder。默认所有框架接收200个训练数据。ResNet-18/50,从零开始训练。在最后一个阶段,我们继续训练最后两个BN层,并修复其他参数。在最后一个epoch保存了200个checkpoints。对于ViT-Tiny/Base和ConvNeXt-T/B,使用timm库中发布的模型的最后两个标准化参数进行了微调。ξV和ξZ为振幅分别为0.001和0.1的高斯噪声。自动编码器和潜扩散训练可以在单个Nvidia A100 40G GPU上在1到3小时内完成

3.1.3推理细节

  通过在潜在扩散模型和训练解码器中加入随机噪声,合成了100个新参数。然后将这些合成参数与上述固定参数连接起来,形成我们生成的模型。从这些生成的模型中,我们选择了在训练集上表现最好的模型。随后,我们在验证集上评估其准确性,并报告结果。这是考虑与使用SGD优化训练的模型进行公平比较的问题。

3.2 结果

  表1显示了与8个数据集和6个架构上的两个基线的结果比较。基于这些结果,我们有以下几个观察结果: i)在大多数情况下,我们的方法获得了比两个基线相似或更好的结果。这表明,我们的方法可以有效地学习高性能参数的分布,并从随机噪声中生成优越的模型。ii)我们的方法在各种数据集上始终表现良好,这表明我们的方法具有良好的通用性。
在这里插入图片描述

3.3 消融实验与分析

  消融实验默认在CIFAR-100上训练ResNet-18,并报告最好的、平均的和中等的准确性。

3.3.1训练模型的数量
  表2.(a)改变了训练数据的大小,即原始模型的数量。我们发现,不同数量的原始模型之间的最佳结果的性能差距很小。为了全面探讨不同数量的训练数据对性能稳定性的影响,采用平均值(avg.)和中位数(med.)准确性,作为我们生成的模型的稳定性的指标。值得注意的是, 由少量训练实例生成的模型的稳定性,比在较大的设置中观察到的要差得多 。这可以用扩散模型的学习原理来解释:如果只使用少量的输入样本进行训练,扩散过程可能很难很好地模拟目标分布。

在这里插入图片描述

3.3.2在哪里应用 p-diff
  我们默认是合成最后两个标准化层的参数。为了研究p-diff在其他归一化层深度上的有效性,我们还探讨了合成其他浅层参数的性能。为了保持相同数量的BN参数,我们对三组BN层实现了我们的方法,它们是在不同深度的层之间。如表2(b), 方法在所有BN层设置的深度上都比原始模型获得了更好的性能(最佳精度)。另一个发现是, 合成深层比生成浅层可以获得更好的精度。这是因为生成浅层参数比生成深层参数更容易在正向传播过程中积累误差。

3.3.3噪声增强
  噪声增强是为了增强训练自动编码器的鲁棒性和泛化性。我们分别降低了在输入参数和潜在表示中应用这种增强的有效性。消融结果见表2(c)

i)噪声增强在生成稳定和高性能的模型中起着至关重要的作用
ii)在潜在表示中应用噪声增强的性能增益,大于在输入参数中
iii)我们的默认设置,在参数和表示中联合使用噪声增强,获得了最佳的性能

3.3.4对整个模型参数的泛化
  以上评估了在综合模型参数的一个子集方面的有效性,即批处理归一化参数。为评估综合整个模型参数,将其扩展到两个小的架构,即MLP-3(三个线性层+ReLU激活)和ConvNet-3(三个卷积层+一个线性层)。与前面提到的训练数据收集策略不同,我们分别用200个不同的随机种子从头开始单独训练这些架构。我们以CIFAR-10为例,展示了两种框架的细节(卷积层:核大小×核大小,通道数量;线性层:输入维度,输出维度):

• ConvNet-3: conv1. 3×3, 32, conv2. 3×3, 32, conv3. 3×3,
32, linear layer. 2048, 10.

• MLP-3: linear layer1. 3072, 50, linear layer2. 50, 25,
linear layer3. 25, 10.

  我们在表3展示了本方法和两个基线(即原始和集成)之间的结果比较,证明了方法在综合整个模型参数方面的有效性和泛化,即在基线上实现相似甚至改进的性能。然而,受到GPU内存的限制,无法综合大型体系结构的整个参数,如ResNet、ViT和ConvNeXt系列。
在这里插入图片描述

3.3.5原始模型的参数模式
  实验结果和消融研究证明了我们的方法在生成神经网络参数方面的有效性。为了探究这背后的内在原因,我们使用3个随机种子从头开始训练ResNet-18模型,并可视化图3中的参数。我们通过最小-最大归一化,来可视化不同层的参数分布的热图。基于卷积层(Conv.-layer2)和全连接层(fc层18层)参数的可视化,这些层之间确实存在特定的参数模式 (specific parameter
patterns)。基于对这些模式的学习,我们的方法可以生成高性能的神经网络参数。

在这里插入图片描述

四、P-diff只是记忆吗?

  主要研究原始模型和生成模型之间的差异。我们首先提出了一个相似度度量方法。然后进行了几次比较和可视化来说明我们的方法的特点

4.1 问题和实验设计

  设计以下问题:

1)p-diff是否只是记住了从训练集中的原始模型中提取的样本?
2)在添加噪声或微调原始模型和由我们的方法生成的模型之间有什么区别?

  论文中,希望p-diff能够产生一些性能不同于原始模型的新参数。为了验证这一点,我们设计了一些实验,通过比较原始模型的预测和可视化结果,来研究原始模型、噪声添加模型、微调模型、p-diff模型和p-diff模型之间的差异。

4.2 相似性指标

  默认设置(使用ResNet-18对CIFAR-100进行实验)只生成最后两批归一化层的参数。我们通过计算两个模型错误预测的联合交集(IoU)来衡量两个模型之间的相似性。IoU可以表述如下:

在这里插入图片描述
  其中Pwrong 表示验证集上错误预测的指标。IoU越高,表明两种模型的预测相似性越大。为减轻实验中性能对比的影响,我们默认选择性能优于76.5%的模型。

4.3 预测的相似性

  对于每个模型,我们通过与其他模型的IoU平均来获得其相似性。

  我们引入了四个比较: 1)原始模型之间的相似性;2)p-diff模型之间的相似性;3)原始模型和p-diff模型之间的相似性;4)原始模型和p-diff模型之间的最大相似度(最近邻)。我们计算了上述四种比较中所有模型的iou,并在图4(a).中报告了它们的平均值我们可以发现, 生成的模型之间的差异远远大于原始模型之间的差异。另一个发现是,即使原始模型和生成模型之间的最大相似性也低于原始模型之间的相似性它显示了我们的p-diff可以生成新的参数

在这里插入图片描述

噪声消融
  随机选择一个生成的模型,并从原始模型中搜索其最近邻(即最大相似度)。然后,对最近邻的随机噪声进行微调和添加,得到相应的模型。然后,我们分别用微调模型和噪声添加模型计算原始模型的相似度。最后,我们重复此操作50次,并报告其平均iou进行分析。在这个实验中,我们还限制了所有模型的性能,即在这里只使用好的模型来减少可视化的偏差。我们根据经验设置了随机噪声的振幅,其范围为0.01到0.1,以防止性能的实质性下降。

  根据图4(b)中的结果,发现微调模型和噪声添加模型的性能很难优于原始模型。此外,微调模型或噪声添加模型与原始模型之间的相似性非常高,这表明这两种操作无法获得新的但高性能的模型

4.4 潜在表示的比较

  除了预测,我们使用t-SNE评估原始和生成模型的潜在表征分布。为了识别我们的方法和在原始模型的潜在表示中添加噪声的操作之间的差异,如图4©。添加的噪声振幅为0.1的随机高斯噪声。我们可以发现,p-diff可以产生新的潜在表示,而添加噪声只是围绕原始模型的潜在表示进行插值

4.5 p-diff过程的运动轨迹

  我们在推理阶段绘制不同时间步长的生成参数,形成轨迹,以探索其生成过程。5个轨迹(由5个随机噪声初始化)如图5(a).所示我们还绘制了原始模型的平均参数及其标准差(std)。随着时间步长的增加,生成的参数总体上接近于原始模型。虽然我们对可视化保持了一个较窄的性能范围约束,但轨迹的端点(橙色三角形)与平均参数(五角星)之间仍然有一定的距离。另一个发现是,这五种轨迹是不同的。

在这里插入图片描述

4.6 从记忆到生成新的参数

  为了研究原始模型的数量(K)对生成模型的多样性的影响,我们在图5(b).中可视化了具有不同K的原始模型和生成模型之间的最大相似性具体来说,我们不断地生成参数,直到50个模型在所有情况下都优于76.5%。当K=为1时,生成的模型几乎记忆了原始模型,相似度范围较窄,值较高。随着K的增加,这些生成的模型的相似性范围变大,这表明我们的方法可以生成与原始模型不同的参数。

五、相关工作

1.引入库

2.读入数据








d \sqrt{d} d 1 0.24 \frac {1}{0.24} 0.241 x ˉ \bar{x} xˉ x ^ \hat{x} x^ x ~ \tilde{x} x~ ϵ \epsilon ϵ
ϕ \phi ϕ


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

多输入时序预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 灰狼优化算法: 卷积神经网络-长短期记忆网络: 四、完整程序下载: 一、程序及算法内容…

v-rep插件

v-rep官网插件汉化教程 官网教程 插件是什么 插件本质上就是遵循一定规范的API编写出来的程序,在v-rep中最终需要编译为动态库。 linux下是libsimXXXX.so; 其中XXXX是插件的名称。 请至少使用4个字符,并且不要使用下划线,因为…

【MySQL】数据类型(常见类型)-- 详解

一、数据类型分类 二、数值类型 1、tinyint 类型 在 MySQL 中,整型可以指定是有符号的和无符号的,默认是有符号的。 有符号: 插入数据越界测试: 在 MySQL 表中建立属性列时,我们可以发现列名称在前,类型在…

互联网加竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…

IO进程线程复习

标准IO&#xff1a; 1.打开文件 #include<myhead.h>int main(int argc, const char *argv[]) {//定义文件指针FILE *fpNULL;//以只读的形式打开文件//fpfopen("./text.txt","r");//以只写的形式打开文件fpfopen("./time.c","w"…

蓝桥杯:真题讲解2(C++版)附带解析

星系炸弹 来自&#xff1a;2015年六届省赛大学B组真题&#xff08;共6道题) 分析&#xff1a;这题涉及到平年和闰年的知识&#xff0c;如果我们要解这题&#xff0c;首先要知道每月有多少天&#xff0c;其实也就是看2月份的天数&#xff0c;其它月份的天数都是一样的&#xff…

飞行机器人专栏(十三)-- 智能优化算法之粒子群优化算法与多目标优化

一、理论基础 1.1 引言 粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;自1995年由Eberhart和Kennedy提出以来&#xff0c;已经成为解决优化问题的一种有效且广泛应用的方法。作为一种进化计算技术&#xff0c;PSO受到社会行为模式&#xff0c;特别是…

金南瓜SECS/GEM如何添加工程?

公开资料皆为是2、3年前版本 编译SecsEquip.dll依赖库 ① 打开示例程序中的SecsEquip项目 ② 选中SecsEquip工程&#xff0c;右键选择属性 如果没有“解决方案资源管理器”页面&#xff0c;可以从菜单的“视图”->“解决方案资源管理器”打开 ③ 选择跟设备相同的NET版本…

2月24日(周六)比赛前瞻:曼联 VS 富勒姆、拜仁 VS 莱比锡

大家好&#xff0c;博主将持续更新胜负14场前瞻&#xff0c;此处每日赛事间歇更新&#xff0c;胃信号每日更新。 精选赛事&#xff1a;曼联 VS 富勒姆 曼联近期状态显著提升&#xff0c;上一轮联赛客场2-1战胜卢顿&#xff0c;连续7场正赛取得6胜1平的成绩&#xff0c;保持不败…

基于JAVA的二手车交易系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

K8S-001-Virtual box - Network Config

A. 配置两个IP&#xff0c; 一个连接内网&#xff0c;一个链接外网: 1. 内网配置(Host only&#xff0c; 不同的 virutal box 的版本可以不一样&#xff0c;这些窗口可能在不同的地方&#xff0c;但是配置的内容是一样的): 静态IP 动态IP 2. 外网&#xff08;创建一个 Networ…

六、回归与聚类算法 - 模型保存与加载

目录 1、API 2、案例 欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、API 2、案例

__proto__和protype的区别

概述&#xff1a; prototype 函数静态属性&#xff0c;非实例属性,所有实例都可以继承它 __proto__ 实例属性&#xff0c;指向实例的原型对象&#xff0c;原型对象包括构造函数和protype属性 替代 现代浏览器中可以使用Object.getPrototypeOf()来替代__proto__来获取原型对象 …

EasyRecovery2024永久免费版手机数据恢复软件功能全面介绍

一、功能概述 EasyRecovery手机数据恢复软件是一款专为移动设备设计的数据恢复工具。它能够有效地从智能手机、平板电脑等移动设备中恢复因各种原因丢失的数据&#xff0c;包括但不限于误删除、格式化、系统崩溃、病毒感染等。 EasyRecovery-mac最新版本下载:https://wm.maked…

红日靶场3

靶场链接&#xff1a;漏洞详情 在虚拟机的网络编辑器中添加两个仅主机网卡 信息搜集 端口扫描 外网机处于网端192.168.1.0/24中&#xff0c;扫描外网IP端口&#xff0c;开放了80 22 3306端口 80端口http服务&#xff0c;可以尝试登录网页 3306端口mysql服务&#xff0c;可…

Java最全面试总结——6.Springboot篇

1、为什么要用SpringBoot Spring Boot 优点非常多&#xff0c;如&#xff1a; 一、独立运行 Spring Boot而且内嵌了各种servlet容器&#xff0c;Tomcat、Jetty等&#xff0c;现在不再需要打成war包部署到容器 中&#xff0c;Spring Boot只要打成一个可执行的jar包就能独立运行…

MATLAB:数组与矩阵

2.1 数组运算 数组运算时MATLAB计算的基础。由于MATLAB面向对象的特性&#xff0c;这种数值数组称为MATLAN最重要的一种内建数据类型&#xff0c;而数组运算就是定义这种数据结果的方法。 2.1.1 数组的创建和操作 在MATLAB中一般使用方括号“[]”、逗号“,”、空格和分号“;…

常见的10种算法

数据结构 研究的内容&#xff1a;就是如何按一定的逻辑结构&#xff0c;把数据组织起来&#xff0c;并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。 算法 研究的目的&#xff1a;是为了更有效的处理数据&#xff0c;提高数据运算效率。数据的运算是定…

mysql-MVCC

一、基础概念 1. MVCC的含义 MVCC (Multiversion Concurrency Control)&#xff0c;即多版本并发控制技术&#xff0c;它是通过读取某个时间点的快照数据&#xff0c; 来降低并发事务冲突而引起的锁等待&#xff0c; 从而提高并发性能的一种机制. MVCC 的实现,是通过保存数据…

Redis高性能原理

redis大家都知道拥有很高的性能&#xff0c;每秒可以支持上万个请求&#xff0c;这里探讨下它高性能的原理。单线程架构和io多路复用技术。 一&#xff0c;单线程架构 单线程架构指的是命令执行核心线程是单线程的&#xff0c;数据持久化、同步、异步删除是其他线程在跑的。re…