论文笔记(四十五)Attention Is All You Need

news2024/11/24 8:38:27

Attention Is All You Need

  • 文章概括
  • 摘要
  • 1. 介绍
  • 2. 背景
  • 3. 模型架构
    • 3.1 编码器和解码器堆栈
    • 3.2 Attention
      • 3.2.1 按比例点积Attention
      • 3.2.2 Multi-Head Attention
      • 3.2.3 注意力在模型中的应用
    • 3.3 定位前馈网络
    • 3.4 嵌入与 Softmax
    • 3.5 位置编码
  • 4 为什么 Self-Attention
  • 5. Training
    • 5.1 训练数据和批处理
    • 5.2 硬件和时间表
    • 5.3 优化器
    • 5.4 正则化
  • 6 Results
    • 6.1 Machine Translation
    • 6.2 模型变化
  • 7 Conclusion

文章概括

作者:Ashish Vaswani,Noam Shazeer,Niki Parmar,Jakob Uszkoreit,Llion Jones,Aidan N. Gomez,Łukasz Kaiser,Illia Polosukhin
来源:
原文:https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
代码、数据和视频:https://github.com/tensorflow/tensor2tensor
系列文章目录:
上一篇:
https://blog.csdn.net/xzs1210652636/article/details/134431873
下一篇:



摘要

主流的序列转换模型基于复杂的递归或卷积神经网络,其中包括一个编码器和一个解码器。性能最好的模型还通过注意力机制连接编码器和解码器。我们提出了一种新的简单网络架构–“转换器”(Transformer),它完全基于注意力机制,无需递归和卷积。在两项机器翻译任务上的实验表明,这些模型的质量更优,同时可并行化程度更高,所需的训练时间也大大减少。我们的模型在 WMT 2014 英德翻译任务中达到了 28.4 BLEU,比现有的最佳结果(包括集合)提高了 2 BLEU 以上。在 WMT 2014 英法翻译任务中,我们的模型在 8 个 GPU 上训练了 3.5 天后,单个模型的 BLEU 得分达到了 41.0 分,这只是文献中最佳模型训练成本的一小部分。


1. 介绍

递归神经网络,特别是长短期记忆[12]和门控递归[7]神经网络,已被牢固地确立为语言建模和机器翻译等序列建模和转译问题的最先进方法[29, 2, 5]。自此以后,许多人继续努力推动递归语言模型和编码器-解码器架构的发展[31, 21, 13]。

递归模型通常按照输入和输出序列的符号位置进行计算。将位置与计算时间的步长对齐,它们会生成隐藏状态 h t h_t ht 的序列,作为前一个隐藏状态 h t − 1 h_{t-1} ht1 和位置 t t t 的输入的函数。这种固有的序列性质排除了训练实例内的并行化,而在序列长度较长时,这一点变得至关重要,因为内存约束限制了跨实例的批处理。最近的研究通过因式分解技巧[18]和条件计算[26]显著提高了计算效率,同时也改善了后者的模型性能。然而,顺序计算的基本限制仍然存在。

在各种任务中,注意机制已成为引人注目的序列建模和转导模型的一个组成部分,它可以对依赖关系进行建模,而不必考虑它们在输入或输出序列中的距离[2, 16]。然而,除了少数情况[22]外,这种注意机制都是与递归网络结合使用的。

在这项工作中,我们提出了 Transformer 模型架构,它摒弃了递归,而是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。Transformer 可以大大提高并行化程度,在 8 个 P100 GPU 上只需训练 12 个小时,翻译质量就能达到新的水平。


2. 背景

减少顺序计算的目标也是扩展神经 GPU[20]、ByteNet[15]和 ConvS2S[8]的基础,它们都使用卷积神经网络作为基本构建模块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将两个任意输入或输出位置的信号联系起来所需的运算次数随位置间距离的增加而增加,ConvS2S 为线性增加,ByteNet 为对数增加。这就增加了学习远距离位置间依赖关系的难度[11]。在 Transformer 中,这将被减少到一个恒定的操作数,但代价是由于平均注意力加权位置而降低了有效分辨率,我们在 3.2 节中介绍了多头注意力来抵消这一影响。

