机器学习周记(第四十四周:Robformer)2024.6.17~2024.6.23

目录

  • 摘要
  • ABSTRACT
  • 1 论文信息
    • 1.1 论文标题
    • 1.2 论文摘要
    • 1.3 论文引言
    • 1.4 论文贡献
  • 2 论文模型
    • 2.1 问题描述
    • 2.2 Robformer
      • 2.2.1 Encoder
      • 2.2.2 Decoder
    • 2.3 鲁棒序列分解模块
    • 2.4 季节性成分调整模块

摘要

本周阅读了一篇利用改进 Transformer 进行长时间序列预测的论文。论文模型为 Robformer ,其主要强调了在长时间序列预测问题上模型的鲁棒性。Robformer 主要包括几个关键模块:Encoder、Decoder、鲁棒序列分解模块、季节性成分调整模块。Encoder 主要侧重于从历史信息中提取周期性依赖关系,以供解码器使用。Decoder 包含两部分:堆叠的自相关机制以获得季节性部分,以及堆叠的稳健趋势预测块用于趋势部分。鲁棒序列分解模块主要提供一种简单且有效的方法来更新内部分解模块,使其能够鲁棒地提取季节性成分。季节性成分调整模块主要作用为进一步确保分解后的季节性成分的鲁棒性。

ABSTRACT

This week, We read a paper on long-term time series forecasting using an improved Transformer model. The model, named Robformer, primarily emphasizes the robustness of the model in long-term time series forecasting problems. Robformer consists of several key modules: the Encoder, the Decoder, the Robust Series Decomposition Module, and the Seasonal Component Adjustment Module. The Encoder mainly focuses on extracting periodic dependencies from historical information for the Decoder. The Decoder contains two parts: stacked Auto-Correlation mechanisms to obtain seasonal components and stacked robust trend forecasting blocks for trend components. The Robust Series Decomposition Module provides a simple and efficient approach to updating the inner decomposition blocks to extract seasonal components robustly. The Seasonal Component Adjustment Module’s main function is to further ensure the robustness of the decomposed seasonal components.

1 论文信息

1.1 论文标题

Robformer: A robust decomposition transformer for long-term time series forecasting

1.2 论文摘要

基于 Transformer 的预测方法已广泛应用于长期多变量时间序列的预测,并在延长预测时间上取得了显著进展。然而,当长期时间序列中出现突发趋势变化和季节波动时,这些方法的性能可能会严重退化。因此,作者确定了以往 Transformer 架构的两个瓶颈:(1) 稳健性较差的分解模块。 (2) 趋势转移问题,这一问题导致了在长期多变量序列预测中趋势预测与真实值之间存在不同的分布。针对这些瓶颈,作者设计了 Robformer,一种新型基于分解的 Transformer,其包括三个新的内部模块,以增强 Transformer 的预测能力。具体而言,作者更新了分解模块,并添加了一个季节性成分调整模块以处理非平稳序列。此外,作者还提出了一种受多项式拟合方法启发的新型内部趋势预测架构,在准确性和鲁棒性方面优于以往的设计。作者的实验研究表明,在六个基准测试上,在公平的长期多变量设置下,Robformer 相比于最先进的 AutoformerFEDformer 基线分别实现了 17% 和 10% 的相对改进,这些基准测试涵盖了能源、经济、交通、天气和疾病五大主流时间序列预测应用。

1.3 论文引言

长期多变量时间序列预测(LTTF)问题旨在输出比已知序列长度多几倍的预测序列,这在许多领域如金融、能源或天气中都很常见。最近的相关研究中,引入了 Transformers 以利用其自注意机制捕捉时间点之间复杂的依赖关系,并实现长期预测。为了应对 Transformers 在计算时间和内存方面的高消耗,一些基于 Transformer 的预测模型利用稀疏自注意机制来减少计算消耗,例如 ProbSparse 自注意因果卷积自注意局部敏感哈希注意力。然而,这些方法会离散化时间序列的连续空间模式,并遗忘一些时间信息。由于合理的分解过程可以有效地理清纠缠的时间模式,这可以促进模型准确预测,基于 Transformer 的方法 AutoformerFEDformer 利用基于简单平滑移动平均方法的内部分解模块来捕捉时间依赖关系,同时保持在 ( L log ⁡ L ) (L \log L) (LlogL) 程度的复杂性。

