Attention Is All Your Need论文翻译

0.摘要

这个统治序列转换模型是基于复杂循环或者卷积神经网络,它包含编码器和解码器。表现最好的模型也通过注意力机制来连接编码器和解码器。我们提出了一个新的简单网络架构——Transformer,它仅仅是是基于注意力机制,完全免去递推和卷积。在两个机器翻译任务的实验表明,这些模型在质量上更好,同时更好的并行性和需要的训练时间显著减少。我们的模型在WMT 2014英翻德的任务上实现了28.4 BLEU,比现有的最好的结果(包括ensembles)提高了2 BLEU。在WMT 2014英翻法任务中,我们的模型在8个GPU上训练了3.5天后,建立了一个新的单模型最新BLEU分数为41.8,这是文献中最好模型的训练成本的一小部分。我们通过成功地应用Transformer到英语选区用大量有限地训练数据分析,发现Transformer可以很好地泛化到其他任务上。

1.引言

循环神经网络、特别是长短期记忆和门控神经网络,已经被稳定地建立在序列模型和转换问题(比如语言模型和机器翻译)的最新方法中。此后,大量的精力继续推动循环语言模型和编码-解码架构的界限。

循环模型通常沿着把输入和输出序列的符号位置进行计算。将位置和计算时间中的步骤进行对其,它们产生一系列隐藏状态ht,作为前一个隐藏状态ht-1和位置t输入的一个函数。这个固有的顺序性质阻止训练样本中的并行性,这在更长的序列长度上是至关重要的,因为内存限制限制了样本间的批处理。最近工作通过因数分解技巧和条件计算在计算效率上已经实现了显著的进步,与此同时提升了后者的模型性能。但是,根本的顺序计算限制仍然存在。

注意力机制已经成为各种任务中引人入胜的序列建模和转换模型的一个必要的部分,允许依赖建模,而不考虑它们在输入输出序列上的距离。但是,除了一些例子中,这样的注意力机制被用来与一个循环网络结合。

在这项工作中,我们提出了Transformer,这是一个回避循环并且完全依赖注意力机制去绘制输入和输出间的全局依赖关系的模型架构。Transformer允许显著的更多并行性并且在8块P100GPU上被训练只要12小时就可以在翻译质量上达到一个最先进的水平。

2.背景

减少序列化计算的目标也是为可扩展神经元GPU——ByteNet和ConvS2S奠定基础,它们都使用卷积神经网络作为基本构建块,并行计算所有输入输出位置的隐藏表示。在这些模块中,被要求关联两个任意输入或输出位置的信号的操作数量随着位置间距离的增长而增长,对于ConvS2S是线性增长而对于ByteNet是对数增长。这使得去学习两个远距离位置的依赖关系更加困难。在Transformer中,这被减少到一个恒定的操作数量,尽管其代价是由于平均注意力加权位置而减少有效分辨率,我们在3.2节中描述用一个多头注意力来抵消的影响。

自我注意力有时又叫内部注意力,这是一个注意力机制,是将单个序列不同位置联系起来以计算一个序列表示的注意力机制。自我注意力已经被成功地运用到不同地任务中,包括阅读理解,抽象总结,文本蕴含和学习任务无关的句子表示。

端到端的记忆网络是基于一个循环注意力机制而不是序列对齐递归,并且在简单语言问答和语言模型任务中表现很好。

但是,据我们所知,Transformer是第一个完全依赖自注意力去计算它的输入输出表示的转换模型,而没有使用序列对齐RNN或者卷积。在接下来的小结中,我们会描述Transformer,激励自我注意力和讨论它相对于[17]、[18]、[9]的优势。

3.模型架构

大部分竞争的神经序列转换模型有编码-解码结构。这里,编码器映射了一个符号表示的输入序列(x1,x2,x3,…,xn)到一个持续表示序列z=(z1,z2,…,zn)。给定向量z,解码器然后会产生一个符号输出序列(y1,y2,….,ym),每次一个元素。每一步这个模型是自动回归的,当产生下一个时,将之前生成的符号作为额外的输出。

图片1:Transformer的模型架构

Transformer遵循这个整体架构,对编码器和解码器使用堆叠自关注和逐点、全连接层,分别出现在图片1的左右两部分。

3.1编码器和解码器堆栈