自我注意(有时也称为内部注意)是一种注意机制,它将单个序列的不同位置联系起来,以计算序列的表征。自我注意已成功应用于多种任务,包括阅读理解、抽象概括、文本引申和学习与任务无关的句子表征[4, 22, 23, 19]。

端到端记忆网络基于递归注意机制,而非序列对齐递归,在简单语言问题解答和语言建模任务中表现出色[28]。

然而,据我们所知,Transformer 是第一个完全依靠自我注意来计算输入和输出表示而不使用序列对齐 RNN 或卷积的转导模型。在下面的章节中,我们将描述 Transformer,激发自我注意,并讨论它与 [14, 15] 和 [8] 等模型相比的优势。


3. 模型架构

大多数竞争性神经序列转换模型都具有编码器-解码器结构 [5, 2, 29]。在这里,编码器将输入的符号表示序列 ( x 1 , . . . , x n ) (x_1, ..., x_n) (x1,...,xn)映射为连续表示序列 z = ( z 1 , . . . , z n ) z = (z_1, ..., z_n) z=(z1,...,zn)。给定 z z z 后,解码器每次生成一个元素的符号输出序列 ( y 1 , . . . , y m ) (y_1, ..., y_m) (y1,...,ym)。在每一步中,该模型都是自动回归的 [9],在生成下一步时,会消耗之前生成的符号作为额外输入。

图 1 的左半部分和右半部分分别显示了编码器和解码器采用堆叠式自关注和点式全连接层的整体架构。


在这里插入图片描述

图 1:变压器–模型结构。


3.1 编码器和解码器堆栈

编码器: 编码器由 N = 6 N = 6 N=6 层相同的层堆叠组成。每一层都有两个子层。第一个子层是多头自注意机制,第二个子层是简单的位置全连接前馈网络。我们在两个子层的每个周围都采用了残差连接[10],然后进行层归一化[1]。也就是说,每个子层的输出都是 LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x)),其中 Sublayer ( x ) \text{Sublayer}(x) Sublayer(x) 是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都会产生维数为 d m o d e l = 512 d_{model} = 512 dmodel=512 的输出。

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

3.2 Attention

注意力函数可以描述为将一个查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出是以值的加权和来计算的,其中分配给每个值的权重是通过查询与相应键的兼容函数来计算的。

3.2.1 按比例点积Attention

我们将这种特殊的注意力称为 “缩放点积注意力”(图 2)。输入包括查询、维度为 d k d_k dk 的键和维度为 d v d_v dv 的值。我们计算查询与所有密钥的点积,将每个点积除以 d k \sqrt{d_k} dk ,然后应用软最大函数来获得值的权重。


在这里插入图片描述

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


在实践中,我们会同时计算一组查询的注意力函数,这些查询会被打包成一个矩阵 Q Q Q。键和值也被打包成矩阵 K K K V V V。我们计算的输出矩阵为:

在这里插入图片描述

最常用的两种注意力函数是加法注意力[2]和点积(多乘法)注意力。点积注意力与我们的算法相同,只是缩放因子为 1 d k \frac{1}{\sqrt{d_k}} dk 1。加法注意使用单隐层前馈网络计算兼容性函数。虽然两者的理论复杂度相似,但点积注意力在实际应用中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

d k d_k dk 值较小的情况下,这两种机制的表现类似,但在 d k d_k dk 值较大的情况下,加法注意在不缩放的情况下优于点积注意 [3]。我们怀疑,对于较大的 d k d_k dk 值,点积的幅度会变大,从而将 softmax \text{softmax} softmax 函数推向梯度极小的区域(为了说明点积为什么会变大,假设 q q q k k k 的分量是均值为 0、方差为 1 的独立随机变量。那么它们的点积 q ⋅ k = ∑ i = 1 d k q i k i q \cdot k = \sum_{i = 1}^{d_k}q_ik_i qk=i=1dkqiki 的均值为 0,方差为 d k d_k dk)。为了消除这种影响,我们用 1 d k \frac{1}{\sqrt{d_k}} dk 1 来缩放点积。

3.2.2 Multi-Head Attention

