论文解读:(VPT)Visual Prompt Tuning

文章汇总

要解决的问题

大型模型应用于下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练好的模型进行全面的端到端微调。

动机

只微调参数的一个子集

解决的办法

只在输入空间中引入少量特定于任务的可学习参数,而在下游训练期间冻结整个预训练的Transformer主干。

方法简述

作者的方法十分简单

VPT-Shallow

这里X_i,E_i分别为第i层的CLS和图像的特征向量

提示符仅插入到第一个Transformer层L_1。之后让这些提示符自学习。

每个提示符号是一个可学习的d维向量。p个提示的集合记为
P=\{p^k \in R^d|k \in N,1\le k\le p\},浅提示ViT为:

颜色红色和蓝色分别表示可学习和冻结的参数。

VPT-Deep(效果更好一些)

每个Transformer层的输入空间中引入提示符。值得注意的是,每一层插入的提示词是不一样的,这样没有信息的互动,也会存在训练不足、不稳定的风险(https://arxiv.org/abs/2304.08386 该论文对此进行了改进)。

对于第(i+1)层L_{i+1},我们将输入可学习提示的集合记为P_i=\{p_i^k \in R^d|k\in N,1\le k \le m\}。深层提示的ViT公式为:

摘要

目前适应预训练模型的操作方法涉及更新所有骨干参数,即全面微调。本文介绍了视觉提示调谐(Visual Prompt Tuning, VPT)作为一种有效的替代方案,在视觉上对大型变压器模型进行全微调。从高效调优大型语言模型的最新进展中获得灵感,VPT在保持模型主干冻结的同时,仅在输入空间中引入少量(不到模型参数的1%)可训练参数。通过对各种下游识别任务的广泛实验,我们表明,与其他参数高效调优协议相比,VPT实现了显着的性能提升。最重要的是,在跨模型容量和训练数据规模的许多情况下,VPT甚至优于完全微调,同时降低了每个任务的存储成本。代码可从https://github.com/kmnp/vpt获得。

介绍

对于各种识别应用,现在最准确的结果是通过适应在大量精选或原始数据上预训练的大型基础模型获得的,这一发现反映了自然语言处理(NLP)的发展[6]乍一看,这是一个成功的故事:人们可以通过利用最新和最伟大的基础模型在多个识别问题上取得快速进展。然而,在实践中,将这些大型模型应用于下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练好的模型进行全面的端到端微调。但是,该策略要求为每个任务存储和部署骨干参数的单独副本。这是一个昂贵且通常不可行的提议,特别是对于现代基于Transformer的架构,它比卷积神经网络(ConvNet)的对对物要大得多,例如,ViT-Huge [19] (632M参数)与ResNet-50 [31] (25M参数)。因此,我们要问,在有效性和效率方面,什么是使大型预训练变压器适应下游任务的最佳方法?

图1所示。视觉提示调整(VPT)与其他迁移学习方法。(a)目前的迁移学习协议是根据调整范围分组的:完全微调,面向头部和面向骨干的方法。(b) VPT在输入空间中增加了额外的参数。(c)采用预训练的ViT-B主干在广泛的下游分类任务上的不同方法的表现,并附有平均值和标准差注释。在使用不到1%的所有模型参数的情况下,VPT在24种情况中有20种优于Full微调。

一种直接的方法是转向我们已经完善的其他策略,使卷积神经网络适应新的任务,如图1(a)所示。一种流行的方法是只微调参数的一个子集,如分类器头[56,36,11]或偏差项[8]。先前的研究也着眼于向主干添加额外的残余块(或适配器)[68,87]。我们可以在《变形金刚》中实施类似的策略。然而,总的来说,这些策略在准确性上表现不佳。

我们在本文中探索了一条不同的路径。我们不修改或微调预训练的Transformer本身,而是修改Transformer的输入。从NLP中提示的最新进展中获得灵感[50,48,45,51],我们提出了一种新的简单有效的方法来调整变压器模型以适应下游视觉任务(图1(b)),即视觉提示调谐(VPT)。我们的方法只在输入空间中引入少量特定于任务的可学习参数,而在下游训练期间冻结整个预训练的Transformer主干。在实践中,这些附加参数被简单地添加到每个Transformer层的输入序列中,并在微调期间与线性头部一起学习。

在使用预训练的ViT主干跨越不同领域的24个下游识别任务中,VPT击败了所有其他迁移学习基线,甚至在20个案例中超过了完全微调,同时保持了为每个单独任务存储更少参数(不到主干参数的1%)的优势(图1(c))。这一结果证明了视觉提示的独特强度:而在NLP中,提示调谐仅在某些情况下才能匹配完全微调性能[45]。VPT在低数据状态下特别有效,并在整个数据规模上保持其优势。最后,VPT在一系列变压器规模和设计(ViTBase/Large/Huge, Swin)方面具有竞争力。综上所述,我们的结果表明VPT是适应不断增长的视觉骨干的最有效方法之一。

2.相关工作

Transformer

transformer模型[73]在自然语言处理中取得了巨大成功[17,66,7]。Transformer架构的成功也扩展到各种计算机视觉任务,包括图像分类[19,52]、目标检测[9,49]、语义和全视分割[71,89,78]、视频理解[25,79,21]和少镜头学习[18],超越了以前最先进的方法。在最近的自监督预训练方法中,变压器也被广泛使用[11,30,3]。与卷积神经网络相比,变形金刚具有更优越的性能和更大的规模,如何有效地适应不同的视觉任务仍然是一个重要的开放性问题。我们提议的VPT提供了一条有希望的前进道路。

迁移学习

在卷积神经网络的背景下,迁移学习已经被广泛研究用于视觉任务[92],并引入了许多技术,包括侧调谐[87],残差适配器[67],偏置调谐[8]等。相对而言,很少有人关注视觉transformer的适应性,而上述方法在这种全新类型的架构上的表现如何仍然未知。另一方面,考虑到大规模预训练的基于transformer的语言模型(LM)的主导地位[17,66,7],已经提出了许多方法[29,28,35]来有效地微调LM以适应不同的下游NLP任务[77,76]。其中,我们在实验中主要关注以下两种具有代表性的方法进行基准测试:Adapters[64]和BitFit[5]。适配器[34]在每个Transformer层中插入额外的轻量级模块。一个适配器模块一般由一个线性向下投影、一个非线性激活函数、一个线性向上投影和一个残差连接组成[63,64]。[8]提出在微调ConvNets时更新偏置项并冻结其余骨干参数,而不是插入新的模块。BitFit[3]将该技术应用于transformer,并验证了其在LM调谐上的有效性。我们的研究表明,相对于NLP中前面提到的两种成熟的方法,VPT在适应视觉任务的Transformer模型方面提供了更好的性能。

提示学习

提示[50]最初指的是在输入文本前添加语言指令,使预训练的LM能够“理解”任务。在手动选择提示的情况下,GPT-3对下游迁移学习任务具有很强的泛化能力,即使在少量或零次设置下也是如此[7]。除了后续关于如何构建更好的提示文本的工作[70,37]之外,最近的工作提出将提示视为特定于任务的连续向量,并在微调期间通过梯度直接优化它们,即提示调整[48,45,51]。与完全微调相比,它实现了相当的性能,但参数存储减少了1000倍。虽然提示最近也被应用到视觉语言模型中[65,91,39,84,22],但提示仍然局限于文本编码器的输入。由于视觉和语言模式之间的差异,在本文中我们提出:同样的方法是否可以成功地应用于图像编码器?我们是第一个解决这个问题的工作(参见相关的并行工作[69,80,14,2]),并通过跨越多个领域和主干架构的多种识别任务的广泛实验来研究视觉提示的通用性和可行性。

3.方法

我们提出了视觉提示调谐(VPT)来适应大型预训练的视觉变压器模型。VPT在Transformer的输入空间中注入少量可学习的参数,并在下游训练阶段保持主干冻结。总体框架如图2所示。我们首先在3.1节中定义符号,然后在3.2节中正式描述VPT。

图2所示。我们提议的视觉提示调优概述。我们探索了两种变体:(a)向每个Transformer编码器层的输入(VPT-deep)添加一组可学习的参数;(b)只将提示参数插入到第一层的输入(VPTshallow)。在下游任务的训练过程中,只有提示符和线性磁头的参数被更新,而整个变压器编码器被冻结。

3.1知识准备

对于N层的plain Vision Transformer (ViT)[19],将输入图像划分为m个固定大小的patch
\{I_j\in R^{3\times h\times w}|j\in N,1\le j\le m\}h,w是图像patch的高度和宽度。然后,每个patch首先通过位置编码嵌入到d维潜在空间中:

我们表示图像patch嵌入的集合E_i=\{e^j_i\in R^d|j\in N,1\le j\le m\},作为第(i+1)Transformer层(L_{i+1})的输入。加上一个额外的可学习分类令牌([CLS]),整个ViT被表述为:

式中x_i \in R^d表示[CLS]在L_{i+1}输入空间的嵌入。[·,·]表示在序列长度维度上进行叠加和拼接,即
[x_i,E_i]。每一层L_i由多头自注意(MSA)和前馈网络(FFN)以及LayerNorm[1]和残差连接组成。神经分类头用于将最后一层的[CLS]嵌入x_N映射到预测的类概率分布y中。

3.2视觉提示调优(VPT)

给定一个预训练的Transformer模型,我们在嵌入层之后的输入空间中引入一组p维d的连续嵌入,即提示符。在微调期间,只有特定于任务的提示被更新,而Transformer主干被冻结。根据所涉及的Transformer层的数量,我们的方法有两种变体,VPT-shallow和VPT-deep,如图2所示。

图2所示。我们提议的视觉提示调优概述。我们探索了两种变体:(a)向每个Transformer编码器层的输入(VPT-deep)添加一组可学习的参数;(b)只将提示参数插入到第一层的输入(VPTshallow)。在下游任务的训练过程中,只有提示符和线性磁头的参数被更新,而整个变压器编码器被冻结。

VPT-Shallow

提示符仅插入到第一个Transformer层L_1中。每个提示符号是一个可学习的d维向量。p个提示的集合记为P=\{p^k \in R^d|k \in N,1\le k\le p\},浅提示ViT为:

其中,Z_i\in R^{p\times d}表示第i层Transformer计算出的特征,[x_i,Z_i,E_i]\in R^{(1+p+m)\times d}。颜色红色和蓝色分别表示可学习和冻结的参数。值得注意的是,对于ViT,x_N对于提示符的位置是不相关的,因为它们是在位置编码之后插入的,例如,[x_0,P,E_0],[x_0,E_0,P]在数学上是等价的。这也适用于VPT-Deep。

VPT-Deep.

在每个Transformer层的输入空间中引入提示符。对于第(i+1)层L_{i+1},我们将输入可学习提示的集合记为P_i=\{p_i^k \in R^d|k\in N,1\le k \le m\}。深层提示的ViT公式为:

存储视觉提示

VPT在存在多个下游任务时是有益的。我们只需要为每个任务存储学习到的提示和分类头,并重用预训练的Transformer模型的原始副本,从而显著降低了存储成本。例如,给定一个参数为8600万(M)且d = 768的ViT-Base, 50个浅层提示和50个深层提示分别产生
p\times d = 50\times 768 = 0.038M,N\times p\times d = 0.46M的额外参数,分别仅占所有VIT - Base参数的0.04%和0.53%。

4实验

我们评估VPT的下游识别任务与预训练的变压器骨干跨尺度。我们首先在4.1节中描述了我们的实验设置,包括预训练的骨干和下游任务,并简要介绍了其他迁移学习方法。然后,我们在第4.2节中演示了我们的方法的有效性和实用性。我们还系统地研究了不同的设计选择将如何影响性能(第4.3节),从而更好地理解我们的方法。

4.1实验设置

预训练backbone

我们在视觉上实验了两种Transformer架构,vision Transformer (ViT)[19]和Swin Transformer (Swin[52])。本节中的所有主干都是在ImageNet-21k上进行预训练的[16]。我们遵循原始配置,例如分割图像补丁的数量,是否存在[CLS]等。更多细节见附录A。

Baselines

我们将VPT的两种变体与其他常用的微调协议进行了比较:

(a) Full:完全更新所有骨干和分类头参数。

(b)以分类头为重点的方法。他们将预训练的主干作为特征提取器,其权重在调优过程中是固定的:

-线性:只使用线性层作为分类头。

-part -k:微调主干的最后k层,同时冻结其他k层,如[85,88,60,30]所采用。它重新定义了脊柱和分类头的边界。

-MLP-k:使用k层多层感知器(MLP)作为分类头,而不是线性层。

(c)在微调期间更新骨干参数子集或向骨干添加新的可训练参数的方法:

-siddetune[87]:训练一个“侧”网络,并在输入到头部之前在预训练的特征和侧调谐的特征之间进行线性插值。

-Bias[8,5]:只微调预训练主干的Bias项。

-适配器[34,63,64]:插入新的MLP模块与变压器层内部的剩余连接。

下游任务

我们在以下两个数据集上进行实验:

FGVC由5个基准细粒度视觉分类任务组成,包括Cub -200-2011[75]、NABirds[72]、Oxford Flowers[59]、Stanford Dogs[41]和Stanford Cars[23]。如果某个数据集只有公开可用的训练集和测试集,我们将训练集随机分为train(90%)和val(10%),并依赖val来选择超参数。

VTAB-1k[86]是19种不同视觉分类任务的集合,分为三组:自然-包含使用标准相机捕获的自然图像的任务;专业化——包含通过专业设备(如医疗和卫星图像)捕获的图像的任务;结构化——需要几何理解的任务,比如物体计数。VTAB的每个任务包含1000个训练样例。接下来[86],我们使用提供的800-200分割的训练集来确定超参数,并使用完整的训练数据运行最终的评估。我们在三次运行中报告测试集的平均准确度分数。

我们报告了FGVC数据集的平均精度,以及VTAB中三组数据集的平均精度。每个任务的单独结果都在附录D中,以及上述任务的图像示例。

4.2主要结果

表1。VIT-B/16在监督ImageNet-21k上预训练。对于每种方法和每个下游任务组,我们报告了与Full相比(·)的平均测试准确性分数和获胜次数。“Total params”表示所有24个下游任务所需的总参数。“Scope”表示每种方法的调优范围。“额外参数”表示除了预训练的主干和线性头部外,还存在额外参数。除Full方法外,所有方法的结果均为最佳。VPT在24个案例中的20个案例中表现出色,可训练参数明显减少。

表1给出了在4个不同的下游任务组中平均微调预训练的VPT - b /16的结果,并将VPT与其他7个调优协议进行了比较。我们可以看到:

1. 在4个问题类别中的3个(24个任务中的20个)上,VPT-Deep的表现优于Full(表1(a)),同时使用的总模型参数显著减少(1.18× vs. 24.02×)。因此,即使存储不是一个问题,VPT也是一种很有前途的方法,可以在视觉上适应更大的变压器。请注意,这一结果与NLP的可比研究相反,NLP的即时调整匹配,但不超过完全微调[45]。

2. 在所有任务组中,VPT-Deep的性能优于所有其他参数高效调优协议(表1(b,c)),这表明VPT-Deep是存储受限环境中最佳的微调策略。

3. 虽然不如VPT-deep最优,但与表1(b)中的面向头部的调优方法相比,VPT-shallow仍然提供了显著的性能增益,这表明如果存储约束很严重,在部署多任务微调模型时,VPT-shallow是一个值得选择的方法。

不同下游数据大小的VPT

图3所示。在不同下游数据规模上的性能比较,平均跨越5个FGVC任务。VPT-deep与Linear(左)、Adapter(中)和Bias(右)进行了比较。高亮区域显示了VPT-deep与对比方法的精度差异。所有样地均给出了VPT-shallow结果,便于参考。标记的大小与对数尺度中可调参数的百分比成正比。

我们研究了FGVC任务中训练数据大小对准确性的影响(VTAB只有1k个训练样本)。我们将训练数据在10%到80%之间变化,并比较所有方法。同样的预训练ViT-B用于下游训练。每种方法在不同训练数据尺度上的任务平均结果如图3所示。

图3显示,跨数据尺度,VPT-deep优于所有其他基线。深入挖掘,使用较少可训练参数的方法,即VPT, Linear, Adapter, Bias,在低数据区域中占主导地位。然而,当线性和适配器有更多的训练数据可用时,这种趋势就会逆转。相比之下,VPT-deep在训练数据大小上仍然始终优于full。尽管Bias提供了类似的优势,但它仍然略微低于全面的VPT-deep(图3右)。

4.3模型设计变换的消融

我们在有监督的ImageNet-21k预训练的ViT-Base上删除不同的模型设计选择,并在VTAB上进行评估,设置与表1相同。详见附录B。

提示位置

VPT和其他方法之间的一个重要区别是作为Transformer层的输入引入了额外的可学习参数。图5显示了在输入空间中如何以及在何处插入提示的不同选择,以及它们将如何影响最终性能。

图5所示。消融在提示位置。我们在顶部说明了不同的位置选择,并在底部展示了结果。为了便于比较,两条蓝色虚线分别表示默认VPT-deep和VPT-shallow的性能。

Prepend还是Add?与第3.2节中描述的在图像补丁嵌入序列Ei中添加提示不同,另一种选择是直接在这些嵌入中添加提示元素,保持Transformer的输入序列长度与之前相同。虽然这种变体在某些情况下(例如,VTAB-Natural)可以与Full竞争,但在深度和浅度设置中,它的性能通常落后于默认的Prepend。关于这一现象的更多讨论见附录B。

潜在空间还是像素空间?与其将提示作为潜在向量插入到第一个Transformer层,不如在Eq.(1)中嵌入层之前的像素级别引入提示,即前置像素和连接通道。图5显示了这两种变量的自适应性能下降。例如,在投影层(prependar -pixel)之前添加浅提示的准确率分数,与VTAB-Natural上嵌入空间(Prepend)的默认添加相比,下降了6.9%。如果我们将一个新的通道连接到输入图像(Concat-channel),则性能会进一步恶化(甚至在VTAB-Natural上高达30个精度分数下降)。这些观察结果表明,提示符更容易在transformer的潜在输入空间中学习浓缩的任务相关信号。

提示符的长度

与完全调优相比,这是为VPT调优所需的唯一额外超参数。为了便于参考,我们还删除了另外两个附加超参数的基线,即Mlp的层数和Adapter的减少率。如图6所示,不同任务的最佳提示长度不同。值得注意的是,即使只有一个提示,VPT-deep仍然明显优于其他两个基线,并且与VTABStructured和Natural的完全微调相比仍然具有竞争力甚至更好。

图6所示。消融提示长度。我们改变VPT-deep的提示数量,并显示每个VTAB子组的平均结果。为方便参考,还显示了每个任务的平均最佳VPT-deep结果。

5分析与讨论

可视化

图9显示了VTAB中3个任务(SVNH [58], EuroSAT [32], Clevr/count[38])的xN的t-SNE[55]可视化,即在最后一个Transformer层之后和分类头之前嵌入[CLS],每个任务一个子群。所有的图都表明,在使用比Full更少的参数的情况下,VPT-deep支持线性可分表示。我们还观察到,与仅为第一层的输入插入提示的VPT-shallow相比,每个Transformer层(VPT-deep)的额外可调参数提高了性能。有趣的是,在Clevr/count(图9(c))上,与VPT-shallow和Linear不同,VPT-deep和Full恢复了任务的底层流形结构(对图像中的物体进行计数,而不是街道号码或景观识别)。

图9所示。来自测试集的3个VTAB任务的最终[CLS]嵌入x_N的t-SNE可视化,见表1。VPT可以在不更新主干参数的情况下产生线性可分特征

6结论

我们提出了视觉提示调谐,一种新的参数有效的方法来利用大视觉变压器模型进行广泛的下游任务。VPT在输入空间中引入特定于任务的可学习提示,使预训练的主干保持固定。我们表明,VPT可以超越其他微调协议(通常包括完全微调),同时显著降低存储成本。我们的实验也提出了关于不同预训练目标的视觉变形器的微调动力学,以及如何有效地转移到更广泛的视觉识别任务的有趣问题。因此,我们希望我们的工作将启发未来关于如何最好地挖掘视觉中大型基础模型潜力的研究。

参考资料

论文下载(2022 ECCV)

https://arxiv.org/abs/2203.12119

代码地址

GitHub - KMnP/vpt: ❄️🔥 Visual Prompt Tuning [ECCV 2022] https://arxiv.org/abs/2203.12119

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

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

相关文章

Vitis AI 迁移学习并部署在DPU中

目录 1. 本文目的 2. ResNet18介绍 3. 迁移学习 4. 量化配置文件 5. 模型编译: 6. 总结 1. 本文目的 使用迁移学习的方法,将预训练的resnet18模型从原来的1000类分类任务,改造为适应自定义的30类分类任务。 2. ResNet18介绍 ResNet1…

【面试题】java后端开发实习(含答案)

java后端开发实习生-常见面试题 1)JDK,JRE,JVM的关系 JDK JRE java开发工具JRE JVM java核心类库 2)String类的常用方法 1.关于字符串获取方面 length 获取长度charAt 获取指定索引的字符indexOf 获取字符所在的索引位置lastIndexOf 获取字符所在…