编码器:编码器是由6个相同层的堆栈组成。每一层有两个自层。第一个子层是一个多头自关注机制,并且第二个子层是一个简单的,逐点的,全连接前向网络。我们在两个子层周围采用残差连接,然后进行层归一化。那就是,每个子层的输出是LayerNorm(x+Sublayer(x)), 其中Sublayer(x)是子层本身实现的函数。为了促进这些残差连接,模型中的所有子层和嵌入层,都会产生维度为d=512的输出。

解码器:这个解码器也是有6个相同层的堆栈组成。除了每个编码层中两个子层,解码器插入第三层,它在编码器堆栈的结果上执行多头注意力。与编码器类似,我们在每个子层周围采用残差连接,然后进行层归一化。我们也在解码器堆栈上修改自注意子层,以防止位置关注后续位置。这种掩蔽与输出嵌入偏移一个位置的事实相结合,确保对于位置i的预测仅仅依赖于小于i位置的已知输出。

3.2注意力

注意力函数可以被描述为将查询和一组键值对映射到输出,这里的查询,键,值和输出都是向量。输出被计算为值的加权和,其中赋每个值的权重是由查询相应键的兼容性函数计算的。

图片2:(左边)缩放的点积注意力,(右边)多头注意力由多个并行运行的注意力层组成

3.2.1 缩放点积注意力

我们称我们特别注意力为“缩放点积注意力”(如图2)。这个输入包含了维度为dk的查询和键,和维度为dv的值。我们使用所有的键计算查询的点积,将每个键除以根号dk,然后应用softmax函数去获得值上的权重。

事实上,我们同时计算一组查询上的注意力函数,并将它们打包成一个矩阵Q。键和值也被一起打包到矩阵K和V中。我们计算输出矩阵为:

两个最常用的注意力函数是加性注意力和点积(乘法)注意力。点积注意力和我们算法相同,除了缩放因子1/根号dk。附加注意力使用具有一个单隐藏层的前向反馈网络计算兼容性函数。尽管这两个在理论复杂度上相似,点积注意力事实上更快更节省空间,因为它可以使用高度的矩阵乘法代码实现。

尽管对于较小值的dk,两个机制地表现相似,附加注意力优于点积注意力,而无需针对较大的dk值进行缩放。我们怀疑,对于较大的dk值,点积的幅度会增大,从而推动softmax函数到它极小的梯度区域中。为了抵消这种音响,我们将点积缩放1/根号dk。

3.2.2多头注意力

我们发现使用不同的学习线性投影到dk,dk和dv维度h次是有益的,而不是用dmodel维度的键,值和查询来执行单个注意力函数。然后,我们对于这些查询,键和值的投影版本的每一个并行地执行注意力函数,产生dv维度的输出值。它们被连接并且再次投影,导致最终的值,如图2所示。

多头注意力允许这个模型共同关注来自不同地点不同表示子空间的信息。对于单注意力头,平均会抑制这种情况。

其中投影是参数矩阵

在这个工作中,我们使用了h=8的并行注意力层或者头。对于这些中每一个,我们使用dk = dv = dmodel / h = 64。由于每个头减少的维度,这个总的计算成本与使用全维度的单头注意力是相似的。

3.2.3注意力在我们模型中的应用

Transformer在三个方面使用多头注意力:

在“编码-解码注意”层中,这个查询来自之前的解码层,并且内存键和值来自编码器的输出。这允许解码器中的每个位置去参与输入序列的所有位置。这模仿序列到序列模型中典型的编码-解码注意力机制,如。

编码器包含自我注意力层。在一个自我注意力层中,所有的键、值和查实训来自同一个地方,在这个例子中,是编码器先前层的输出。编码器的每个位置可以关注编码器上一层的所有位置。

相似地,解码器中自注意力层允许解码器中每个位置关注解码器中达到并包含该位置的所有位置。我们需要去防止解码器中的左向信息流,以保留自回归属性。我们通过屏蔽(设置负无穷)softmax输入中所有与非法连接相对应的值来实现缩放点积注意力的内部。如图2。

3.3位置式前反馈网络

除了注意力子层,在我们编码-解码器中的每一层包含了一个全连接前向反馈网络,这被分别且相同地应用到每个位置。这是由两个线性变换组成,中间有一个ReLu激活。