我们发现,与其使用 d m o d e l d_{model} dmodel 维度的键、值和查询来执行单一的注意力函数,不如将查询、键和值分别线性投影到 d k d_k dk d k d_k dk d v d_v dv 维度,并将不同的学习过的线性投影进行 h h h 次投影。然后,我们对每个投影版本的查询、键和值并行执行注意力函数,得到 d v d_v dv 维的输出值。如图 2 所示,这些值被串联起来并再次投影,从而得到最终值。

多头注意力允许模型在不同位置共同关注来自不同表征子空间的信息。而在单注意头的情况下,平均化会抑制这一点。

在这里插入图片描述

其中的投影是参数矩阵 W i Q ∈ R d m o d e l × d k , W i K ∈ R d m o d e l × d k , W i V ∈ R d m o d e l × d v 和 W O ∈ R h d v × d m o d e l W_i^Q ∈ \mathbb{R} ^{d_{model}×d_k} , W_i ^K ∈ \mathbb{R}^{ d_{model}×d_k} , W_i ^V ∈ \mathbb{R}^{ d_{model}×d_v} 和 W^O ∈ \mathbb{R} ^{hd_v×d_{model}} WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dvWORhdv×dmodel
.

在这项工作中,我们采用了 h = 8 h = 8 h=8 个并行注意力层,或称为 “头”。其中,我们使用 d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model}/h = 64 dk=dv=dmodel/h=64。由于减少了每个头的维度,总计算成本与全维度的单头注意力相似。

3.2.3 注意力在模型中的应用

Transformer通过三种不同方式实现多头关注:

  • 在 "编码器-解码器attention "层中,查询来自前一个解码器层,而记忆键和记忆值则来自编码器的输出。这使得解码器中的每个位置都能关注输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制,例如 [31, 2, 8]。

  • 编码器包含自注意层。在自注意层中,所有的键、值和查询都来自同一个地方,在这种情况下,就是编码器中上一层的输出。编码器中的每个位置都可以关注编码器上一层的所有位置

  • 同样,解码器中的自关注层允许解码器中的每个位置关注解码器中包括该位置在内的所有位置。我们需要防止解码器中的信息向左流动,以保持自动回归特性。我们通过屏蔽(设置为- ∞ ∞ )软最大输入中对应于非法连接的所有值,在缩放点积关注内部实现了这一点。见图 2。

3.3 定位前馈网络

除了注意力子层外,我们的编码器和解码器中的每一层都包含一个全连接的前馈网络,该网络分别对每个位置进行相同的处理。这包括两个线性变换,中间有一个 ReLU 激活。

在这里插入图片描述
虽然不同位置的线性变换相同,但各层使用的参数不同。另一种描述方法是两个内核大小为 1 的卷积。输入和输出的维度为 d m o d e l = 512 d_{model} = 512 dmodel=512,内层的维度为 d f f = 2048 d_{ff} = 2048 dff=2048

3.4 嵌入与 Softmax

与其他序列转换模型类似,我们使用学习到的嵌入将输入标记和输出标记转换为维数为 d m o d e l d_{model} dmodel 的向量。我们还使用常用的学习线性变换和 softmax 函数,将解码器输出转换为预测的下一个标记概率。在我们的模型中,我们在两个嵌入层和预软最大线性变换之间共享相同的权重矩阵,这与 [24] 类似。在嵌入层中,我们将这些权重乘以 d m o d e l \sqrt{d_{model}} dmodel

3.5 位置编码

由于我们的模型不包含递归和卷积,为了让模型能够利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了 “位置编码”。位置编码的维度 dmodel 与嵌入式编码相同,因此两者可以相加。位置编码有多种选择,包括学习编码和固定编码 [8]。

在这项工作中,我们使用了不同频率的正弦和余弦函数:

在这里插入图片描述

其中, p o s pos pos 是位置, i i i 是维数。也就是说,位置编码的每个维度对应一个正弦波。波长形成一个从 2 π 2π 2π 10000 ⋅ 2 π 10000 \cdot 2π 100002π 的几何级数。我们之所以选择这个函数,是因为我们假设它可以让模型轻松地学习到相对位置,因为对于任何固定的偏移 k k k P E p o s + k PE_{pos+k} PEpos+k 都可以表示为 P E p o s PE_{pos} PEpos 的线性函数。

