论文阅读 - TIME-LLM: TIME SERIES FORECASTING BY REPROGRAMMING LARGE LANGUAGE MODELS

论文链接: https://arxiv.org/abs/2310.01728

目录

摘要

1 INTRODUCTION

2 RELATED WORK

3 METHODOLOGY

3.1 MODEL STRUCTURE

4 MAIN RESULTS

4.1 长期预测

 4.2 短期预测

 4.3 FEW-SHOT FORECASTING

 5 CONCLUSION AND FUTURE WORK


摘要

动机:

        时间序列预测在许多真实世界的动态系统中具有重要意义,并已得到广泛研究。

        与自然语言处理(NLP)和计算机视觉(CV)不同,在自然语言处理和计算机视觉中,一个大型模型可以处理多个任务,而时间序列预测模型往往是专门的,需要针对不同的任务和应用进行不同的去符号化。虽然预训练基础模型在 NLP 和 CV 领域取得了令人瞩目的进展,但它们在时间序列领域的发展却受到了数据稀缺性的限制。

        最近的研究表明,大型语言模型(LLM)对复杂的标记序列具有强大的模态识别和推理能力。然而,如何有效地调整时间序列数据和自然语言的模式以利用这些能力仍然是一个挑战

        

方法:

        在这项工作中,提出了 TIME-LLM,这是一个重新编程的框架,在保持骨干语言模型不变的情况下,将 LLM 重新用于一般时间序列预测。

                首先用文本原型对输入的时间序列进行重新编程,然后将其输入到冻结的 LLM 中,使两种模式保持一致。

                为了增强 LLM 对时间序列数据进行推理的能力,作者提出了 "提示即前缀"(Prompt-as-Prefix,PaP),它可以丰富输入上下文,并指导对重新编程的输入片段进行转换。

                LLM 最后对转换后的时间序列片段进行预测,从而获得预测结果。

        综合评估表明,TIME-LLM 是一种功能强大的时间序列学习器,其性能优于最先进的专业预测模型。更重要的是,TIME-LLM 在少数几次学习和零次学习的情况下都表现出色。

1 INTRODUCTION

背景:

        时间序列预测是许多真实世界动态系统的关键能力(Jin 等人,2023a),应用范围从需求规划(Leonard,2001 年)和库存优化(Li 等人,2022 年)到能源负荷预测(Liu 等人,2023a)和气候建模(Schneider & Dickinson,1974 年)。

        每项时间序列预测任务通常都需要广泛的领域专业知识和特定任务的模型设计。这与 GPT-3(Brown 等人,2020 年)、GPT-4(OpenAI,2023 年)、Llama(Touvron 等人,2023 年)等基础语言模型形成了鲜明对比。

LLM模型优势:

        预先训练的基础模型,如大型语言模型(LLM),推动了计算机视觉(CV)和自然语言处理(NLP)的快速发展。虽然时间序列建模没有获得同样的重大突破,但 LLMs 令人印象深刻的能力激发了它们在时间序列预测中的应用(Jin 等人,2023b)。利用 LLMs 推动预测技术的发展,有几个方面需要考虑: 通用性。LLMs 已经证明了其在少数几次和零次迁移学习方面的卓越能力(Brown 等人,2020 年)。它具有跨领域通用预测的潜力,而无需根据任务从头开始重新训练。与此相反,目前的预测方法往往是按领域僵化地专门化:

                数据效率。通过利用预先训练的知识,LLMs 已显示出只需少量示例就能执行新任务的能力。这种数据效率可以在历史数据有限的情况下进行预测。相比之下,目前的方法通常需要大量的领域内数据。

                推理。LLMs 具有复杂的推理和模式识别能力(Mirchandani 等人,2023 年;Wang 等人,2023 年;Chu 等人,2023 年)。利用这些技能,可以通过学习到的高层次概念进行高精度预测。现有的非 LLM 方法主要是统计方法,没有太多的先天推理能力。

                多模态知识。随着 LLM 架构和训练技术的改进,它们会获得更多不同模式的知识,如视觉、语音和文本(Ma 等人,2023 年)。利用这些知识可以实现融合不同数据类型的协同预测。传统工具缺乏联合利用多个知识库的方法。

                易于优化。LLM 只需在大规模计算中训练一次,然后就可以应用于预测任务,而无需从头开始学习。优化现有预测模型往往需要大量的架构搜索和超参数调整(Zhou 等人,2023b)。

                总之,与当前的专业建模范式相比,LLM 为时间序列预测提供了一条更通用、更高效、更协同和更易用的途径。因此,将这些功能强大的模型用于时间序列数据,可以释放尚未开发的巨大潜力。