总结一期Jvm

Jvm 数据结构 内存/结构 JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块内存地址,它主要由年轻代和老年代还有持久代组成,所有new出来的对象都存储在该区域. 栈就是暂存数据的地方,每个线程包含一个栈区,栈存放在一级缓存中&a…

自恋型人格的症状和起因,自恋型人格测试和应对方法

自恋型人格,是一种非常复杂的病态人格,最突出的特点就是对自我价值感的夸大,也就是说,自恋型人格常有一种自大的情绪,习惯外界的赞美,认为自己是独一无二的存在。这种极度的自我膨胀是自恋型人格非常典型的…

Google Ads广告为Demand Gen推出生成式AI工具,可自动生成广告图片

谷歌今天宣布在Google Ads广告中为Demand Gen活动推出新的生成人工智能功能。 这些工具由谷歌人工智能提供支持,广告商只需几个步骤即可使用文本提示创建高质量的图片。 这些由人工智能驱动的创意功能旨在增强视觉叙事能力,帮助品牌在YouTube、YouTube…

数字安全实操AG网址漏洞扫描原理与技术手段分析

在数字化世界的大舞台上,网络安全如同守护者一般,默默保卫着我们的虚拟疆界。当我们在享受互联网带来的便利时,一场无形的战争正在上演。黑客们利用各种手段试图攻破网站的安全防线,而防守方则依靠先进的技术和策略来抵御入侵。其…