我们还尝试用学习到的位置嵌入[8]来代替,结果发现两个版本产生的结果几乎相同(见表 3 第(E)行)。我们之所以选择正弦波版本,是因为它可以让模型推断出比训练时遇到的序列长度更长的序列。


表 3:变压器架构的各种变化。未列出的值与基础模型的值相同。所有指标均基于英德翻译开发集 newstest2013。根据我们的字节对编码,列出的困惑度为每字片段的困惑度,不应与每字困惑度进行比较。

在这里插入图片描述



4 为什么 Self-Attention

在本节中,我们将比较自注意层与递归层和卷积层的各个方面,后者通常用于将一个可变长度的符号表示序列 ( x 1 , . . . , x n ) (x_1, ..., x_n) x1,...,xn映射到另一个等长序列 ( z 1 , . . . , z n ) (z_1, ..., z_n) z1,...,zn,其中 x i , z i ∈ R d x_i, z_i∈\mathbb{R}^d xi,ziRd,例如典型序列转换编码器或解码器中的隐藏层。我们使用自注意的动机有三个。

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

第三是网络中长距离依赖关系之间的路径长度。学习长程依赖关系是许多序列转导任务的关键挑战。影响学习此类依赖关系能力的一个关键因素是前向和后向信号必须在网络中穿越的路径长度。输入和输出序列中任意位置组合之间的路径越短,学习长距离依赖关系就越容易[11]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

如表 1 所示,自注意层连接所有位置的连续操作数不变,而递归层则需要 O ( n ) O(n) O(n) 次连续操作。就计算复杂度而言,当序列长度 n n n 小于表示维度 d d d 时,自注意层的速度要快于递归层,机器翻译中最先进的模型所使用的句子表示,如单词片[31]和字节对[25]表示,通常就是这种情况。


表 1:不同层类型的最大路径长度、每层复杂度和最小顺序操作数。n 是序列长度,d 是表示维度,k 是卷积的内核大小,r 是受限自注意邻域的大小。

在这里插入图片描述


为了提高涉及超长序列任务的计算性能,可以限制自我注意的范围,只考虑输入序列中以相应输出位置为中心、大小为 r r r 的邻域。这将把最大路径长度增加到 O ( n / r ) O(n/r) O(n/r)。我们计划在今后的工作中进一步研究这种方法。

核宽 k < n k < n k<n 的单个卷积层无法连接所有输入和输出位置对。在内核连续的情况下,这样做需要堆叠 O ( n / k ) O(n/k) O(n/k) 个卷积层;在扩张卷积的情况下,则需要堆叠 O ( l o g k ( n ) ) O(log_k(n)) O(logk(n)) 个卷积层[15],从而增加了网络中任意两个位置之间最长路径的长度。卷积层的成本通常比递归层高 k k k 倍。然而,可分离卷积[6]将复杂度大大降低到 O ( k ⋅ n ⋅ d + n ⋅ d 2 ) O(k \cdot n \cdot d + n \cdot d^2) Oknd+nd2。即使在 k = n k = n k=n 的情况下,可分离卷积的复杂度也相当于自注意层和点式前馈层的组合,而我们在模型中采用的正是这种方法。

作为附带的好处,自我关注可以产生更多可解释的模型。我们从模型中检查了注意力分布,并在附录中介绍和讨论了一些例子。各个注意力头不仅明显学会执行不同的任务,而且许多注意力头似乎还表现出与句子的句法和语义结构有关的行为。


5. Training

本节将介绍我们模型的训练机制。

5.1 训练数据和批处理

我们在 WMT 2014 英德标准数据集上进行了训练,该数据集包含约 450 万个句子对。句子采用字节对编码[3],源目标共享词汇量约为 37000 个标记。对于英语-法语,我们使用了规模更大的 WMT 2014 英语-法语数据集,该数据集包含 3600 万个句子,并将标记拆分为 32000 个词块词汇[31]。句子对按近似序列长度分组。每个训练批包含一组句子对,其中包含约 25000 个源词块和 25000 个目标词块。