然而,基于分解的 Transformers 仍面临一些瓶颈,例如在预测现实世界多变量时间序列时的分布转换问题。此外,一些单变量预测模型声称它们在长期单变量序列预测任务中已取得了与 Transformer 相当的结果。尽管如此,Transformers 在长期多变量时间序列预测中真的不有效吗?
在这里插入图片描述

Fig.1 ETTh2数据集上Autoformer的预测输出和真实值之间的趋势变化示意图

为了回答这个问题,Non-stationary TransformersRevIN 提出了类似于预处理的平稳化和去平稳化模块,从提高数据可预测性的角度来提升 Transformer 的性能。类似地,PatchTST 将时间序列分割成序列级别的补丁,在输入之前帮助 Transformer 提取时间依赖性,这类似于标记化方法。然而,从 Transformer 架构的角度来看,使其在现实世界的时间序列上更具鲁棒性仍然是一个具有挑战性的问题。

在实验中,作者观察到基于分解的 Transformers 架构中存在两个主要瓶颈。首先,简单的移动平均方法不足以应对趋势和周期项的突发波动和变化,特别是被异常值误导时,而传统的分解解决方案由于计算复杂度的指数增长,很难应用于内部分解模块。其次,先前的基于分解的 Transformers 很难学习时间序列中的长期趋势模式。作者在 ETTh2 数据集上比较了 Autoformer 的预测结果和真实值,如图1所示,可以发现预测的趋势和实际的趋势之间存在巨大的差距。作者进一步进行了实验,发现先前的基于分解的 Transformer 随着回溯窗口大小的增加,预测误差并没有减少。后续分析显示,这是因为它们使用输入序列的平均值作为未来趋势组件的水平,当未来趋势与输入序列的平均值不一致时,会带来错误的趋势预测。同时,当历史和预测序列的长度增加时,时间序列中包含的长期趋势模式将被揭示,这需要模型具有捕捉多个趋势模式的能力。因此,如何鲁棒地分解时间序列并增强学习多种趋势模式的能力被证明是基于分解的 Transformers 进一步提升预测性能的瓶颈。

基于此,作者尝试超越基于分解的 Transformer,并提出了一种新的端到端鲁棒 Transformer,简称 Robformer,以便在不进行预处理的情况下处理长期时间序列预测。Robformer 仍然遵循编码器-解码器结构,并采用自相关机制,但创新性地加入了鲁棒分解块和季节性组件调整块作为内部操作,以实现更好的分解。所提出的新型鲁棒分解块简单但高效,且具有低计算复杂度。Robformer 还引入了具有双残差结构的鲁棒趋势预测块,以取代原有的趋势预测方法,在具有剧烈趋势组件波动的短期内显示出更好的性能。Robformer 保持了原始 ( L log ⁡ L ) (L \log L) (LlogL) 级别的复杂度,并且可以推广到其他基于分解的 Transformers,以进一步改进基础模型。作者的 Robformer 在几乎所有六个多变量真实世界基准上都达到了最先进的准确性。

1.4 论文贡献

① 提出了鲁棒分解架构和季节性组件调整块,以减轻趋势和周期项的突发波动和变化对长期预测的影响。

② 提出了鲁棒趋势预测块来提取长期时间序列的多种趋势模式,显示出比之前的趋势预测块更强的学习能力。这些提出的块可以应用于任何基于分解的 Transformer 模型,以提升其在长期时间序列预测任务(LTTF)中的性能。

2 论文模型

2.1 问题描述