尽管不同位置的线性变换是相同的,它们从一层到另一层用不同的参数。另一个描述这个的方式是内核大小为1的两个卷积。输入输出的维度是dmodel=512,并且内部层有dff=2048的维度。

3.4嵌入和softmax

与其他序列转换模型相似,我们使用学习嵌入去把输入标记和输出标记转换为维度dmodel的向量。我们使用学习嵌入去把输入标记和输出标记转换为维度dmodel的向量。我们还使用常用的学习线性转换和softmax函数去把解码输出转换为预测下一个标记的可能性。在我们的模型中,我们在两个嵌入层和预softmax线性转换之间共享同样的权重矩阵,类似于[30]。在嵌入层中,我们将那些权重乘以根号dmodel。

表格1:对于不同层类型的最大路径长度,每层复杂度和序列操作的最小数量。N是序列长度,d是表示维度,k是卷积核大小并且r是受限自注意力中领域的大小。

3.5位置编码

因为我们的模型不包含递归或卷积,为了使模型利用序列的顺序,我们必须投入一些有关序列中标记的相关或者绝对位置的信息。为此,我们把“位置编码”添加到在编码和解码栈底部的输入嵌入中。这个位置编码有着和嵌入相同的维度dmodel,以至于这两个可以被求和。有许多位置编码的选择,有学习的,有固定的。

在我们工作中,我们使用不同频率的sin和cos函数。

其中,pos是位置,i是维度。那是,位置编码的每个维度对应于正弦函数。波长形成从2Π到1000·2Π的几何级数。我们选择这个函数因为我们假定它会允许模型去轻松学习关注相关位置,因为对于任意固定的偏差k,PEpos+k可以被表示为PEpos的线性函数。

我们还尝试使用学习的位置嵌入,并且发现这两个版本产生几乎相同的结果(看表格3行E)。我们选择正弦版本,因为它可能允许模型去推断比在训练期间遭遇的序列长度更长的序列长度。

4 为什么是自注意力

在这个部分,我们把自注意力层的各种方面与循环层和卷积层进行比较,这些层通常被用于将符号表示的一个可变长度序列(x1,x2,..,xn)映射到另一个等长序列(z1,z2,...,zn),其中 xi, zi ∈ Rd,例如典型序列转换编码器或者解码器中的隐藏层。随着激励我们使用自注意力,我们考虑三个需求。

一是每层的总计算复杂度。另一个是可以并行化的计算量,这是以所需最小顺序操作数量来衡量。

第三个是在网络中远程范围依赖之间的路径长度。学习远程依赖是许多序列转换任务中的关键挑战。一个影响学习这样依赖关系能力的关键因素是前向后向信号必须在网络中传播的路径长度。在输入输出序列中任何位置组合之间的路径越短,那么学习远程依赖关系也就越容易。

如表1所提到的,一个自关注层用一个固定的数量的序列执行操作连接所有位置,而一个循环层需要O(n)的序列操作。就计算复杂度而言,当序列长度n比表示维度d更小时,自注意力层比循环层更快,这通常是机器翻译中最新的模型使用的句子表示的情况,例如word-piece和byte-pair表示。为了提高长序列任务的计算性能,自注意力可能被限制去考虑输入序列中以相关输出位置为中心的大小为r的领域。这会增加最大路径长度到O(n/r)。我们计划在未来的工作中进一步研究这个方法。

一个内核宽度为k<n的单卷积层没有连接所有对的输入输出位置。做这样的事需要连续内核的一堆O(n/k)卷积层,或者在扩张卷积下的O(logk(n)),从而增加网络中任意两个位置之间最长路径的长度。卷积层通常比循环层更加贵k倍。但是,可分离卷积大大降低了复杂度达到O(knd + nd^2)。但是,即使k = n,一个可分离卷积的复杂度与自我注意力层和逐点前反馈层的组合相等,我们的模型中采取了这个方法。

作为附带的好处,自我注意力会产生更多可解释模型。我们检查模型中的注意力分布并且展示和讨论附录中的例子。个人注意力头不仅清晰学习执行不同的任务,而且许多其他注意力头似乎表现出关于句子语法和语义结构的行为。

5 训练

这个部分描述了我们模型的训练制度。

5.1 训练数据和批处理