5.2 硬件和时间表

我们在一台配备 8 个英伟达 P100 GPU 的机器上训练模型。对于我们的基础模型,使用本文所述的超参数,每个训练步骤耗时约 0.4 秒。我们总共训练了 100,000 步或 12 个小时的基础模型。对于我们的大型模型(如表 3 底行所述),每步训练时间为 1.0 秒。大型模型的训练时间为 300,000 步(3.5 天)。

5.3 优化器

我们使用了亚当优化器[17], β 1 = 0.9 β_1 = 0.9 β1=0.9 β 2 = 0.98 β_2 = 0.98 β2=0.98 ϵ = 1 0 − 9 \epsilon = 10^{-9} ϵ=109。在训练过程中,我们根据公式改变学习率:

在这里插入图片描述

这相当于在第一个热身 w a r m u p _ s t e p s warmup\_steps warmup_steps训练步数中线性增加学习率,此后学习率按步数的平方反比例递减。我们使用的是 w a r m u p _ s t e p s = 4000 warmup\_steps = 4000 warmup_steps=4000

5.4 正则化

在训练过程中,我们采用了三种正则化方法:

残差滤波 我们对每个子层的输出进行滤波 [27],然后将其添加到子层输入中并进行归一化处理。此外,我们还对编码器和解码器堆栈中的嵌入和位置编码之和进行了滤除。在基础模型中,我们使用 P d r o p , = 0.1 P_{drop}, = 0.1 Pdrop,=0.1 的比率。

标签平滑 在训练过程中,我们使用了标签平滑值 ϵ l s = 0.1 \epsilon _{l_s} = 0.1 ϵls=0.1 [30]。这样做会增加模型的不确定性,从而降低复杂度,但却提高了准确度和 BLEU \text{BLEU} BLEU 得分。

6 Results

6.1 Machine Translation

在 WMT 2014 英译德翻译任务中,大转换器模型(表 2 中的转换器(big))的 BLEU \text{BLEU} BLEU 值比之前报道的最佳模型(包括集合)高出 2.0 以上,达到了 28.4 的新的最先进 BLEU \text{BLEU} BLEU 值。该模型的配置见表 3 底行。在 8 个 P100 GPU 上的训练耗时 3.5 天。即使是我们的基本模型,也超越了之前发布的所有模型和集合,而训练成本只是任何竞争模型的一小部分。


表 2:在英语到德语和英语到法语的 newstest2014 测试中,Transformer 的 BLEU 分数优于之前的先进模型,而训练成本仅为之前的一小部分。

在这里插入图片描述


在 WMT 2014 英语到法语的翻译任务中,我们的大模型获得了 41.0 的 BLEU 分数,超过了之前发布的所有单一模型,而训练成本还不到之前最先进模型的四分之一。为英译法而训练的 Transformer(大)模型使用了 P d r o p = 0.1 P_{drop} = 0.1 Pdrop=0.1,而不是 0.3 0.3 0.3

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

表 2 总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型架构进行了比较。我们通过将训练时间、使用的 GPU 数量和每个 GPU 的持续单精度浮点运算能力的估计值相乘,估算出训练一个模型所使用的浮点运算次数(我们为 K80、K40、M40 和 P100 分别使用了 2.8、3.7、6.0 和 9.5 TFLOPS 的数值)。

6.2 模型变化

为了评估 Transformer 不同组件的重要性,我们以不同方式改变了基础模型,测量了开发集 newstest2013 上英译德性能的变化。我们使用了上一节所述的波束搜索,但没有使用检查点平均法。表 3 列出了这些结果。

如 3.2.2 节所述,在表 3 行(A)中,我们改变了注意力头的数量以及注意力键和值的维度,但计算量保持不变。虽然单头注意力比最佳设置差 0.9 BLEU,但注意力头数过多也会导致质量下降。

在表 3 行(B)中,我们发现减小关注键大小 dk 会降低模型质量。这表明,确定兼容性并不容易,比点积更复杂的兼容性函数可能更有益处。在第(C)行和第(D)行中,我们进一步观察到,正如我们所预期的那样,模型越大越好,而 dropout 对避免过度拟合很有帮助。在第(E)行中,我们用学习到的位置嵌入[8]替换了正弦位置编码,观察到的结果与基础模型几乎完全相同。