给定具有 C( C ≥ 1 C\geq1 C1) 个变量的历史时间序列数据 H = { X 1 t , . . . , X C t } t = 1 L H = \{ X^{t}_{1},...,X^{t}_{C} \}^{L}_{t=1} H={X1t,...,XCt}t=1L,其中 L 是输入序列的长度, X i t X^{t}_{i} Xit 是第 i 个变量在第 t 个时间步上的观测值。时间序列预测问题主要是预测序列在未来 T 个时间步上的值,即 H ^ = { X 1 t ^ , . . . , X C t ^ } t = L + 1 L + T \widehat{H} = \{ \widehat{X^{t}_{1}},...,\widehat{X^{t}_{C}} \}^{L+T}_{t=L+1} H ={X1t ,...,XCt }t=L+1L+T,输入 L 预测 T。在 LTTF 条件下,L<<T。

2.2 Robformer

作者将基于分解的 Transformer 改造为更为鲁棒的深度预测模型(如图2所示),包括鲁棒序列分解块(RobDecomp)季节性成分调整块(SAB) 和解码器中的鲁棒趋势预测块(RobTF)
在这里插入图片描述

Fig.2 Robformer

N 个编码器的输入是过去 L 个时间步长 H e n ∈ R L × d H_{en}\in \R ^{L \times d} HenRL×d,而 M 个解码器的输入是包含季节性部分 H d e s ∈ R ( L 2 + T ) × d H_{des} \in \R^{(\frac{L}{2}+T)\times d} HdesR(2L+T)×d 和趋势部分 H d e t ∈ R ( L 2 ) × d H_{det} \in \R^{(\frac{L}{2})\times d} HdetR(2L)×d 的分解序列。按照之前的工作,解码器的季节性部分输入包括两部分:从编码器输入 H e n H_{en} Hen 的后半部分分解出来的部分,长度为 L 2 \frac{L}{2} 2L,这部分输入可以提供过去信息;以及长度为 T 的填充标量的掩码输入。然而,与用 H e n H_{en} Hen 的平均值填充趋势部分输入不同,作者直接将长度为 L 2 \frac{L}{2} 2L 的趋势部分 H d e t H_{det} Hdet 输入到解码器中。公式如下:
H e n s , H e n t = RobDecomp ( H e n L 2 : L ) , H e n s a d j = SAB ( H e n s ) , H d e s = Concat ( H e n s a d j , H 0 ) , H d e t = H e n t , H_{ens},H_{ent}=\textup{RobDecomp}(H_{en \frac{L}{2}:L}),\\ H_{ensadj}=\textup{SAB}(H_{ens}),\\ H_{des}=\textup{Concat} (H_{ensadj},H_{0}), H_{det}=H_{ent}, Hens,Hent=RobDecomp(Hen2L:L),Hensadj=SAB(Hens),Hdes=Concat(Hensadj,H0),Hdet=Hent,
其中 H e n s , H e n t ∈ R ( L 2 ) × d H_{ens},H_{ent} \in \R^{(\frac{L}{2})\times d} Hens,HentR(2L)×d 表示 H e n H_{en} Hen 分解的季节性和趋势部分 H 0 ∈ R T × d H_{0} \in \R ^{T \times d} H0RT×d 表示填充为零的占位符。

2.2.1 Encoder

编码器主要侧重于从历史信息中提取周期性依赖关系,以供解码器使用。对于 N 个编码器层,第 l l l 个编码器层的方程可总结为 H e n l = Encoder ( H e n l − 1 ) H_{en}^{l}=\textup{Encoder}(H_{en}^{l-1}) Henl=Encoder(Henl1)。详细的方程形式化为:
g e n l , 1 , _ = RobDecomp ( AutoCorrelation ( H e n l − 1 ) + H e n l − 1 ) , g e n l , 2 , _ = RobDecomp ( FeedForward ( g e n l , 1 ) + g e n l , 1 ) , g_{en}^{l,1},\_ = \textup{RobDecomp}(\textup{AutoCorrelation}(H_{en}^{l-1})+H_{en}^{l-1}),\\ g_{en}^{l,2},\_ = \textup{RobDecomp}(\textup{FeedForward}(g_{en}^{l,1})+g_{en}^{l,1}), genl,1,_=RobDecomp(AutoCorrelation(Henl1)+Henl1),genl,2,_=RobDecomp(FeedForward(genl,1)+genl,1),
其中“_”表示不必要的部分。 H e n l = g e n l , 2 , l ∈ { 1 , . . . , N } H_{en}^{l}=g_{en}^{l,2},l \in \{ 1,...,N \} Henl=genl,2,l{1,...,N} 表示第 l l l 个编码器层的输出, AutoCorrelation ( ⋅ ) \textup{AutoCorrelation}(\cdot) AutoCorrelation() 表示 Autoformer 中提出的自相关机制,该机制可以有效发现基于周期的依赖关系,以取代原来的自注意力机制。

