【自然语言处理七-经典论文-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/

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

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

相关文章

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层&#xff08;数据链路层功能概述&#xff09; 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容&#xff0c;今天开始我们要进入数据链路层的学习&#xff0c;如果有小伙伴对物理层的内容感兴趣的话&#…

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链

目录 前言 分析 EXP SignedObject打二次反序列化 打TemplatesImpl加载恶意字节码 前文&#xff1a;【Web】浅聊Jackson序列化getter的利用——POJONode 前言 题目环境:2023巅峰极客 BabyURL 之前AliyunCTF Bypassit I这题考查了这样一条链子&#xff1a; BadAttributeV…

C语言 自定义类型:结构体

目录 前言 一、结构体类型 1.1 结构体的声明 1.2 结构体变量的创建和初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 二、结构体的对齐 2.1 对齐规则 2.2 内存对齐的原因 2.3 修改默认对齐数 2.4 结构体传参 三、结构体实现位段 3.1 位段的内存分配 3.2 段的跨平…

39 openlayers 对接地图图层 绘制点线面圆

前言 这里主要是展示一下 openlayers 的一个基础的使用 主要是设计 接入地图服务器的 卫星地图, 普通的二维地图, 增加地区标记 增加 省市区县 的边界标记 基础绘制 点线面园 等等 测试用例 <template><div style"width: 1920px; height:1080px;" &g…

软考高级:软件架构评估概述和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

计算机网络:分层体系结构

计算机网络&#xff1a;分层体系结构 基本分层概述各层次的任务物理层数据链路层网络层运输层应用层 数据传递过程分层体系常见概念实体协议服务 基本分层概述 为了使不同体系结构的计算机网络都能互联&#xff0c;国际标准化组织于 1977 年成立了专门机构研究该问题。不久他们…

鸿蒙一次开发,多端部署(十一)交互归一

对于不同类型的智能设备&#xff0c;用户可能有不同的交互方式&#xff0c;如通过触摸屏、鼠标、触控板等。如果针对不同的交互方式单独做适配&#xff0c;会增加开发工作量同时产生大量重复代码。为解决这一问题&#xff0c;我们统一了各种交互方式的API&#xff0c;即实现了交…

基于ssm的勤工助学管理系统+数据库+报告+免费远程调试

项目介绍: 基于ssm的勤工助学管理系统。Javaee项目&#xff0c;ssm项目。采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybatisplus VuelayuiMaven来实现。有管理员和老…

国内AI领域的新星:Kimi与GPT的较量,谁主沉浮?

近期&#xff0c;国产大型人工智能模型Kimi频繁成为众多行业领袖讨论的焦点。这些来自不同领域的专家和领袖们&#xff0c;似乎都在对Kimi的性能和能力给予高度评价。在这两年国产AI模型的快速发展中&#xff0c;尽管市场上涌现出了许多新面孔&#xff0c;但真正能够在技术和应…

Tomcat整体架构

一、Tomcat介绍 开源的java web应用服务器&#xff0c;实现了java EE的部分技术规范&#xff0c;如 java servlet、javaServer Pages、 JavaWebSocket等&#xff1b; 核心&#xff1a;http服务器Servlet容器 二、Tomcat两个核心功能 1、处理Socket连接&#xff0c;负责网络字节…

jQuery 其他方法

文章目录 1. jQuery 拷贝对象2. 多库共存3. jQuery 插件3.1 瀑布流插件3.2 图片懒加载技术3.3 bootstrap JS 组件3.4 bootstrap JS 插件*案例--todolist布局 1. jQuery 拷贝对象 拷贝过去的对象属性值会覆盖原来对象的值。 **浅拷贝&#xff1a;**简单数据类型就直接被拷贝&am…

第十三届蓝桥杯物联网试题(省赛)

做后感悟&#xff1a; OLED显示函数需要一直显示&#xff0c;所以在主函数中要一直循环&#xff0c;为了确保这个检错功能error只输出一次&#xff0c;最好用中断串口进行接收数据&#xff0c;数据收完后自动进入中断函数中&#xff0c;做一次数据检查就好了&#xff0c;该开灯…

正基塑业邀您参观2024长三角快递物流供应链与技术装备展览会

2024.7.8-10 杭州国际博览中心 科技创新&#xff0c;数字赋能 同期举办&#xff1a;数字物流技术展 新能源商用车及物流车展 电商物流包装展 冷链物流展 展会介绍 2024长三角快递物流供应链与技术装备展览会&#xff08;杭州&#xff09;&#xff0c;于2024年7月8-10日在杭州…

QGraphicsView 实例3地图浏览器

主要介绍Graphics View框架&#xff0c;实现地图的浏览、放大、缩小&#xff0c;以及显示各个位置的视图、场景和地图坐标 效果图: mapwidget.h #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QLabel> #include <QMouseEvent> #include <QGraphicsView&…

Tomcat 服务器部署和 IDEA 配置 Tomcat

(一) Tomcat 简介 Tomcat是Apache软件基金会一个核心项目&#xff0c;是一个开源免费的轻量级Web服务器&#xff0c;支持Servlet/JSP少量JavaEE规范。 概念中提到了JavaEE规范&#xff0c;那什么又是JavaEE规范呢? JavaEE: Java Enterprise Edition,Java企业版。指Java企业级…

【Java初阶(二)】分支与循环

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; 目录 1.前言2.顺序结构3.分支循环3.1if语句3.2switch语句 4.循环结构4.1while循环4.2 break和continue4.3 for循环4.4 do while循环 5.输入输出5.1输出5.2输…

三级数据库技术知识点(详解!!!)

1、从功能角度数据库应用系统可以划分为表示层、业务逻辑层、数据访问层、数据持久层四个层次&#xff0c;其中负责向表示层直接传送数据的是业务逻辑层。 【解析】表示层负责所有与用户交互的功能;业务逻辑层负责根据业务逻辑需要将表示层获取的数据进行组织后&#xff0c;传…

提升Midjourney风格化的三个技巧

1. 引言 在前篇博文中&#xff0c;我们详细讲述了Midjourney的新功能风格参考的一些基础使用方法&#xff0c;事实上我们可以通过控制参数和提示权重进行更多的自定义操作&#xff0c;在本文中&#xff0c;我将向大家介绍我在网上搜集到的一些提升风格化效果的三个技巧。 闲话…

阿里云服务器租用一年多少钱?2024年最新阿里云租用价格

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

NC 现金流量查询 节点 多账簿联查时,根据所选择的列来判断明细和现金流量联查按钮是否可用,根据添加列选择监听事件处理。

NC 现金流量查询 节点 多账簿联查时&#xff0c;根据所选择的列来判断明细和现金流量联查按钮是否可用&#xff0c;如下图的情况&#xff1a; 在现金流量查询界面UI类的initTable(QueryConditionVO conVO)方法中添加列选择监听事件即可&#xff0c;如下&#xff1a; // 列监听…