7 Conclusion

在这项工作中,我们提出了 “变形器”,这是第一个完全基于注意力的序列转换模型,用多头自我注意力取代了编码器-解码器架构中最常用的递归层。

在翻译任务中,Transformer 的训练速度明显快于基于递归层或卷积层的架构。在 WMT 2014 英译德和 WMT 2014 英译法翻译任务中,我们都达到了新的技术水平。在前一项任务中,我们的最佳模型甚至优于之前报告的所有集合。

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

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

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

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

相关文章

手撕vector的模拟实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Python梯度提升决策树库之lightgbm使用详解

概要 LightGBM是一个快速、分布式、高性能的梯度提升决策树(Gradient Boosting Decision Tree)库,它在机器学习和数据挖掘领域被广泛应用。本文将介绍LightGBM库的安装方法、主要特性、基本功能、高级功能、以及在实际应用中的场景和总结。 安装 首先,需要安装LightGBM库…

【doghead】ubuntu构建libuv

按照官方的文档2024年3月的版本。首先构建libuv 最终构建的还得了test 构建过程 zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/thunderbolt/ayame/zhb-bifrost$ ls Bifrost-202403 README.md draw player-only worker 大神的带宽估计.png zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/…

python学习笔记B-20:序列实战--处理千年虫

将2位数表达的年份&#xff0c;转换为用4位数表达&#xff1a; print("将列表中的2位数年份转换为4位数年份") lst[88,89,90,00,99] print(lst) for index in range(len(lst)):if len(str(lst[index]))2:lst[index] 1900int(lst[index])elif len(str(lst[index]))1…

AI学习指南-人工智能概述

欢迎来到人工智能的奇妙世界&#xff01;如果你是初学者&#xff0c;那么你来对地方了。今天&#xff0c;我们将一起探索人工智能&#xff08;AI&#xff09;的基本概念&#xff0c;看看它是如何分类的&#xff0c;它的应用有哪些&#xff0c;以及未来可能的发展方向。准备好了…

7个策略,让你的可视化大屏打动人心!

要打动人心的可视化大屏&#xff0c;可以采取以下策略&#xff1a; 引人入目的设计&#xff1a; 选择鲜明而吸引人的颜色和视觉效果&#xff0c;使用引人注目的动画和过渡效果&#xff0c;以及吸引眼球的图形和图案设计。通过精心设计的布局和排版&#xff0c;确保信息清晰可…

vivado Aurora 8B/10B IP核(9)- CRC、 Aurora 8B/10B内核的时钟接口端口

CRC 模块提供 16 位或 32 位 CRC&#xff0c;用于用户数据。 Aurora 8B/10B 内核的时钟接口端口 从相邻收发器四边形的时钟Xilinx 实现工具可以根据需要对南北路由和引脚交换到收发器时钟输入进行必要的调整&#xff0c;以将时钟从一个四线到另一个。 重要信息&#xff1a;共…

HTML5实用大全(Part.2)

引言&#xff1a; 哈喽&#xff0c;各位小伙伴们大家好呀&#xff0c;学习了上一篇关于HTML5的文章后&#xff0c;你是否对于入门HTML5有了一定的基础了呢&#xff0c;本篇博客我们将继续学习HTML5的不同标签&#xff0c;跟上队伍&#xff0c;准备出发咯&#xff01; 1.标签之…

RMQ从入门到精通

一.概述与安装 //RabbitMQ //1.核心部分-高级部分-集群部分 //2.什么是MQ 消息队列message queue 先入先出原则;消息通信服务 //3.MQ的大三功能 流量消峰 应用解耦 消息中间件 //&#xff08;1&#xff09;人-订单系统(1万次/S)—> 人 - MQ(流量消峰,对访问人员进行排队) -…

Qt_介绍_环境安装_创建新项目_实现helloworld_坐标_1

