【自然语言处理七-经典论文-attention is all you need】

然语言处理七-经典论文-attention is all you need

  • 摘要
    • 原文译文
    • 小结
  • 1:引言
    • 原文译文
    • 小结
  • 2:背景
    • 原文译文
    • 小结
  • 3:模型架构
      • 原文译文
      • 小结
    • 3.1 编码器和解码器
      • 原文译文
      • 小结
    • 3.2 注意力
      • 原文译文
      • 小结
      • 3.2.1 缩放点积注意力
        • 原文
        • 总结
      • 3.2.2 多头注意力
        • 原文
        • 小结
      • 3.2.3 模型中用到的几种注意力
        • 原文
        • 总结
    • 3.3 位置前馈网络
      • 原文
      • 小结
    • 3.4 嵌入层和softmax
      • 原文
      • 总结
    • 3.5 位置编码
      • 原文
      • 小结&补充
  • 4 什么用自注意力
    • 原文
    • 小结
  • 5 训练
    • 5.1训练数据和批处理
      • 原文
      • 小结&补充
    • 5.2 硬件配置和训练时长
      • 译文
    • 5.3 优化器
      • 译文
    • 5.4 规范化
      • 译文
      • 小结&补充
  • 6 训练结果
    • 6.1 机器翻译
      • 译文
    • 6.2 不同的参数模型
      • 译文
    • 6.3 英语成分分析
  • 结论
    • 译文
  • 参考资料

alttention is all you need 是提出经典模型transformer的论文,作为基础模型transformer,重要性不言而喻,本文引字英文论文,并提炼和总结要点。
论文原文: attentin is all you need
本文按照论文源结构,分部分来讲述该论文

摘要

原文译文

之前流行的转录模型主要是基于具有一个编码器encoder和一个解码器decoder的神经网络,这些神经网络一般是基于复杂的循环神经网络和卷积神经网络,encoder和decoder之间通过注意力机制来关联起来。我们本次提出了一个简单的模型,transformer模型,它只需要基于注意力机制。这个模型在两个机器翻译上的表现比之前的模型都好的多,特别是在并行化以及训练时间方面。我们的模型在WMT 2014 英译德的任务上获得了28.4的BlEU得分,比以往的所有成果还搞上2.0个BLUE得分。在WMT 2014 英译法的翻译任务上,我们的单模型的训练只使用了8 个GPU 训练了3.5天。同时这个模型可以很好的泛化到其他英语类任务上。

小结

开头就介绍自己的模型的显著特征,模型解决的问题,以及模型的厉害之处

1:引言

原文译文

这篇论文之前呢,序列模型和转录问题的解决主要依靠RNN、LSTM和GRU模型,此后,在这上面做了很多努力,不断的突破序列模型和编码器-解码器的能力。
这些递归模型通常沿着输入和输出的位置对计算进行计算。位置与对应于计算中的时间步,它们会生成一系列隐藏状态ht,ht的是由前面的隐藏状态ht−1和位置t输入生成的。这种序列性质从根本上就限制了训练过程中的并行化,并且限制了在处理长序列的输入时又收到了内存的限制。最近也有很多工作,通过一些技巧显著的提高了计算效率和模型的性能。但是顺序计算的这个限制没有从根本上解决

注意力机制作为序列建模和转换模型的一个组成部分,已经成了比较认可的一部分,它使得模型能够处理出入或者输出中的长依赖。然而,大部分情况下,这种注意力机制还是与循环网络结合使用。
我们本次提出了Transformer模型,这是一种避免循环网络的模型架构,完全依赖注意力机制,并且可以处理整个输入和输出的全局依赖。
Transformer更加并行化,在8台P100 GPU上接受了12个小时的培训后,翻译的质量已经可以达到不错的水平。

小结

提出一直以来模型的存在问题,序列化,不能并行,memory过短等问题,说明了自己的transfomer模型能够解决该问题,更高的并行性,且效果很不错。

2:背景

原文译文