2.2.2 Decoder

解码器包含两部分:堆叠的自相关机制以获得季节性部分,以及堆叠的稳健趋势预测块用于趋势部分。假设有 M 个解码器层,第 l l l 个解码器层的方程可以总结为 H d e l = Decoder ( H d e l − 1 , H e n N ) H_{de}^{l}=\textup{Decoder}(H_{de}^{l-1},H_{en}^{N}) Hdel=Decoder(Hdel1,HenN) Decoder ( ⋅ ) \textup{Decoder}(\cdot) Decoder() 形式化为:
g d e l , 1 , _ = RobDecomp ( AutoCorrelation ( H d e l − 1 ) + H d e l − 1 ) , g d e l , 2 , _ = RobDecomp ( AutoCorrelation ( g d e l , 1 , H e n N ) + g d e l , 1 ) , g d e l , 3 , _ = RobDecomp ( FeedForward ( g d e l , 2 ) + g d e l , 2 ) , G d e = RobTF ( H d e t ) , g_{de}^{l,1},\_ = \textup{RobDecomp}(\textup{AutoCorrelation}(H_{de}^{l-1})+H_{de}^{l-1}),\\ g_{de}^{l,2},\_ = \textup{RobDecomp}(\textup{AutoCorrelation}(g_{de}^{l,1},H_{en}^{N})+g_{de}^{l,1}),\\ g_{de}^{l,3},\_ = \textup{RobDecomp}(\textup{FeedForward}(g_{de}^{l,2})+g_{de}^{l,2}),\\ G_{de}=\textup{RobTF}(H_{det}), gdel,1,_=RobDecomp(AutoCorrelation(Hdel1)+Hdel1),gdel,2,_=RobDecomp(AutoCorrelation(gdel,1,HenN)+gdel,1),gdel,3,_=RobDecomp(FeedForward(gdel,2)+gdel,2),Gde=RobTF(Hdet),
其中 H d e l = g d e l , 3 , l ∈ { 1 , . . . , M } H_{de}^{l}=g_{de}^{l,3},l \in \{ 1,...,M \} Hdel=gdel,3,l{1,...,M} 表示第 l l l 个解码器层的输出, H d e 0 H_{de}^{0} Hde0 表示嵌入的 H d e s H_{des} Hdes g d e l , i , i ∈ { 1 , 2 , 3 } g_{de}^{l,i},i \in \{ 1,2,3 \} gdel,i,i{1,2,3} 对应于第 l l l 层中第 i i i 个稳健分解块后的季节性部分。 G d e G_{de} Gde 表示解码器的输出。注意, RobTF ( ⋅ ) \textup{RobTF}(\cdot) RobTF() 表示模型的稳健趋势预测块。

最终预测是两个分解成分的总和: W g ∗ H d e M + G d e W_{g}*H_{de}^{M}+G_{de} WgHdeM+Gde,其中 W g W_{g} Wg 表示季节性部分的简单映射。

2.3 鲁棒序列分解模块