文章目录 一、Qt是什么二、Qt的发展史三、Qt支持的平台四、Qt版本五、Qt的优点六、Qt的应用场景七、Qt开发环境&#xff0c;需要按照3个部分1.C编译器&#xff08;gcc,cl.exe....不是Visual Studio&#xff09;2.Qt SDK3.需要有一个Qt的集成开发环境&#xff08;IDE&#xff09…

云服务器+ASF实现全天挂卡挂时长

目录 前言正文1.安装下载2.编辑配置文件3.设置Steam社区证书4.启动ASF5.给游戏挂时长6.进阶-ASF自动启动且后台保活 前言 我遇到的最大的问题是&#xff0c;网络问题 其实不然&#xff0c;各大厂商的云服务器后台都有流量监控&#xff0c;意味着依靠一般方法是不能正常访问St…

最新可商用级chatgpt4.0系统源码+Midjourney-AI绘画系统 集成国内外数十个AI大模型和绘画接口

随着科技的飞速发展&#xff0c;人工智能正在逐步改变我们的生活&#xff0c;特别是在艺术创作领域。分享一款最新可商用级ChatGPT 4.0系统源码与Midjourney AI绘画系统的完美结合&#xff0c;集成国内外数十个AI大模型与绘画接口&#xff0c;为创作者们带来了前所未有的智能创…

DS:链表的分类

欢迎来到Harper.Lee的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 链表的结构⾮常多样&#xff0c;以下情况组合起来就有8种&#xff08;2 * 2 * 2&#xff09;链表结构。下面我们依次来认识它们吧&am…

centos7安装真的Redmine-5.1.2+ruby-3.0.0

下载redmine-5.1.2.tar.gz&#xff0c;上传到/usr/local/目录下 cd /usr/local/ tar -zxf redmine-5.1.2.tar.gz cd redmine-5.1.2 cp config/database.yml.example config/database.yml 配置数据连接 #编辑配置文件 vi config/database.yml #修改后的内容如下 product…

如何基于nginx组建多个子目录网站

华子目录 实验要求实验步骤 实验要求 组建多个子目录网站www.openlab.com&#xff0c;该网站有2个子目录www.openlab.com/sxhkt和www.openlab.com/zywww.openlab.com/sxhkt使用http读取www.openlab.com/zy使用https读取 实验步骤 准备工作 [rootserver ~]# setenforce 0[ro…

深度学习之基于YOLOv5的山羊行为识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习之基于YOLOv5的山羊行为识别系统是一个创新的项目&#xff0c;旨在通过深度学习和目标检测技术&#xff0c…

Nginx三大功能详解

文章目录 Nginx&#xff08;动静分离&#xff09;1.基本介绍2.需求分析3.思路分析4.先使用传统的方式1.配置win的tomcat1.webapps\search\cal.jsp2.webapps\search\image\cal.jpg3.启动tomcat&#xff0c;访问 http://192.168.200.1:8080/search/cal.jsp 2.配置linux的tomcat1.…

计算机毕业设计PHP+vue体检预约管理系统d1yu38

防止在使用不同数据库时&#xff0c;由于底层数据库技术不同造成接口程序紊乱的问题。通过本次系统设计可以提高自己的编程能力&#xff0c;强化对所学知识的理解和运用 本系统是一个服务于医院先关内容的网站&#xff0c;在用户打开网站的第一眼就要明白网站开发的目的&#x…

通义灵码:智能编码的革命性助手

通义灵码是由阿里云推出的一款基于通义大模型的智能编码辅助工具&#xff0c;它通过先进的人工智能技术&#xff0c;为开发者提供了一系列的智能编码功能&#xff0c;极大地提升了编码效率和质量。以下是通义灵码的一些核心功能和应用案例。 核心功能 代码智能生成 通义灵码…

轻量级分布式任务调度平台:XXL-JOB

目录 1 介绍1.1 特性1.2 整体架构 2 快速导入2.1 测试工程导入2.1 初始化数据库2.3 Docker安装任务管理中心 3 XXL-JOB任务注册测试3.1 引入xxl-job依赖3.2 配置xxljob相关信息3.3 定义定时任务执行方法3.3 配置任务执行器 4 CRON表达式4.1 cron表达式语法介绍4.2 cron练习 1 介…