基于GPU的计算也是以减少顺序计算为目标。ByteNet和ConvS2S,它们都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将任意输入或输出位置的信息关联起来所需要的操作,对于ConvS2S来说是线性的,对于ByteNet来说是对数的。这使得学习远距离位置之间的依赖关系更加困难。在transformer中,这是一个常数级的操作作,代价是使用了平均注意力加权位置,我们用多头注意力来抵消这种影响,如第3.2节所述。

自注意,有时也称为内部注意,是一种将序列中不同位置联系起来的注意机制。自注意力机制已经成功地用于各种任务,比如文本摘要等任务。
端到端记忆网络基于递归注意力机制,而不是序列对齐的递归机制。它已经被证明了在一些语言问答类和语言模型类的任务方面表现很好。

据我们所知,Transformer是第一个完全依靠自关注来计算其输入和输出的关系,而不使用序列对齐的RNN或CNN。在下面的部分中,我们将详细描述transformer和自注意力机制的应用,并讨论其相对于其他几个模型的优势。

小结

简单描述了transformer模型的完全使用自注意力实现机制来解决之前模型遇到的问题

3:模型架构

这部分是重点

原文译文

大多数转录模型都具有编码器-解码器结构。这里,编码器输入序列(x1,…,xn),连续输出序列
z=(z1,…,zn)。对于每一个给定的z,解码器一次输出一个元素的符号序列(y1,…,ym)。在每一步,模型都是自回归的,在生成下一个符号时,将上一个时间步的生成作为下一个时间步的输入。
下面是模型的架构图
在这里插入图片描述
Transformer的整体架构,编码器和解码器使用多个堆叠的层,包括自注意力、基于位置的全连接层等,如图1的左半部分和右半部分所示。

小结

给出了一个很清晰的架构图,transformer也是编码器和解码器架构,堆叠了多层,解码器和编码器有连接部分

3.1 编码器和解码器

原文译文

编码器:编码器由N=6个相同块组成。每块有两个子层,第一子层是多头自注意层,第二层是简单的位置全连接前馈网络。
每个子层都有残差连接,又加上层归一化。也就是说,每个子层的输出是LayerNorm(x+Sublayer(x)),其中Sublayer(x)是子层输出。为了简化残差链接的操作,整个模型的层包括embeding层,全部都用了相同的维度 dmodel为512

解码器:解码器也是由N=6个相同块堆叠组成。除了跟编码器相同的两个子层,解码器还有第三个子层,用于执行对编码器的多头注意力。与编码器类似,我们使用残差连接围绕每个子层,然后进行层归一化。我们还修改了自注意力子层,以防止解码器关注后续位置。这种屏蔽,确保了对位置i的预测可以仅取决于在小于i的位置处的已知输出。

小结

总体介绍了编码器和解码器的构造

3.2 注意力

原文译文

注意力函数可以被描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是矢量。输出是值的加权和,其中的每个加权值都是通过查询和键计算相似度的一个函数获得的。
在这里插入图片描述

小结

总体介绍注意力怎么实现的

3.2.1 缩放点积注意力

这段是接上文介绍注意力函数

原文