将LLM用于时间序列推理的难点:

        上述优势的实现取决于时间序列数据和自然语言模式的有效协调。然而,这是一项具有挑战性的任务,因为 LLM 是在离散的token上运行的,而时间序列数据本质上是连续的。此外,解释时间序列模式的知识和推理能力并不自然地存在于 LLM 的预训练中。因此,如何释放 LLM 内的知识,以准确、数据高效和与任务无关的方式激活其进行一般时间序列预测的能力,仍然是一个有待解决的难题。

方法:

        在这项工作中,作者提出了 TIME-LLM,这是一个重新编程框架,可在保持骨干模型不变的情况下,将大型语言模型用于时间序列预测。

        其核心思想是将输入的时间序列重新编程为更适合语言模型能力的文本原型表示

        为了进一步增强模型对时间序列概念的推理能力,作者引入了 "提示即前缀"(Prompt-as-Prefix,PaP)这一新思路,利用额外的上下文来丰富输入时间序列,并以自然语言的方式提供任务指示。这为应用于重新编程输入的所需转换提供了声明性指导。

        然后对语言模型的输出进行预测,生成时间序列预测。

实验结果:

        综合评估结果表明,通过这种重新编程方法,大型语言模型可以作为有效的少量和零少量时间序列学习器,其性能优于专门的预测模型。通过利用 LLM 的推理能力,同时保持模型的完整性,作者的工作为多模态基础模型指明了方向,这些模型可以在语言和序列数据任务中表现出色。提出的重编程框架提供了一种可扩展的范式,可为大型模型赋予超出其原始预训练的新能力。在这项工作中的主要贡献可归纳如下:

                引入了一个新概念,即在不改变预先训练好的骨干模型的情况下,为时间序列预测重新编程大型语言模型。在此过程中,证明了预测可以被视为另一种 "语言 "任务,可以通过现成的 LLM 有效解决。

                提出了一个新框架--TIME- LLM,其中包括将输入时间序列重新编程为对 LLM 来说更自然的文本原型表示,并通过声明性提示(如领域专家知识和任务指示)来增强输入上下文,从而指导 LLM 进行推理。技术表明,多模态基础模型在语言和时间序列方面都很出色。

                在主流预测任务中,TIME-LLM 的性能始终优于最先进的技术,尤其是在少数几次预测和零次预测的情况下。此外,在实现这一卓越性能的同时,还保持了出色的模型重编程效率。因此,作者的研究为释放 LLM 在时间序列和其他序列数据方面尚未开发的潜力迈出了坚实的一步。