我们使用标准WMT2014英翻德数据集上训练,该数据集包含大约450万句子对。句子是使用byte-pair编码的,这是一个大约由37000标记的共享源目标词汇。对于英翻法,我们使用包含3600万个句子组成的更大的WMT2014英翻法数据集,并且把标记分隔成32000个单词片段词汇表。

5.2硬件和时间表

我们在一个装有8块NVIDIA P100 GPUs上训练我们的模型。对于我们使用整篇论文中描述的超参数基本模型,每个训练步骤花了0.4s。我们训练这个基本模型花了共计100000步骤或者12h。对于我们的大模型(表3的底线所描述的),步长时间花了1秒。这个大模型被训练了300000步(3.5天)。

5.3优化器

我们使用beta1 = 0.9, beta2 = 0.98 和 c = 10e-9的Adam优化器。我们根据公式在训练过程中改变学习率。

这与第一个warmup_steps训练步骤线性地增加学习率相一致,然后与步骤数平方根的倒数成比例地减少。我们使用warmup_steps = 4000。

5.4正则化

我们在训练期间采用三种类型的正则化:

表2:Transformer在英翻德和英翻法newtest2014测试中以小部分训练成本实现了比先前最新的模型更好的BLEU分数

剩余辍学率: 我们应用dropout到每个子层的输出上,在它被添加到子层输入和被标准化之前。此外,我们将dropout应用到编码和解码堆栈中的的嵌入和位置编码综合。对于基准模型,我们使用Pdrop = 0.1的比率。

标签平滑:在训练期间,我们使用了值c = 0.1的标签平滑。这损害了困惑度,随着模型学习变得更加的不确定,但是提升了准确度和BLEU分数。

6结果

6.1机器翻译

在WMT 2014 英翻德的翻译任务上,一个大转换模型(表2Transformer(大)),比之前已报道过最好的模型(包括集成)表现要好2.0BLEU以上,然后建立了一个全新的最新28.4BLEU 分数。该模型的配置列于表3的最后一行。在8块P100GPU上训练了3.5天。甚至我们的基准模型超过了所有之前已经发布的模型和集成,训练成本是任何竞争模型的一小部分。

在WMT2014英法翻译任务中,我们的大模型获得了41.0的BLEU分数,超过了之前所有已发布的单个模型,比之前最新模型的训练成本的1/4还要少。这个被训练英法翻译的Transformer(大)模型使用辍学率Pdrop = 0.1,而不是0.3。

对于基准模型,我们使用通过平均最后5个检查点而获得的单个模型,这些检查点以10分钟的间隔写入。对于大模型,我们对最后20个检查点进行平均。我们使用波束搜索,波束大小为4,长度惩罚alpha = 0.6。这些超参数在开发集上的实验后被选择。我们将推理期间设置最大输出长度为输入长度+50,但是尽可能提前终止。

表2总结了我们的结果,并且把我们翻译质量和训练成本与文献中的其他模型架构进行了比较。我们通过将训练时间、使用的GPU数量以及每块GPU持续的单精度浮点容量的估计相乘来估计用于训练模型的浮点操作数量。

6.2模型变化

为了评估Transformer不同组件的重要性,我们用不同的方式改变了我们的基准模型,测量了在开发集newstest2013上英德翻译性能的变化。我们使用上一届中描述的波束搜索,但是没有平均检查点。我们在表三中呈现这些结果。

表3:Transformer架构上的变化。未列出的价值等同于哪些基准模型。所有指标是在英德翻译开发集newstests2013上。根据我们字节对编码,列出的困惑度是每个单词并且不应该与每个单词困惑度进行比较。

在表3行A中,正如3.2.2描述的,我们改变了注意力头和注意力键值维度的数量,使得计算量恒定。尽管弹头注意力比最好的设置要差0.9BLEU,但是头数过多质量也会下降。

在表3行B,我们观察到,下降的注意力键大小dk损害了模型质量。这里表明,确定兼容性并不容易并且一个更加复杂的兼容性函数与点积相比可能是有益的。我们进一步观察行C和行D发现,正如预期的,更大的模型是更好的,并且辍学是有助于避免过拟合的。在行(E),我们用学习位置嵌入取代我们正弦位置编码,并且观察到几乎与基本模型等同的结果。

6.3英语选区解析