正如在前文中提到的,简单的移动平均方法难以处理突然的趋势变化和季节性干扰问题,如图2所示。为了解决这个困境,作者尝试提出一种简单且有效的方法来更新内部分解模块,使其能够稳健地提取季节性成分。作者在分解模块中加入二阶差分算子,使模型能够自动学习如何平滑具有突变波动的分解趋势成分。具体来说,作者对每个输入序列采用二阶移动平均。对于长度为 L 的输入序列 H ∈ R L × d H \in \R ^{L \times d} HRL×d,其处理过程为:
H t = λ 1 ∗ AvgPool ( Padding ( H ) ) + λ 2 ∗ AvgPool ( Padding ( AvgPool ( Padding ( H ) ) ) ) , λ 1 , λ 2 = Softmax ( L ( H ) ) , H s = H − H t , H_{t}=\lambda_{1} * \textup{AvgPool}(\textup{Padding}(H))+\lambda_{2} *\textup{AvgPool}(\textup{Padding}(\textup{AvgPool}(\textup{Padding}(H)))),\\ \lambda_{1},\lambda_{2}=\textup{Softmax}(L(H)),\\ H_{s}=H-H_{t}, Ht=λ1AvgPool(Padding(H))+λ2AvgPool(Padding(AvgPool(Padding(H)))),λ1,λ2=Softmax(L(H)),Hs=HHt,
其中, H s , H t ∈ R L × d H_{s},H_{t}\in \R^{L \times d} Hs,HtRL×d 分别表示季节性和趋势循环部分,每个部分都包含部分残余噪声。 λ 1 , λ 2 \lambda_{1},\lambda_{2} λ1,λ2 是基于输入序列由线性映射层 L ( H ) \textup{L}(H) L(H) 自动学习并通过 softmax 函数 Softmax ( ⋅ ) \textup{Softmax}(\cdot) Softmax() 转换为概率分布的权重。通过这种方式,这些模块可以实现相同的平滑效果。

此外,考虑到时间序列可能会与多个季节性模式耦合,这可能会扰乱去趋势过程,可以利用加权移动平均方法来消除这些影响。这种方法还可以使分解后的成分更加平滑。需要注意的是,所有权重的总和应为1。类似于 FEDformer 中的 MOEDecomp 模块,对于可能存在的多个季节性模式 { τ 1 , τ 2 , . . . , τ k } \{ \tau_{1},\tau_{2},...,\tau_{k} \} {τ1,τ2,...,τk},有 k 平均滤波器,其核大小分别为 { τ 1 , τ 2 , . . . , τ k } \{ \tau_{1},\tau_{2},...,\tau_{k} \} {τ1,τ2,...,τk}。形式上,该模块可以表示为:
H t = ∑ k = 1 K ω τ k ( H t ) τ k , ω τ 1 , . . . , ω τ k = Softmax ( L ( H ) ) , H s = H − H t H_{t}=\sum_{k=1}^{K}\omega_{\tau_{k}}(H_{t})_{\tau_{k}}, \\ \omega_{\tau_{1}},...,\omega_{\tau_{k}} = \textup{Softmax}(L(H)), \\ H_{s}=H-H_{t} Ht=k=1Kωτk(Ht)τk,ωτ1,...,ωτk=Softmax(L(H)),Hs=HHt
其中, ( H t ) τ k (H_{t})_{\tau_{k}} (Ht)τk 表示核大小为 τ k \tau_{k} τk 的趋势成分, Softmax ( L ( H ) ) \textup{Softmax}(L(H)) Softmax(L(H)) 是从输入中学习到的用于混合这些提取的趋势成分的权重。详细过程见算法1。
在这里插入图片描述

Algorithm 1

2.4 季节性成分调整模块

如图 2 所示,作者提出了季节性成分调整模块,以进一步确保分解后的季节性成分的鲁棒性。

前文中提出的Robdecomp模块可以在一定程度上缓解分布偏移问题。然而,去除趋势成分后, H s H_{s} Hs 可以被视为“污染的季节性成分”,因为它可能受到各种类型的噪声或异常值的污染。这是因为没有进行噪声去除或异常检测的预处理操作。一般来说,传统的解决方法是通过使用平均季节性模式来调整季节性成分以去除水平偏移。然而,现实世界中的季节性成分通常在幅度和相位上不规则地变化,这意味着以往的方法会导致对季节性成分中复杂信息的忽略。

为了在不牺牲信息利用的情况下提取稳健的季节性成分,作者提出通过逐步学习数据依赖的权重来调整“污染的季节性成分”,以调整季节性成分中相同相位位置的观测值。