我们用的是“缩放点积注意力”(图2表示)。输入的查询和键的维度都是dk,以及值的维度dv。我们计算查询和键的内积,然后除以的dk的平方根,并取softmax函数后计算出权重,然后把这些权重 作用于值。
在工程实践中,我们是同时计算一组查询的注意力分数的,这些查询被打包在一起的是Q矩阵,键和值也被打包到矩阵K和V中。我们计算
公式为:
在这里插入图片描述
两个最常用的注意函数是加性注意[和点积(多重加性)注意。点积注意力与我们的算法相同,只是我们这多除了个缩放因子根号dk
.加性注意力使用具有一个单隐藏层的前馈网络来计算注意力。虽然两者在理论复杂性上相似,但点积注意力是在实践中速度更快、效率更高,因为它可以使用高度优化的方法来实现矩阵乘法代码。
对于小的dk值,这两种机制的表现相似,dk比较大,又不做缩放处理的时候,加性注意力的表现优于点积注意力。我们怀疑,dk比较大的情况下,点积增长的数量级会很大,在做softmax的时候,又会进一步缩放这种差距(大的值趋近于1,小的值趋近于0),这种情况下,梯度就会很小。同时为了抵消这种影响,我们缩放了一下,除了根号dk

总结

介绍了两种注意力函数,同时说明了论文中使用这种注意力的原因。

3.2.2 多头注意力

原文

我们发现,不使用dmodel维度的键、值和查询来一次性的注意力函数计算,不如线性层学习到的键、值和查询投影到一个到低维度dk和dv上,然后执行h次,效果更好。线性投射出来的多组不同的键、值和查询,并行执行注意力函数,生成dv维度的输出值。这些输出被连接起来并再次投影,从而产生最终输出,如如上面的图2(Figure 2)所示
多头的注意力能够注意到不同位置的不同注意。单头注意力的话是做不到的。

在这里插入图片描述
上面就是多头注意力的一个表示,需要学习的参数矩阵就是这些:

在这里插入图片描述
在这里插入图片描述
我们实际是用了h为8,也就是8个并行的头。其中dk=dv=dmodel/h = 64,由于是降维的操作,所以即便是8个头,也和单个头的计算代价差不多。

小结

说明了使用多头注意力的原因,以及如何使用多头注意力

3.2.3 模型中用到的几种注意力

原文

transformer用了几种不同的注意力:

  1. encoder-decoder之间层。查询是来自于decoder的上一层的输出,查询和键来自于encoder的输出。这样就使得decoder中每个输出都能够关注到输入中的所有位置。这种encoder-decoder之间的注意力是模仿了经典的注意力。
  2. encoder中的自注意力层。在这个自注意力层中,查询、键、值都来自于同一个位置的输入,也是上一个层的输出。每一个位置的都可以关注到上一层输出的所有位置的输入。
  3. 同样的,在decoder中的自注意力层,每隔位置的键、值和查询来自同一个输入,它关注包括其自身在内所有的序列。需要注意的是,decoder应该只让他关注当前输入左侧的信息,在具体实现上,是我们在缩放点积注意力的时候,增添了mask操作,赋值给待处理位置右侧的值一些特别大的负数值(设置成负无穷),这样在softmax的之后,值就趋近于0,避免它产生影响。
总结

介绍了架构图中的三种注意力

3.3 位置前馈网络

原文

除了注意力子层,我们的编码器和解码器中的每个层都包含一个全连接的前馈网络,输入的每个位置的网络都是相同的。这
由两个线性层组成,其间有ReLU激活函数。公式可以表示成下面:
FFN(x)=max(0,xW1+b1)W2+b2
不同位置上全连接是相同的,不同层之间的参数不统。除了线性层,也可以用两个核大小为1的两个卷积层实现。输入和输出的维度dmodel=512,第一个线性层维度dff=2048。

小结

两个线性层,维度变化是这样的,512->2048->512

3.4 嵌入层和softmax

原文

与其他序列转录模型类似,我们使用学习来将输入和输出的token,嵌入到维度为dmodel的向量。我们还使用的线性变换和softmax函数来将解码器输出转换为预测的下一个输出的概率。在在我们的模型中,嵌入层之间和softmax之前的线性层共享相同的权重矩阵,权重乘上√dmodel
下面给出表1:里面给出几种不同的网络模型的对比,最大路径长度、每层复杂性和最小顺序操作数。其中,n是序列长度,d是表示维数,k是卷积核的大小,r是受限自注意中邻域的大小。
表1

总结

模型对比

3.5 位置编码

原文

由于我们的模型不包含递归和卷积,为了使模型能够使用序列的顺序信息,我们必须给token注入一些关于的相对或绝对位置的信息。为此,我们在编码器和解码器的底部加入了位置编码,他们跟embeding层具有相同的维度dmodel以便于他们可以互相加总。位置编码是可以有不同选择的。
在我们的模型中,我们使用正弦和余弦函数完成:
在这里插入图片描述
其中pos是位置,i是维度。也就是说,位置编码的每个维度对应于正余弦曲线。波长是从2π到10000·2π的几何级数。我们
选择这个函数,是因为它可以让模型很容易地学会相对位置,**因为对于任何固定偏移k,PEpos+k可以用PEpos的位置编码线性投影去的。**我们还尝试使用可以学习的位置嵌入,并发现两个版本结果基本相同(见表3第(E)行)。我们选择了正弦曲线
因为在训练期间,它可以允许模型外推到比遇到的序列长度更长的序列长度。

小结&补充

上面讲相对位置投影,不太清清楚,下面的公式推导可以看出是如何解决的:
在这里插入图片描述

4 什么用自注意力

原文

这个部分从不同的角度讲自注意力层与经常用到从一个变成sequence到另外一个变成sequence的RNN和CNN的对比。使用自注意力主要从三个方面考虑。
一个是每一层的计算复杂度,另一个是计算的并行度,这个指标可以用序列中顺序操作的最小数量级来衡量。第三个在模型中相关依赖的路径长度是关键性的难点问题,前向和后向信号路长度往往是影响学习相关性的关键因素。任意输入和输出序列之间的位置越短,越容易学习到长序列的依赖关系。因此我们第三方面选择对比不同网络中任意输入输出序列位置的最长关联路径。

如表1所示,自关注层以常数级别的量可以连接所有位置,而RNN需要O(n)个顺序操作。在计算复杂度方面,当序列长度n小于表示维度d,注意力比RNN要快的多,最常见的情况是机器翻译中使用的句子表示,如单词片段和字节对表示。为了提高计算性能,在很长的序中,自注意可以被限制为只考虑大小为r的邻域,输入序列以相应的输出位置为中心。这将增加最长路径增长到O(n/r)的路径长度。我们会在未来的工作中进一步研究这种方法。
单卷积核维度为k (k < n)的单卷积层无法实现所有输入和输出位置信息的连接,所以在卷积kernel是连续的情况下,需要O(n/k)个卷积层堆叠,如果是带空洞的,则需要O(logk(n)) 层。卷积层的训练成本通常比RNN层更高。分离卷积可以降低计算复杂度到O(k · n · d + n · d
2)。但是即使是k=n,一个分离的卷积层的复杂度,也相当于一个自注意力层加前馈网络层的复杂度。

自注意力层可以产生了更多可解释的模型。我们在模型中检查注意力分布,并且在附录中给出示例和讨论。不仅仅能够学习到不同任务的注意力,甚至可以表现出与语义和语法相关的行为。

小结

对于表1的解释

5 训练

这部分是训练方法的

5.1训练数据和批处理

原文

我们是在标准的WMT2014英语-德语数据集上进行训练的,这个数据集包括大约450万个句子byte-pair对。句子采用字节对编码进行编码,源-目标词汇表中共享大约37000个标记。对于英语-法语,使用了更大的WMT2014英语-法语数据集,由3600万个句子组成,并将标记分割为32000词汇。句子对按近似的序列长度排列在一起。每个训练批都包含一组句子对,其中包含大约25000个源标记和25000个目标标记。

小结&补充

介绍训练数据。
其中byte-pair的分割方法是byte-pair,是指用词根进行切割的方法。

5.2 硬件配置和训练时长

译文

在一台机器上使用8 NVIDIAP100 GPU上训练了模型,使用的超参数在论文中已经介绍过了,每个训练步长大约需要花费0.4秒的时间,基本模型总共训练了10万步或12个小时。对于大模型,步长时间为1.0秒,大模型训练了30万步(3.5天)。

5.3 优化器

译文

我们用了Adam的优化器,参数设置为β1 = 0.9, β2 = 0.98 e是10-9,在训练过程中,学习率是根据下面的公式变化的:
在这里插入图片描述
对应于第一个warmup_steps训练步长,学习率线性增加,在后续步长中,学习率随着步长的平方根成正比例下降,其中,warmup_steps =4000

5.4 规范化

译文

我们训练中用了三种规范化。
表2

**残差 dropout:**在每个子层的输出都用了dropout,这个操作是放在归一化之前。同时在编码器-解码器的嵌入过程和位置编码加总后也有Dropout机制,我们用的dropout率是0.1

label 平滑 在训练时,我们用了lable smoothing值0.1,这个对于可信度来说是有损害的,虽然模型增加了一些不确定性,但是提高了正确率和BLUE分数

小结&补充

这里的lable smoothing 0.1是指softmax之后,概率为0.1就认为是正确的。

6 训练结果

6.1 机器翻译

译文

在WMT2014英德翻译任务中,Transformer (big)比之前报告的最佳模型(包括集成)高出2.0多个BLEU,获得BLEU分数为28.4。该模型的配置列于表3的底部。在8个P100 GPU 上进行训练需要3.5天。基本模型也超过了所有之前发布的模型和集合,训练成本也大幅度缩减。

在WMT2014年英法翻译任务中Transformer (big)获得了BLEU分值为 41.0分,优于之前发布的所有其它模型,训练成本降低 1/4。

在WMT2014英德翻译任务中,Transformer (big)比之前报告的最佳模型(包括集成)高出2.0多个BLEU,获得BLEU分数为28.4。该模型的配置列于表3 的底部。在8个P100 GPU 上进行训练需要3.5天。甚至基本模型也超过了所有之前发布的模型和集合,训练成本也大幅度缩减。
在WMT2014年英法翻译任务中Transformer (big)获得了BLEU分值为 41.0分,优于之前发布的所有其它模型,训练成本降低 1/4。大模型训练英法翻译任务用到的drop out率是0.1
对于基本模型,我们使用最后5个检查点进行平均而获得的单个模型,每隔10分钟写一次。对于大型模型,我们对最后20个检查点进行了平均。我们用了beam search,集束宽度是4惩罚因子α=0.6,这些超参数是我们在实验后选择的。推理的时候,我们认为输出的最大长度是输入长度+50,有可能终止的话,就提前终止。

6.2 不同的参数模型

译文

为了评估transformer中不同组件的重要性,我们改变了基本模型的参数,并对这些不同的模型在英语到德语的翻译任务上做了评估,这些参数和评估被记录在了表3中
说明下表3:这是Transformer架构的各个不同版本。未列出的值与基本模型的值相同。模型所有指标都在英语到德语翻译开发集newstest2013上测试的。列出来的PPL是根据我们的词片编码计算的,不应该与单个词的词的进行对比。
表3

我们用的beam search的设置在上面已经描述过了,但是没有checkpoint做平均计算。最后的结果记录表3中
表中A这行,是改变了attention的数量,可以看到单个或者过多的头,结果都不如基础模型好
表中B这行,是降低了键的维度,结果更差。这可能也是在提示我们合适的函数,一个比点积更为精密的函数可能更管用。
表中C和D,说明了更大的模型更好一些,更高点的dropout率防止过拟合方面更好些
表中E,我们把位置嵌入从sin函数换成了可以学习的位置嵌入,结果跟基础模型差不多

6.3 英语成分分析

为了评估Transformer是否可以推广到其他任务,我们对英语成分分析这个任务进行了实现。这项任务提出了具体的挑战:输出受制于强大的结构约束,并且比输入要长很多。此外,基于RNN的序列 的模型在小数据的情况下还不能达到最先进的结果。

我们(WSJ)部分(这是中训练语料)训练了一个4层的transformer ,大约4万条训练语句。我们还在半监督环境下对其进行了训练,使用较大的高置信度和BerkleyParser语料库,大约有1700万条语句。在只使用WSJ的情况下,1.6万的词汇,在半监督的情况下3.2万的词汇。

我们只进行了少量的实验,在第22节开发集上,dropout、attention和residual这些参数都跟第5.4节设置的一样、learning rate和beam size,所有其他参数与英译德基础翻译模型保持不变。在推断过程中,我们将最大输出长度增加到输入长度 +300。我们对只有WSJ的和半监督的设置都使用了beam size 21和惩罚因子0.3 。
表4

表4中我们的结果显示,尽管缺少具体的任务微调,模型仍然表现得十分出色,除了RNN外,产生的结果比以前报道的所有模型都好

与RNN sequence-to-sequence模型相比,即使只在WSJ的4万句子训练集上进行训练,Transformer也比BerkeleyParser更出色。

结论

译文

这次的序列转录模型完全基于attention,替代了编码器和解码器架构中的循环神经网络,完全使用了多头的自注意力。
对于翻译任务来说,transformer比之前的架构模型训练都更快。在WMT2014 英语翻译德语和英语翻译法语的任务上,模型的表现很好,超过了之前所有的模型。
我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到文本以外的注意力机制,比如有效地处理大量输入和输出的任务,诸如图像、音频和视频处理等。在生成过程中使用更少的顺序(而非并行)执行是我们的另一个研究目标。
transformer模型的代码在https://github.com/tensorflow/tensor2tensor上,详情可以参考这个

参考资料

本论文是相对简洁,有个老外有详细的解说版,如下:
英文解释资料: https://jalammar.github.io/illustrated-transformer/

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

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

相关文章

Git命令及GUI基本操作

不习惯使用Git命令的可移步下面Git GUI基本操作 Git 常用命令 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看本地所有分支 git commit -am "init" 提交并且加注释 git remote add orig…

美国socks5动态IP代理如何提升网络效率?

在探讨美国socks5代理动态IP的奥秘之前&#xff0c;我们需要先深入理解其背后的基本概念和原理。Socks5代理是一种先进的网络协议&#xff0c;它像一位中转站&#xff0c;默默地帮用户转发网络请求。它让网络流量得以通过代理服务器传输&#xff0c;进而隐藏用户的真实IP地址。…

仿牛客网开发笔记

01.用到的 一些 核心技术 1 Spring Framework Spring Core IOC 、AOP > 管理对象的一种思想 IOC > 面向对象的管理思想 AOP > 面向切面的管理思想Spring Data Access 》访问数据库的功能 Transaction、Spring MyBatis Transaction 》管理事务Spring MyBat…

人、机中的幻觉和直觉

对于人类而言&#xff0c;幻觉和直觉是两种不同的心理现象。幻觉是一种错误的感知或体验&#xff0c;而直觉是一种在没有明显依据的情况下产生的直观认知。这两种概念在心理学和认知科学中具有不同的意义和研究对象。 人类幻觉是指个体在感知或体验上出现的错误&#xff0c;即看…

大型语言模型(LLM):当今最大品牌背后的沉默劳动力

揭秘LLM&#xff1a;语言模型新革命&#xff0c;智能交互的未来趋势 在快节奏的数字时代&#xff0c;大型语言模型&#xff08;LLM&#xff09;已悄然成为许多领先品牌的支柱。 在这篇文章中&#xff0c;我们将深入探讨大型语言模型&#xff08;LLM&#xff09;如何彻底改变行业…

yolov8数据集制作——labelimg

一、为什么我们选择用labelimg标注yolov8数据集 它可以标注三种格式的数据 1 VOC标签格式&#xff0c;保存为xml文件。2 yolo标签格式&#xff0c;保存为txt文件。3 createML标签格式&#xff0c;保存为json格式。二、我们为什么不用labelimg标注yolo数据集 因为它只能标注…

面试算法-107-二叉搜索树迭代器

题目 实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个…

【计算机组成】计算机组成与结构(四)

上一篇&#xff1a;【计算机组成】计算机组成与结构&#xff08;三&#xff09; &#xff08;7&#xff09;存储系统 计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾问题。 两级存储:cache-主存、主存-辅存(虚拟存储体系) 局部性原理 ◆ 局部性…

Linux最常用基本指令合集(基本指令,这一篇就够了)

目录 听说点赞的UU会撞大运哦&#xff01;&#xff01;&#xff01; 基本指令&#xff1a; ls指令&#xff1a; cd指令&#xff1a; makdir指令&#xff1a; cat指令&#xff1a; rm指令&#xff1a; mv指令&#xff1a; cp指令&#xff1a; nano指令&#xff1a; m…

初始Java篇(JavaSE基础语法)(4)(数组)(万字详解版)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 数组的创建及初始化 数组的创建 数组的初始化 数组的使用 遍历数组 数组是引用类型 基本类型变量与引用类型变量的区别 引用变量 认识 …

Java学习笔记 | Java基础语法 | 03 | 流程控制语句

文章目录 0 前言1.流程控制语句1.1 流程控制语句分类1.2 顺序结构 2.判断语句2.1 if语句1. if语句格式1练习1&#xff1a;老丈人选女婿练习2&#xff1a;考试奖励 2. if语句格式2练习1&#xff1a;吃饭练习2&#xff1a;影院选座 3. if语句格式3练习1&#xff1a;考试奖励 2.2 …

开源表单工作流引擎好用吗?

如果想提升办公协作效率&#xff0c;可以用什么样的平台软件实现&#xff1f;在竞争越来越激烈的社会中&#xff0c;想要实现高效率的办公&#xff0c;可以一起了解低代码技术平台以及开源表单工作流引擎。它们的易操作、灵活、简便等优势特点已成为了中小企业喜爱的优势特点。…

前缀和(三)

题目&#xff1a;激光炸弹 1 链接 P2280 [HNOI2003] 激光炸弹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 2.大体思路 先开辟一个全局变量的 s 二维数组&#xff0c;这个二维数组开成 s [ 5010 ] [ 5010 ] &#xff0c;这个是为了&#xff0c;能够将它所给的所有有价值的…

linux命令学习——sort

sort可以对文本文件进行“排序”&#xff0c;比如-n可以对文本&#xff0c;按照首行字母数字顺序排序 -r参数可以对排序结果进行反转 -u参数可以对查看结果去重

笔记—学习【立创】如何使用示波器—捕捉波形

如何使用示波器的信号触发功能 在工程实践中&#xff0c;经常要测量一些不连续的波形。例如&#xff0c;USART、SPI、IIC通讯&#xff0c;只有在通讯时才会产生相应的波形&#xff0c;如果示波器的触发模式没有选择好的话&#xff0c;我们是看不到这个波形的。 切换触发模式 …

CTK插件框架学习-新建插件(02)

CTK插件框架学习-源码下载编译(01)https://mp.csdn.net/mp_blog/creation/editor/136891825 开发环境 window11、vs17、Qt5.14.0、cmake3.27.4 开发流程 新建ctk框架调用工程&#xff08;CTKPlugin&#xff09; 拷贝CTK源码编译完成后的头文件和库文件到工程目录&#xff0…

Apache Hive的部署与体验

一、Apache Hive概述 什么是分布式SQL计算&#xff1f; 以分布式的形式&#xff0c;执行SQL语句&#xff0c;进行数据统计分析。Apache Hive是做什么的&#xff1f; 很简单&#xff0c;将SQL语句翻译成MapReduce程序&#xff0c;从而提供用户分布式SQL计算的能力。传统MapRed…

尽可能使用清晰、统一的方式初始化所有对象:列表初始化。【C++】

不管是为了统一性&#xff0c;还是避免发生窄化转换&#xff0c;尽可能使用初始化列表。 说明哪些对象可以使用列表初始化&#xff1f;代码演示 说明 C11 引入了列表初始化&#xff08;也称为统一初始化或初始化列表&#xff09;&#xff0c;它是一种使用花括号 {} 来初始化对…

java数据结构与算法刷题-----LeetCode451. 根据字符出现频率排序

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. hash统计出现次数后排序2. 桶排序 1. hash统计出现次数后排序…

高性能 MySQL 第四版(GPT 重译)(二)

第四章&#xff1a;操作系统和硬件优化 你的 MySQL 服务器的性能只能和它最弱的环节一样好&#xff0c;而运行 MySQL 的操作系统和硬件通常是限制因素。磁盘大小、可用内存和 CPU 资源、网络以及连接它们的所有组件都限制了系统的最终容量。因此&#xff0c;你需要仔细选择硬件…