为了评估这个Transformer是否可以泛化到其他任务,我们在英语选取解析上进行实验。这个任务提出了具体的挑战:输出受到强大结构约束并且明显比输入更长。进一步,RNN序列到序列模型不能够在小数据情况下获得最先进的结果。

我们在Penn Treebank的WSJ上,部分训练一个维度dmodel=1024的4层transformer,大约4万个训练句子。我们还在半监督环境中对其进行训练,使用了更大的高置信度和BerkleyParser语料库,其中包含大约1700万个句子。我们仅在WSJ设置中使用了1.6万个标记的词汇表,并且在半监督设置中使用了3.2万个标记的词汇表。

我们执行仅仅一小部分实验区选择dropout、注意力和残差(第5.4节),学习率和波束大小在2.2节开发集,所有其他参数与英语到德语基本翻译模型保持不变。在推理过程中,我们增加最大输出长度到输入长度+300。对于仅WSJ和半监督设置,我们使用大小为21的波束和apha=0.3。

表4:Transformer泛化很好到英语选区解析(结果见WSJ的23节)

表4中我们的结果表明,尽管缺乏特定任务的调整,我们的模型表现出奇的好,比之前报告的所有模型(循环神经网络语法除外)产生了更好的结果。

与 RNN 序列到序列模型 [37] 相比,即使仅在 WSJ 40K 句子训练集上进行训练,Transformer 的性能也优于 BerkeleyParser [29]。

7总结

在这个工作中,我们呈现了Transformer,这是第一个完全基于注意力的序列转导模型,用多头自我注意力取代在编码-解码架构中最常使用的推导层。

我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。减少一代的顺序是我们的另一个研究目标。

我们用于训练和评估模型的代码可在 https://github.com/tensorflow/tensor2tensor 上找到。

致谢 我们感谢Nal Kalchbrenner和Stephan Gouws富有成效的评论、更正和启发。

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

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

相关文章

C语言——函数(第五讲)(上)

C语言——函数&#xff08;第五讲&#xff09; 前言函数的概念库函数标准库和库函数库函数的使用方法 ⾃定义函数形式形参和实参形参和实参的关系 前言 Hello,各位C语言的小伙伴们&#xff0c;大家过年好&#xff0c;我是莹莹。停更差不多一个月了&#xff0c;都是懒惰作怪&am…

9 个管理 Windows 硬盘的最佳免费磁盘分区软件 [2024 排名]

管理分区可能是一项具有挑战性的任务。当您想到删除、缩小、移动、磁盘分区或合并分区等方面时&#xff0c;您会认为它们是很难做到的事情。然而&#xff0c;虽然 Windows 自己的磁盘管理可以处理大部分问题&#xff0c;但它无法处理管理分区的所有方面。 这时候优质的磁盘管理…

python-游戏篇-初级-超级画板

文章目录 开发环境要求运行方法PyCharmVScode 代码main.pytools.py 效果 开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 7、Windows 10。Python版本&#xff1a;Python 3.7.1。开发工具&#xff1a;PyCharm 2018。Python内置模块&#xff…

秒懂百科,C++如此简单丨第十九天:动态规划

目录 动态规划的初步理解 求最短路径数 洛谷 P1002 过河卒 题目描述 输入样例 输出样例 思路 AC Code 动态规划的初步理解 什么是动态规划&#xff1f;最直白的理解就是动态的规划。 那高级一点的理解呢&#xff1f;就是每时每刻都拿着一个小本本&#xff0c;也就是…

「优选算法刷题」:和可被K整除的子数组

一、题目 给定一个整数数组 nums 和一个整数 k &#xff0c;返回其中元素之和可被 k 整除的&#xff08;连续、非空&#xff09; 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1&#xff1a; 输入&#xff1a;nums [4,5,0,-2,-3,1], k 5 输出&#xff1a;7 解释&…

C语言-----函数功能实现---strcpystrlen

1.函数功能参数介绍 该函数的功能就是把一个字符串复制到另外的一个数组&#xff0c;包括\0&#xff1b; 2.首先我们要明确字符串的复制也是包括最后的\0的&#xff1b; void mystrcpy(char* dest, char* src) {while (*src!\0){*dest *src;dest;src;}*dest *src;} int mai…

HGAME 2024 WEEK2 WP