云计算时代:SFP、SFP+、SFP28、QSFP+和QSFP28光纤模块详解

随着数据中心的快速发展和云计算的广泛应用,高速、高效率的光纤网络传输成为关键需求。在众多光纤模块中,SFP、SFP、SFP28、QSFP和QSFP28是最常见的几种类型。本文将为您详细解析这几种光纤模块之间的区别,帮助您更好地了解和选择适合自己需求…

网络安全之文件上传漏洞(上篇)(技术进阶)

目录 一,什么是文件上传漏洞?文件上传漏洞会造成什么危害? 二,文件上传靶场upload-labs闯关 Pass-01 Pass-02 Pass-03 Pass-04 Pass-05 Pass-06 Pass-07 ​Pass-08 Pass-09 Pass-10 总结 一,什么是文件上传漏洞&…

Java:优先级队列(堆)

一、初识【堆】 1、什么是【优先级队列】? 前面的文章我们介绍过队列,队列是一种先进先出的数据结构,但是,在某些情况下,操作的数据可能需要有一个优先级来获取数据,例如优先获取队列中最大的元素&#xf…

【linux】动静态库的使用与制作

本章节是基础IO的的最后一个话题!! 目录 浅谈一下动静态库:动静态库的制作与使用:静态库:怎么办:方法一:方法二:方法三:方法四: 是什么:为什么: 动态库&#…