首先,假设 T T T 是周期长度,注意如果有多个潜在的周期长度,选择最大的一个。数学上,对于分解后的季节性序列 { ( H s ) 1 , H s ) 2 , . . . , H s ) N } \{ (H_{s})_{1},H_{s})_{2},...,H_{s})_{N} \} {(Hs)1,Hs)2,...,Hs)N},可以按如下方式调整序列:
H ~ = { ( H s ) N N ≦ T ∑ k = 0 K ω τ k ( H s ) N − k T N > T , ω τ 0 , . . . , ω τ k = Softmax ( L ( H ) ) , \widetilde{H} = \begin{cases} (H_{s})_{N} &\text{} N \leqq T \\ \sum_{k=0}^{K}\omega_{\tau_{k}}(H_{s})_{N-kT} &\text{} N \gt T, \end{cases}\\ \omega_{\tau_{0}},...,\omega_{\tau_{k}}=\textup{Softmax}(L(H)), H ={(Hs)Nk=0Kωτk(Hs)NkTNTN>T,ωτ0,...,ωτk=Softmax(L(H)),
其中, H ~ \widetilde{H} H 是调整后的季节性成分, Softmax ( L ( H ) ) \textup{Softmax}(L(H)) Softmax(L(H)) 是用于组合相关观测值以调整分解后的季节性序列中每个值的可学习权重。需要注意的是,在 LTTF 条件下,输入序列 N 的长度通常接近周期长度,因此可以根据编码器或解码器中的分解块数量来等分 T,以提高该方法的可用性,因为移动平均法具有叠加效果。这意味着,如果解码器中的分解块数量为 M,可以使用 ⌈ T / M ⌉ \lceil T/M \rceil T/M 而不是参数T来调整季节性成分。详细描述可以见算法2。
在这里插入图片描述

Algorithm 2

受益于对相同相位位置观测值的约束,季节性成分调整模块可以在一定程度上减轻水平偏移和异常值的干扰,从而使 Transformer 能够进行更准确的预测。
在这里插入图片描述

Fig.3 RobTF block

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

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

相关文章

【火猫体育】欧洲杯:苏格兰VS匈牙利焦点大战

北京时间6月24日&#xff0c;欧洲杯A组苏格兰VS匈牙利的焦点大战将正式打响。这场比赛对于苏格兰队来说不容有失&#xff0c;因为球队必须战胜对手才能有希望从小组赛出线&#xff0c;晋级本届欧洲杯16强。苏格兰在欧洲杯首战&#xff0c;就被东道主德国队上了一课。德国队在比…

“明天下班以后请假了,孩子中考“

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 前几天约服务器…

763. 划分字母区间

题目&#xff1a;给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表…

高性能并行计算华为云实验五:

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建PageRank源码 3.2 makefile的创建和编译 3.3 主机配置文件建立与运行监测 四、实验结果与分析 4.1 采用默认的节点数量及迭代次数进行测试 4.2 分析并行化下节点数量与耗时的变化规律 4.3 分析迭代次数与耗时的变…

flex 弹性布局还不懂?一篇文章带你了解一下

flex 是什么 Flex布局&#xff0c;全称为Flexible Box布局&#xff0c;或简称Flexbox&#xff0c;是一种由W3C提出用于网页设计的新型布局模式。它旨在提供一个更加有效且灵活的方式来布局、对齐和分配容器内项目的空间&#xff0c;无论是行还是列方向。Flex布局特别适用于响应…

头歌——机器学习——决策树案例

第1关&#xff1a;基于决策树模型的应用案例 任务描述 本关任务&#xff1a;使用决策树算法完成成人收入预测。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.数据特征处理&#xff0c;2.使用决策树算法完成成人收入预测。 数据处理及特征工程 本次任务…

Adaptive Server Connection Failed on Windows

最近在使用pymssql &#xff08;版本2.3.0&#xff09;连接SQL Server2012遇到如下问题&#xff1a; pymssql._mssql.MSSQLDatabaseException: (20002, bDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (localhost)\nDB-Lib error message 2000…

Linux如何远程访问?

远程访问是现代计算机网络中非常重要的一个功能&#xff0c;它允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行操作。对于使用Linux操作系统的用户来说&#xff0c;Linux远程访问是非常常见的需求。本文将介绍如何实现Linux远程访问&#xff0c;并简要介绍一…

GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

目录 概述 1 使用GUI Guider 设计UI 1.1 创建页面 1.2 页面切换事件实现 1.3 生成代码和仿真 1.3.1 生成和编译代码 1.3.2 仿真UI 2 GUI Guider生成的代码结构 2.1 代码结构介绍 2.2 Project目录下的文件 3 板卡上移植UI 3.1 加载代码至工程目录 3.2 主函数中调…

高职人工智能专业实训课之“自然语言处理”

一、前言 在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术日益成为研究和应用的热点。为了满足高职院校对NLP专业实训课程的需求&#xff0c;唯众人工智能教学实训凭借其前沿的教育技术平台&#xff0c;特别是GPU虚拟化技术&#xff0c;为学生提供了高…

C语言转义序列的含义和用法

基础理论 在C语言中&#xff0c;转义序列是一种特殊的字符组合&#xff0c;以反斜杠\开头&#xff0c;后面跟着一个或多个字符&#xff0c;用于表示不能直接输入的字符或者控制字符。转义序列允许程序员在字符串中包含那些不易直接输入的字符&#xff0c;如换行符、制表符或特…

2-3KW户储、家储逆变器设计资料

储能电源方案双向逆变器板资料&#xff0c;原理文件&#xff0c;PCB文件&#xff0c;源代码&#xff0c;bom清单。 bom表&#xff1a; PCB&#xff1a; 变压器电感 2-3KW户储、家储逆变器设计通常需要考虑以下几个方面&#xff1a; 输入电压范围&#xff1a;逆变器需要能够适应…

“人工智能+”带来新变化

以生成式人工智能&#xff08;AIGC&#xff09;为代表的新一代人工智能技术创新加速演进&#xff0c;相关商业化应用成果也不断涌现&#xff0c;行业应用范围不断拓展&#xff0c;深度赋能实体经济&#xff0c;为行业提质增效与实现减排提供助力。 自主航运初创公司OrcaAI于6月…

帕金森患者营养补充指南:维生素的重要性与选择

帕金森病&#xff0c;在众多营养素中&#xff0c;维生素对于帕金森病患者来说尤为重要。本文将详细介绍帕金森患者应该补充哪些维生素&#xff0c;以及这些维生素的重要性。 一、维生素B组 维生素B组在帕金森病患者中扮演着重要的角色。其中&#xff0c;维生素B6是神经递质多…

JavaSE (Java基础):方法简介

6 Java中的方法 下面关于Java方法的介绍都引用了某B大佬狂神的PPT 6.1 方法简介 自己看注释&#xff0c;&#xff0c;&#xff0c;&#xff0c;这就是方法&#xff01; package com.zlx.method;public class Demo01 {//main方法public static void main(String[] args) {//实…

基于YOLOv5+PyQT5的吸烟行为检测(含pyqt页面、模型、数据集)

简介 吸烟不仅对个人健康有害,也可能在某些特定场合带来安全隐患。为了有效地监控公共场所和工作环境中的吸烟行为,我们开发了一种基于YOLOv5目标检测模型的吸烟检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取…

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上&#xff0c;或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景&#xff1a; 表单…

同城跑腿APP开发,随叫随到超方便!

随着移动互联网的发展和人们生活节奏的加快&#xff0c;越来越多的人们没有闲暇的时间来做一些繁琐的事情&#xff0c;比如说买药、挂号、排队、送花、取文件等等。如果没有时间去处理这些事情怎么办&#xff1f;开发同城跑腿APP&#xff0c;提供跑腿服务&#xff0c;随时办事随…

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇&#xff0c;分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》&#xff0c;3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

C++ | Leetcode C++题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int majorityElement(vector<int>& nums) {int candidate -1;int count 0;for (int num : nums) {if (num candidate)count;else if (--count < 0) {candidate num;count 1;}}return candidate;…