文章目录 WEBWhat the cow say?Select More Coursesmyflask CryptomidRSAmidRSA revengebackpackbackpack revengebabyRSA奇怪的图片plus MISC我要成为华容道高手ek1ng_want_girlfriendezWord龙之舞 回老家了&#xff0c;初七晚上才回去&#xff0c;估计week3前几天不怎么能做…

类加载过程介绍

一、类的生命周期 类被加载到jvm虚拟机内存开始&#xff0c;到卸载出内存为止&#xff0c;他的生命周期可以分为&#xff1a;加载->验证->准备->解析->初始化->使用->卸载。 其中验证、准备、解析统一称为链接阶段 1、加载 将类的字节码载入方法区中&#xf…

docker (一)-简介

1.什么是docker Docker 是一个开源的应用容器引擎&#xff0c;由于docker影响巨大&#xff0c;今天也用"Docker" 指代容器化技术。 2.docker的优势 一键部署&#xff0c;开箱即用 容器使用基于image镜像的部署模式&#xff0c;image中包含了运行应用程序所需的一…

Selenium实战教程系列(二)---元素定位

Selenium webdriver能够模拟人对浏览器进行操作的前提是界面元素的定位。元素的定位可以说是Selenium自动化脚本的基础。这一小节笔者将介绍如何在selenium中进行元素的定位。 定位元素的方法 Selenium中提供了以下定位元素的方法&#xff1a; 首先看一个HTML文件 test_page.…

(14)Hive调优——合并小文件

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一&#xff1a;insert overwrite (推荐) 3.2.2 方式二&#xff1a;concatenate 3.2.3 方式三&#xff…

OpenMVG(特征匹配、照片组重建点云、GPS位置信息、GMS)

目录 1 图像的特征匹配 2 图像中提取GPS位置信息 2.1 写入GPS信息到图像中 2.2 读取带有GPS的图像 3 SIFT/AKAZE/AKAZE_MLDB特征提取对比 4 GMS Filter 5 将球形全景图转换为6个透视视图 6 照片组重建点云 1 图像的特征匹配 #include "openMVG/features/feature.…

Python面向对象学习小记——面向过程VS面向对象

【面向过程就好比你是一个工人&#xff0c;你得亲自去做一个个任务 面向对象就好比你一个包工头&#xff0c;你可以差遣你下面的工人去做】

【网站项目】228高校教师电子名片系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

PowerShell搭建vue起始项目

Windows PowerShell搭建vue起始项目 搜索PowerShell,以管理员身份运行。 复制文件夹路径 cd 到这个文件夹位置 命令行创建项目&#xff1a;vue create 项目名 这里写自己的项目名就行&#xff0c;我写的yeb vue create yeb 创建成功后是这样的 有颜色的就是选中的&#xff…

“恶意提起知识产权诉讼行为的法律规制”主题研讨活动成功举办

随着我国社会经济的迅速发展以及创新型国家、知识产权强国建设的不断深入,知识产权在社会生活中正发挥着越来越重要的作用。特别是对于广大市场主体而言,知识产权已经不仅是一种私权利,更成为商业竞争中非常重要的一种手段,由此引发了大量的知识产权诉讼纠纷。此类纠纷中,既有权…

C++ new 和 malloc 的区别?

相关系列文章 C new 和 malloc 的区别&#xff1f; C内存分配策略​​​​​​​ 目录 1.引言 2.区别 2.1.申请的内存分配区域 2.2.类型安全和自动大小计算 2.3.构造函数和析构函数的调用 2.4.异常处理 2.5.配对简便性 2.6.new 的重载 2.7.关键字和操作符 3.总结 1.引…

HACKTHEBOX通关笔记——mango(退役)

信息收集 端口扫描 ┌──(root㉿kali)-[~] └─# nmap -sC -sV -A -p- --min-rate10000 10.129.229.185 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-31 20:44 EST Warning: 10.129.229.185 giving up on port because retransmission cap hit (10). Nmap scan …

【微服务】skywalking自定义告警规则使用详解

目录 一、前言 二、SkyWalking告警功能介绍 2.1 SkyWalking告警是什么 2.2 为什么需要SkyWalking告警功能 2.2.1 及时发现系统异常 2.2.2 保障和提升系统稳定性 2.2.3 避免数据丢失 2.2.4 提高故障处理效率 三、 SkyWalking告警规则 3.1 SkyWalking告警规则配置 3.2 …