YOLOv8-pose针对视频实时提取打印对应关节点序号及坐标

因为我在找如何提取YOLOv8-pose的关键点的时候,大多都是针对静态图像,视频直接套用不太行,因此就改进了一下,如下: 初步代码: import torch # 导入PyTorch库 import cv2 as cv # 导入OpenCV库并重命名为…

同态加密原理解析

目录 1.数学介绍2.使用多项式环进行加密2.1 私钥和公钥的产生2.2 加密2.3 解密 3.同态计算3.1 同态加法3.2 同态乘法 1.数学介绍 同态加密方案基于一个难以计算的问题Ring Learning with Errorsred。这些方案中的数据在加密和未加密时都用多项式表示。 这里举一个简单的多项式…

主打熟人双向社交,UXLINK 如何用群组打造超强社交生态

社交,作为最强 Web3 流量入口 Web2 世界里,社交产品总是最具想象力。全球使用 Facebook 系列产品的日活用户(DAP)均值近 30 亿人,占全球人口的 1/3。然而,加密货币用户仅约有 4.2 亿,占全球人口…

C++ 核心编程(1)

c面向对象编程 1.内存分区模型 程序运行前为代码区和全局区。程序运行后才有栈区和堆区。。 1.1 程序运行前 #include<iostream> #include <bits/stdc.h> using namespace std; /*全局区全局变量、静态变量、常量 */ //全局变量 int g_1 20; int g_2 30; //const…