2 RELATED WORK

        特定任务学习。大多数时间序列预测模型都是为特定任务和领域(如交通预测)而设计的,并在小规模数据上进行端到端训练。示例如图1:例如,ARIMA 模型是为单变量时间序列预测而设计的(Box 等人,2015 年),LSTM 网络是为序列建模而定制的(Hochreiter & Schmidhuber,1997 年),而时间卷积网络(Bai 等人,2018 年)和变换器(Wen 等人,2023 年)则是为处理较长的时间依赖性而开发的。这些模型虽然在狭窄的任务中取得了良好的性能,但缺乏通用性,无法推广到各种时间序列数据中。

 (图 1:重新编程大型语言模型(LLMs)的示意图,比较(a)特定任务学习和(b)模型微调。(c) 建议研究并演示了如何有效地重新编程开源 LLM,使其成为功能强大的时间序列学习器,而在这种情况下,没有现成的经过精心开发的时间序列预训练模型。)

        模态内适应。CV 和 NLP 领域的相关研究已经证明了预训练模型的有效性,这些模型可以针对各种下游任务进行微调,而无需从头开始进行昂贵的训练(Devlin 等人,2018 年;Brown 等人,2020 年;Touvron 等人,2023 年)。受这些成功经验的启发,近期的研究主要集中在时间序列预训练模型(TSPTMs)的开发上。其中第一步涉及使用不同策略进行时间序列预训练,如监督学习(Fawaz 等人,2018 年)或自我监督学习(Zhang 等人,2022b;Deldari 等人,2022 年;Zhang 等人,2023 年)。这样,模型就能学习代表各种输入时间序列的知识。一旦经过预训练,它就可以在类似领域进行微调,学习如何执行特定任务(Tang 等人,2022 年)。图 1(b) 就是一个例子。TSPTMs 的开发利用了 NLP 和 CV 中预训练和微调的成功经验,但由于数据稀少,在较小规模上仍然受到限制。        

        跨模态适应。在模态内适应的基础上,最近的工作进一步探索了通过多模态微调(Yin 等,2023 年)和模型重编程(Chen,2022 年)等技术,将 NLP 和 CV 中强大的预训练基础模型的知识转移到时间序列建模中。作者的方法与这一类别相符;然而,目前关于时间序列的相关研究还很有限。一个例子是 Voice2Series(Yang 等人,2021 年),它通过将时间序列编辑为适合声学模型的格式,将声学模型(AM)从语音识别调整为时间序列分类。最近,Chang 等人(2023 年)提出了使用 LLM 进行时间序列预测的 LLM4TS。它在 LLM 上设计了一个两阶段的微调过程--首先对时间序列进行有监督的预训练,然后进行特定任务的微调。Zhou 等人(2023a)在不改变自注意层和前馈层的情况下,利用预训练语言模型。该模型在各种时间序列分析任务中进行了微调和评估,并通过转移自然语言预训练的知识,展示了可比的或最先进的性能。与上述方法不同的是,作者既不直接编辑输入时间序列,也不对主干 LLM 进行微调。相反,如图 1(c)所示,建议使用源数据模式对时间序列进行重新编程,同时进行提示,以释放 LLM 作为有效时间序列机器的潜力。

3 METHODOLOGY

        模型架构如图 2 所示。重点是重新编程嵌入式可视语言基础模型,如 Llama(Touvron 等人,2023 年)和 GPT-2(Radford 等人,2019 年),用于一般时间序列预测,而不需要对骨干模型进行任何微调。

        具体来说,考虑以下问题:给定一系列历史观测数据 X \in R^{N\times T},由跨 T 个时间步的 N 个不同一维变量组成,目标是重新编程一个大型语言模型 f (·) 以理解输入时间序列,并准确预测未来 H 个时间步的读数,用 \hat{Y} \in R^{N\times H} 表示,总体目标是最小化地面实况 Y 与预测之间的均方误差,即 \frac{1}{H} \sum_{h=1}^{H} ||\hat{Y}_h - Y_h||_F^2

        方法包括三个主要部分: (1) 输入转换;(2) 预训练和冻结的 LLM;(3) 输出投影。

        最初,一个多变量时间序列被分割成 N单变量时间序列,随后对其进行独立处理(Nie 等人,2023 年)。第 i 个序列表示为 X^{(i)} \in R^{1\times T},在用学习到的文本原型重新编程以调整源模态和目标模态之前,要对其进行归一化、修补和嵌入。

        然后,增强 LLM 的时间序列推理能力,促使它与重新编程的patch一起生成输出表示,并投射到最终预测结果 \hat{Y}^{(i)} \in R^{1\times H}中。

        只有轻量级输入转换和输出投影的参数会被更新,而骨干语言模型则被冻结。视觉语言模型和其他多模态语言模型通常通过配对的跨模态数据进行微调,而 TIME-LLM 模型则是直接优化的,只需一小组时间序列和几个训练历时就能使用,与从头开始建立大型特定领域模型或对其进行微调相比,TIME-LLM 保持了高效率,并减少了资源限制。为进一步减少内存占用,可无缝集成各种现成技术(如量化),以精简 TIME-LLM。