力扣刷题学习(跟随视频学着刷)

使用入门 视频链接 【手把手带你刷Leetcode力扣&#xff5c;各个击破数据结构和算法&#xff5c;大厂面试必备技能【已完结】-哔哩哔哩】 https://b23.tv/vIcRT61 时空复杂度 时间&#xff1a; 空间&#xff1a;主要有O(1)和O(n)两种&#xff0c;只用计算开辟的内存&#xff…

三种类的免费SSL证书

目前主流的三种域名证书&#xff1a;单域名证书、多域名证书、通配符泛域名证书。 这三种类型的证书根据用户域名的不同情况&#xff0c;应用场景也大不相同。 单域名证书应用场景&#xff1a; 针对于有且只有一个单独域名的单位&#xff0c;使用单域名证书是刚好能够满足需求…

DRF学习之三大认证

一、认证 1、自定义认证 在前面说的 APIView 中封装了三大认证&#xff0c;分别为认证、权限、频率。认证即登录认证&#xff0c;权限表示该用户是否有权限访问接口&#xff0c;频率表示用户指定时间内能访问接口的次数。整个请求最开始的也是认证。 &#xff08;1&#xff…

【JavaEE网络】TCP/IP协议:细节与应用

目录 TCP/IP协议协议格式传输层重点协议UDP协议UDP协议端格式 UDP的特点TCP协议TCP协议端格式 TCP的特点 TCP/IP协议 协议格式 应用层&#xff08;后端开发必知必会&#xff09;&#xff1a;这一层也有很多现成的协议&#xff08;后面还会重点介绍HTTP协议&#xff0c;这是做…

命令执行漏洞【2】vulhub远程命令执行漏洞复现

1.vulhub安装启动靶场环境 &#xff08;1&#xff09;s2-061开启靶场 &#xff08;2&#xff09;s2-059开启靶场 2.漏洞复现 &#xff08;1&#xff09;s2-061漏洞复现 github获取漏洞利用工具 开始利用 &#xff08;2&#xff09;s2-059漏洞复现 在linux特有临时目录/tmp下…

C#实现TFTP客户端

1、文件结构 2、TftpConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace TftpTest {public class TftpConfig{}/// <summary>/// 模式/// </summary>public enum Modes{…