3.1 MODEL STRUCTURE

        输入嵌入。首先,通过可逆实例归一化(RevIN)将每个输入通道 X(i) 单独归一化为具有零均值和单位标准差,以减轻时间序列分布偏移(Kim 等人,2021 年)。

        然后,将 X(i) 划分为若干个长度为 Lp 的连续重叠或非重叠斑块(Nie 等人,2023 年);

        因此,输入斑块的总数为 P = ⌊ (T -Lp) /S ⌋ + 1,其中 S 表示水平滑动步长。其基本动机有两个方面:(1)通过将局部信息聚合到每个patch中,更好地保留局部语义信息;(2)作为token化,形成紧凑的输入标记序列,减少计算负担。给定这些patch X_P^{(i)} \in R^{P\times L_p},将其嵌入为 \hat{X}_P^{(i)} \in R^{P \times d_m},采用简单的线性层作为patch嵌入器,创建维度 d_m

        patch重编程。在这里,将patch嵌入重新编程到源数据表示空间,使时间序列和自然语言的模式相一致,从而激活骨干网的时间序列理解和推理能力。一种常见的做法是学习一种 "噪音 "形式,当这种噪音应用于目标输入样本时,可使预先训练好的源模型在无需更新参数的情况下产生所需的目标输出。. 对于数据桥接而言,这在技术上是可行的。

        示例包括重新利用视觉模型以处理跨域图像(Misra 等人,2023)或重新编程声学模型以处理时间序列数据(Yang 等人,2021)。

难点:

        在这两种情况下,源数据和目标数据之间都存在显式的、可学习的转换,从而允许直接编辑输入样本。然而,时间序列既不能直接编辑,也不能用自然语言无损描述,这对直接引导LLM在不进行资源密集型微调的情况下理解时间序列提出了重大挑战。

        为了缩小这一差距,作者建议在骨干网中使用预先训练好的词嵌入 E \in R^{V \times D}(其中 V 是词汇量大小)对\hat{X}_P^{(i)} 进行重新编程。尽管如此,并没有先验知识表明哪些源token是直接相关的。

        因此,简单地利用 E 将导致巨大且可能密集的重新编程空间。一个简单的解决方案是通过线性探测 E 来维护一小部分文本原型,表示为 E' \in R^{V' \times D},其中 V ′ ≪ V。

        图 3(a) 是一个示例。文本原型学习连接的语言线索,例如 "短上"(红线)和 "稳下"(蓝线),然后将其组合起来,以表示本地patch信息(例如,"短上然后稳下 "表示patch 5 的特征),而无需离开预先训练语言模型的空间。这种方法非常高效,可以自适应地选择相关的源信息。为此,采用了多头交叉注意层。

         具体来说,对于每个头 k = {1, - - - , K},定义查询矩阵 Q_k^{(i)} = \hat{X}_P^{(i)} W_K^Q、键矩阵 K_k^{(i)} = E'W_k^K和值矩阵 V_k^{(i)} = E' W_k^V,其中 W_k^Q \in R^{d_m \times d}W_k^K, W_k^V \in R^{D\times d}。具体来说,D 是骨干模型的隐藏维度,d = ⌊ d_m / K⌋。然后,对每个注意力头中的时间序列patch进行重新编程的操作,定义如下:

         将每个头部的Z^{(i)}_k \in R^{P \times d} 汇总,得到 Z^{(i)} \in R^{P \times d_m} 。然后进行线性投影,使隐藏维度与主干模型保持一致,得到 O^{(i)} \in R^{P \times D}

        提示作为前缀。提示是针对特定任务激活 LLMs 的直接而有效的方法(Yin 等人,2023 年)。然而,将时间序列直接转换为自然语言面临着相当大的挑战,既妨碍了指令数据集的创建,也妨碍了在不影响性能的情况下有效利用即时提示(Xue & Salim,2022 年)。

        最近的进展表明,其他数据模式(如图像)可以作为提示的前缀进行无缝整合,从而促进基于这些输入的有效推理(Tsimpoukelli 等人,2021 年)。受这些发现的启发,作者为了使方法直接适用于真实世界的时间序列,提出了另一个问题:提示可以作为前缀来丰富输入上下文并指导重新编程的时间序列patch的转换吗?它在完成patch重编程的同时,显著增强了 LLM 对下游任务的适应性(见后面的第 4.5 节)。

        图 3(b) 展示了这两种提示方法。在 "patch作为前缀 "方法中,语言模型在自然语言的提示下预测时间序列中的后续值。这种方法会遇到一些限制:

                (1) 语言模型在处理高精度数字时,如果没有外部工具的帮助,通常会表现出灵敏度较低的问题,因此,要准确地处理实际的长期预测任务,会面临巨大的挑战;

                (2) 不同的语言模型需要进行复杂的、个性化的后处理,因为它们是在不同的语料库中进行预训练的,在精确高效地生成高精度数字时,可能会采用不同的token化类型。这就导致预测用不同的自然语言格式表示,如用['0', '.','6','1']和['0', '.','61']表示十进制 0.61

        而 "提示作为前缀 "则巧妙地避免了这些限制。在实践中,确定了构建有效提示的三个关键要素:

                (1) 数据集上下文;

                (2) 任务指令;

                (3) 输入统计数据。

        图 4 是一个prompt示例。数据集的背景为 LLM 提供了有关输入时间序列的重要背景信息,而输入时间序列往往在不同领域表现出不同的特征。

        任务指令是 LLM 为特定任务转换patch嵌入的重要指南。还利用趋势和滞后期等其他重要统计数据来丰富输入时间序列,以促进模式识别和推理。

 

        输出投影。如图 2 所示,在通过冻结 LLM 对提示嵌入和patch嵌入 O^{(i)} 进行打包和前馈后,丢弃前缀部分,得到输出表示。

        然后,对其进行扁平化和线性投影,得出最终预测结果 \hat{Y}^{(i)}

4 MAIN RESULTS

        TIME-LLM 在多种基准和环境下,特别是在少次和零次情况下,始终以较大优势优于最先进的预测方法。作者将方法与大量最新模型进行了比较,包括最近一项对时间序列分析语言模型进行微调的研究(Zhou 等,2023a)。为了确保比较的公平性,在所有基线上都采用了统一的评估管道,并坚持使用(Wu 等,2023 年)中的实验配置。除非另有说明,否则使用 Llama-7B (Touvron 等,2023)作为默认主干。

        基线。与 SOTA 时间序列模型进行了比较,并引用了(Zhou et al. 基准包括一系列基于变换器的方法: PatchTST (2023)、ESTformer (2022)、Non-Stationary Transformer (2022)、FEDformer (2022)、Aut- oformer (2021)、Informer (2021) 和 Reformer (2020)。还选择了一组最新的竞争模型,包括 GPT4TS (2023a)、LLMTime (2023)、DLinear (2023)、TimesNet (2023) 和 LightTS (2022a)。在短期预测方面,进一步将模型与 N-HiTS (2023b) 和 N-BEATS (2020) 进行了比较。

4.1 长期预测

        设置。对 ETTh1、ETTh2、ETTm1、ETTm2、天气、电力(ECL)、交通和 ILI 进行了评估。实施和数据集详情见附录 B。输入时间序列长度 T 设为 512,使用四种不同的预测视距 H∈{96, 192, 336, 720}。评估指标包括均方误差(MSE)和平均绝对误差(MAE)

        结果 简要结果见表 1。在大多数情况下,TIME-LLM 都优于所有基线,而且明显优于大多数基线。与 GPT4TS(Zhou 等,2023a)的比较尤其值得注意。GPT4TS 是一项最新的工作,涉及对骨干语言模型的微调。作者注意到,GPT4TS 和 TimesNet 的平均性能分别提高了 12% 和 20%。与 SOTA 任务专用变换器模型 PatchTST 相比,通过重新编程最小的 Llama,TIME-LLM 实现了平均 MSE 降低 1.4%。与其他模型(如 DLinear)相比,作者的改进也很明显,超过了 12% 。

 4.2 短期预测

        设置。选择 M4 基准(Makridakis 等人,2018 年)作为测试平台,其中包含不同采样频率的营销数据集合。更多详情见附录 B。这种情况下的预测视野相对较小,在 [6, 48] 范围内。输入是预测范围的两倍。评估指标包括对称平均绝对百分比误差 (SMAPE)、平均绝对比例误差 (MSAE) 和总体加权平均值 (OWA)

        结果 表 2 列出了在所有方法中使用统一种子的简要结果。TIME-LLM 始终超越所有基线,比 GPT4TS 高出 8.7%。即使与 SOTA 模型、N-HiTS(Challu 等,2023b)、MASE 和 OWA 相比,TIME-LLM 仍然具有竞争力。

 4.3 FEW-SHOT FORECASTING

        设置。LLM 最近展示了非凡的少量学习能力(Liu 等人,2023b)。在本节中,将评估重新编程的 LLM 在预测任务中是否保留了这种能力。为了进行公平比较,作者沿用了(Zhou 等,2023a)中的设置,并在训练数据有限(即≤前 10%的训练时间步数)的情况下进行评估

        结果 简要的 10% 和 5% 少量学习结果见表 3 和表 4。表 3 和表 4中。TIME- LLM 明显优于所有基线方法,将其归功于重新编程的 LLM 成功激活了知识。有趣的是,作者的方法和 GPT4TS 都持续超越了其他具有竞争力的基线方法,进一步凸显了语言模型作为精通时间序列机器的潜在能力。

         与 GPT4TS 相比,作者的方法在 10% 少量学习的情况下实现了 5% 的 MSE 降低,而无需对 LLM 进行任何微调。与最近的 SOTA 模型相比例如 PatchTST、DLinear 和 TimesNet,作者的模型在 MSE 方面的平均提升率分别超过了 8%、12% 和 33%。在 5% 少量学习场景中,作者也发现了类似的趋势,与 GPT4TS 相比,平均提升超过了 5%。与 PatchTST、DLinear 和 TimesNet 相比,TIME-LLM 的平均改进幅度超过了 20%。

 5 CONCLUSION AND FUTURE WORK

        TIME-LLM 通过将时间序列数据重新编程为对 LLM 更为自然的文本原型,并通过 "提示作为前缀 "提供自然语言指导以增强推理能力,显示了将冷冻大型语言模型改编为时间序列预测模型的前景。评估结果表明,经过调整的 LLM 可以超越专门的专家模型,这表明它们具有作为有效时间序列机器的潜力。研究结果还提供了一种新见解,即时间序列预测可以被视为另一种 "语言 "任务,可以由现成的 LLM 来处理,从而通过我们的 Time-LLM 框架实现最先进的性能。进一步的研究应探索最佳的重编程表征,通过持续的预训练用显式时间序列知识丰富 LLM,并建立跨时间序列、自然语言和其他模式的联合推理的多模式模型。此外,还应该考虑应用重编程框架,使 LLM 具备更广泛的时间序列分析能力或其他新能力。

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

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

相关文章

黎加厚教授:生成式人工智能对课程教材教法的影响

01 生成式人工智能与过去的信息技术有哪些不一样的地方 2023年,生成式人工智能(GenAI)犹如百年惊雷,改变了我对计算机的认识。最先让我折服的是AI绘画,我只需要把心中想象的场景用提示词详细描述,立刻就生…

VS code 无法go to以及全局搜索不到问题

一、无法goto问题 需要安装插件C/C。 安装完成后,检查设置是否生效。步骤如下: 1. 点开设置: 2. 搜索c/c查找引擎,确认其为默认值,即可。 二、全局搜索不到 VS code有时候全局搜索内容,搜索不到或者搜索…

基于51单片机的汽车智能灯光控制系统

一.硬件方案 本设计硬件部分,中央处理器采用了STC89C52RC单片机,另外使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进…

C语⾔:内存函数

1. memcpy使⽤和模拟实现(对内存块的复制,不在乎类型) void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇…

卷积神经网络实现手写数字识别 pytorch

卷积神经网络实现手写数字识别 导入相关的库 import torch import torch.nn as nn from torch.autograd import Variable import torch.utils.data as Data import torchvision import matplotlib.pyplot as plt设置相应的超参数 EPOCH1 BATCH_SIZE50 LR0.001 DOWNLOAD_MNIS…

将 KNX 接入 Home Assistant 之二 准备软件

写在前面: 在KNX官网也有关于 Home Assistant 的教程,地址是 Get started with Home Assistant x KNX 需要的东西是 a KNX IP Interface or Routera Raspberry Pian SD Card at least 32 GB 安装 Home Assistant 系统 下载镜像: 地址&…

网络原理-HTTPS协议

在前面说到HTTP中,我们通过抓包,可以看到许多信息内容,其中往往会包含一些敏感信息,这些都是明文传输,当我们的请求被黑客或者不法分子截获后,那就很危险了,因此衍生出了HTTPS协议来对传输数据进行加密。 一、加密原理 基本原理如下: 明文 密钥 > 密文 密文…

【每日刷题】Day50

【每日刷题】Day50 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 654. 最大二叉树 - 力扣(LeetCode) 2. 119. 杨辉三角 II - 力扣&#xff08…

Gitlab不允许使用ssh拉取代码的解决方案

一、起因 之前一直是用ssh进行代码拉取,后来公司搞网安行动,不允许ssh进行连接拉取代码了 因为我是用shell写了个小型的CI/CD,部署前端项目用于后端联调的,因此在自动部署时,不方便人机交互,所以需要自动填充账密。 …

如何在群晖NAS安装WPS Office并使用公网地址远程访问处理文档表格

前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何在群晖NAS安装WPS Office并使用公网地址远程访问处理文档表格,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&a…

水电自动抄表系统是什么?

1.简述:水电自动抄表系统 水电自动抄表系统是一种现代化计量检定解决方法,为提升公用事业服务项目的效率和精确性。传统式手动抄水表方法已经被这类高效率、精准的自动化系统所替代,它能够实时、远程控制地收集解决水电使用数据。 2.系统原…

列表、元组、字典和集合的区别

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在前面介绍了序列中的列表、元组、字典和集合的应用,下面通过表2对这几个数据序列进行比较。 表2 列表、元组、字典和集合的区别 数 据…

【算法】dd爱转转

✨题目链接: dd爱旋转 ✨题目描述 读入一个n∗n的矩阵,对于一个矩阵有以下两种操作 1:顺时针旋180 2:关于行镜像 如 变成 给出q个操作,输出操作完的矩阵 ✨输入描述: 第一行一个数n(1≤n≤1000),表示矩阵大小 接下来n行&#xff…

【全开源】优校管理系统支持微信小程序+微信公众号+H5

概述 优校管理系统(简称优校管)是基于FastAdmin和ThinkPHP进行开发的中小学信息化管理系统,拥有PC版、UniAPP版(高级授权)。支持微信小程序、H5等多平台,主要用于信息管理、教学管理、素养评价,支持多个学校(标准授权限5个,高级授…

Nat Genet|马丁院士团队利用单细胞和空间多组学描绘宫颈鳞癌免疫微环境图谱

宫颈鳞状细胞癌(CSCC)是宫颈癌最常见的组织学类型。虽然局部疾病预后良好,但晚期、转移性或复发性CSCC的5年生存率仅为16.5%,晚期宫颈癌中对免疫检查点阻断的反应有限。细胞异质性和可塑性是肿瘤进展和肿瘤免疫微环境(TIME)调节的…

自由应用大本营?开源免费的Android应用商店:F-Droid Client

F-Droid Client:拥抱开源,守护隐私,让自由软件成为您生活的一部分- 精选真开源,释放新价值。 概览 F-Droid Client是一个开源的Android应用商店,它在GitHub上免费提供。这个项目致力于收集和展示各类自由及开源软件&a…

响应式流和reactor框架进阶

响应式流和reactor框架进阶 响应式流创建、转换、处理 本文档主要介绍在响应式编程中如何从流中获取数据并处理。 前提条件 假设您已经能掌握Java基础、Maven使用、Lamda表达式、响应式编程等基础。 如何获取流中数据 🌏 说明 1、不要试图从流中获取数据出来&a…

牛客NC391 快乐数【simple 模拟法 Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/293b9ddd48444fa493dd17da0feb192d 思路 直接模拟即可Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值…

自动化测试和手动测试相比,哪个更具优势?

自动化测试和手动测试都是软件测试中常用的两种方法,它们在不同的场景下具有不同的优势。下面将从各个角度进行详细的比较,以帮助读者更好地了解两种方法。 1. 效率 自动化测试相对于手动测试具有更高的效率。手动测试需要人工操作执行测试步骤、输入测…

3步找回丢失数据,EasyRecovery让数据恢复如此简单!

在数字化时代,数据已成为我们生活和工作中不可或缺的一部分。然而,数据丢失却是一个令人头疼的问题。无论是因为意外删除、硬盘损坏还是系统崩溃,丢失的文件和数据都可能给我们造成巨大的经济损失和时间浪费。因此,如何高效利用现…