Chronos:时间序列预测基础模型的兴起

部署运行你感兴趣的模型镜像

原文:towardsdatascience.com/chronos-the-rise-of-foundation-models-for-time-series-forecasting-aaeba62d9da3

本文与 Rafael Guedes 共同撰写。

简介

时间序列预测正逐渐向基础模型演变,这得益于它们在其他人工智能(AI)领域的成功。特别是,我们一直在见证这些方法在自然语言处理(NLP)中的成功。基础模型的发展步伐随着时间的推移而加快。每个月都会发布一个新的、更强大的大型语言模型(LLM)。这不仅仅局限于 NLP。我们也在计算机视觉中看到了类似的增长模式。例如,Meta 的 Segment Anything Model(SAM)[1]可以在未见过的图像中识别和准确分割对象。像 LLaVa [2]或 Qwen-VL [3]这样的多模态模型可以处理文本和图像以回答任何用户问题。这些模型之间的共同特征是它们可以执行准确的零样本推理,这意味着它们不需要在您的数据上训练就能有出色的表现。

在这个阶段定义什么是基础模型以及它与传统方法的不同可能是有益的。首先,基础模型是大规模的(即其训练),这为我们提供了对数据中可以找到的主要模式和重要细微差别广泛的理解。其次,它是通用的,即基础模型可以执行各种任务而无需特定任务的训练。尽管它们不需要特定任务的训练,但可以进行微调(也称为迁移学习)。它们可以适应相对较小的数据集,以在该特定任务上表现更好。

为什么基于上述内容,将其应用于时间序列预测如此吸引人呢?首先,我们在自然语言处理(NLP)中设计基础模型来理解和生成文本序列。幸运的是,时间序列数据也是序列性的。前一点也与这样一个事实相符,即这两个问题都需要模型自动从数据序列(时间序列数据中的时间动态)中提取和学习相关特征。此外,基础模型的一般性质意味着我们可以将它们适应到不同的预测任务中。这种灵活性允许我们应用一个单一、强大的模型跨越各种领域和预测挑战。而且,我们还可以针对特定领域和应用进行微调。

TimeGPT [4] 是 Nixtla 为预测开发的第一批基础模型之一。随后,其他公司加入了竞赛。它们开发了新的模型,例如 Salesforce 的 MOIRAI [5]、Morgan Stanley、ServiceNow 和一群加拿大大学开发的 Lag-Llama [6],以及 Google 的 TimesFM [7]。最近,Amazon 也加入了它们,开发了 Chronos [8],这是一个基于语言模型架构的时间序列基础模型。

在本文中,我们深入解释了 Chronos 背后的架构。我们还涵盖了允许模型执行零样本推理的主要组件。在理论概述之后,我们将 Chronos 应用到特定的用例和数据集上。我们涵盖了实际实施细节,并对模型性能进行了彻底分析。最后,我们将 Chronos(小型和大型版本)与 TiDE 在公共数据集上的性能进行了比较。

我们表明,Chronos 能够在公共数据集的零样本推理中击败 TiDE [9]。此外,我们还需要考虑它在没有任何类型微调的情况下执行了零样本推理。Chronos 为基础模型带来的改进是毫无疑问的(您可以在我们之前的文章中查看,我们对该文章进行了深入分析)。我们还提供了证据,表明 Chronos 小型版和大型版之间的差异并不显著。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4983e4f560c298e783e01999c5dba826.png

图 1:TimeGPtT 与 Chronos 与 TiDE 的比较(作者使用 DALL-E 制作)

如往常一样,代码可在我们的 GitHub 上找到。

Chronos:亚马逊通过语言学习时间序列

Chronos 是亚马逊最新的时间序列预测基础模型。它由一个概率模型组成,该模型使用 T5(文本到文本迁移转换器)架构 [10] 来预测未来的模式。

T5 模型系列是由 Google 开发的一系列语言模型。T5 将每个 NLP 任务视为一个文本到文本的问题,这与为特定 NLP 任务(如文本分类、机器翻译或文本摘要)设计的传统模型不同。T5 建立在基于编码器-解码器模型的 transformer 架构之上 [11]。在 T5 的背景下,编码器和解码器都由 transformer 块组成,这些块将输入文本处理成连续表示,然后解码器使用这些表示逐个生成输出文本。

T5 模型系列包括不同大小的多个变体。它从小型模型开始,参数较少,旨在更高效且适用于资源受限的环境,到大型模型,参数更多,能够捕捉数据中的更复杂模式和细微差别。

Chronos 的作者选择基于 T5 的方法的逻辑是思考一个预测序列中下一个标记的 LLM 与预测序列中下一个值的时序模型之间的基本区别。正如我们在引言中讨论的,它们在本质上非常相似。主要区别在于,在 LLM 的情况下,我们有一个有限的单词字典可以预测。相反,在时序模型的情况下,我们有一个无界的连续值集合。尽管如此,这两个模型都使用数据的顺序结构来预测未来的值。因此,相关的问题是:我们能否将连续值转换成离散值?

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a22af088442ee2ebdd8eb3c88a4fd76d.png

图 2:Chronos 工作的一般概述:预处理步骤(左),训练的损失函数(中)和推理过程(右)(来源)

将 LLM 应用于时序预测

预处理步骤

正如我们之前提到的,LLM 和预测模型之间的主要区别是 LLM 期望处理有限数量的标记。因此,我们需要将时序数据中典型的无界连续值集合转换成一个有限的标记集合。这个标记化过程需要 3 个步骤:

1. 缩放将负责将输入数据映射到量化步骤(稍后解释)中使用的有用值范围。与它通常的目标——促进深度学习模型的优化——相反,缩放帮助我们创建输入标记。作者使用了均值缩放,它根据预定义的历史值上下文长度的绝对值的平均值来归一化输入值。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7ff4109b115da4fc72c5d6d3ba7b265e.png

方程 1:均值缩放,其中 C 是上下文长度。

2. 量化负责通过分箱将缩放后的连续值转换为离散标记。作者使用了均匀分箱,它将特定范围内的所有值分组到同一个箱子或换句话说,到同一个标记。在图 3 中,为了简单起见,我们使用了 4 个不同的箱子。实际上,模型使用了 4096 个不同的箱子。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2cae1e949be37b44c9d23fd5606b218d.png

图 3:均匀分箱应用的示例(图片由作者提供)。

均匀分箱有一个强烈的局限性,因此接下来我们将讨论一些替代方案。当用于时序预测时,它面临着与决策树相同的问题。它不能预测训练集中目标变量范围之外的值。

另一种可能的方法是使用分位数分箱。这会创建具有相同样本数量的箱子。然而,它也有其局限性。因为它强烈假设来自未见数据的值的分布,这可能会增加训练数据和预测数据之间的异质性。

3. 作者添加了特殊语言标记来表示序列的结束(EOS)。另一种有趣的方法是使用特殊标记(PAD)来处理缺失值。这些缺失值可能是由于缺少观察或填充造成的。填充通常用于通过将不同长度的时序转换为通用固定长度来创建训练批次。

训练策略

Chronos 使用与其他语言模型相同的损失函数——交叉熵。它通过分类进行回归,并训练以最小化预测分布和真实分布之间的差异。然而,交叉熵没有距离感,这在时间序列数据中是至关重要的。连续的两个值通常比非连续的两个值更相关,并且随着它们在时间上进一步分离,它们的关联性往往会降低(也称为自相关性)。因此,模型预计会学习如何根据训练数据集中箱子索引的分布将附近的箱子关联起来。

作者决定保持与语言模型相同的损失函数,因为它不需要对语言模型架构进行任何修改。这使得更改骨干架构以使用其他大型语言模型(例如,Mixtral [12]、Llama2 [13])及其相应的实用程序变得更容易。它还允许模型不必局限于假设输出分布的任何特定形状(例如,正态分布)。相反,它可以学习预测遵循训练数据中存在的任何类型的分布的未来值。

推理

通常,一个大型语言模型可以生成一个标记 ID 的样本作为预测。因此,为了获得概率预测,作者为预测范围内的每个步骤抽取几个样本。之后,他们需要反转预处理步骤中执行的量化缩放操作,以便输入语言模型。

考虑到为t+1抽取的 4 个样本,首先,他们通过将标记 ID 映射回缩放值(即区间的中心值)来执行反量化操作:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/21cf50e6a99cfec2383bb9221e6580d1.png

图 4:反量化过程(作者图片)

然后,他们通过乘以它之前的前置上下文长度的平均绝对值来反缩放值:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c428abb501051add75862de3da19ca0c.png

图 5:反缩放过程(作者图片)

最后,通过从样本中提取不同的分位数来生成最终的预测区间,例如,Q10 用于下限,Q50 用于中值,Q90 用于上限:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/40a98656bee72e678a4f4dfff927702b.png

图 6:获取 t+1 的中间值预测(图片由作者提供)

其他重要备注

作者选择使用 T5 架构,因为它有不同的尺寸,从 16M(微型)到 11B(XXL)参数。然而,他们将词汇量从 32,128 减少到 4,096,导致参数更少(从 8M 到 710M 模型——与 NLP 对手相比相当小)。他们还测试了 GPT-2,以突出他们的方法下,任何语言模型都可以作为 T5 的替代品。

模型不允许外部信息,如静态(产品品牌、颜色等)或动态(产品价格、宏观经济数据等)协变量。它还将每个时间序列视为一个简单的序列,没有时间或频率信息(每小时、每天、每周或每月数据),这可能在建模季节性时成为劣势。另一个限制是它仅是一个单变量模型。此外,它一次只能预测一个时间序列,这不允许建模时间序列之间的依赖关系。

与其他时间序列基础模型如 TimeGPT 类似,通过在来自不同领域和频率的数据集中训练模型来实现零样本推理。具体来说,作者使用了来自能源、交通、医疗保健、零售、网络、天气和金融等领域的数据库。

比较 Chronos 与 TiDE

在本节中,我们将使用 Chronos 通过一个在 cc-by-4.0 许可下公开可用的真实世界数据集来预测澳大利亚的旅游访问者。随后,我们将使用 Python 库 _Dart_s 的实现比较 Chronos(小型和大型版本)与 TiDE 的预测性能。

我们通过从 Trading Economics,使用官方来源的经济指标,增强了数据集,该网站提供了经济协变量(例如,CPI、通胀率、GDP)。我们还进行了一些预处理,以进一步提高数据集的可用性。数据集的最终结构如下:

  • 唯一 ID:澳大利亚各州、区域以及访问目的(例如,商务、假日、访问、其他)的编码名称的组合。

  • 时间:表示数据集的时间维度,为每个序列动态调整。

  • 目标:预测的目标变量,特别关注访问。

  • 动态协变量:随时间变化的宏观经济指标,如 CPI、通胀率和 GDP。

  • 静态协变量(Static_1 到 Static_4):从唯一 ID 中提取,为分析提供额外信息,包括地理和访问目的细节。

我们将数据集的新版本存储在这里,以便我们的实验可以轻松复制。

我们首先导入库并设置全局变量。我们设置了日期列、目标列、静态协变量、动态协变量填充为 0、动态协变量使用线性插值填充、序列的频率、预测范围以及要使用的缩放器。

%load_ext autoreload
%autoreload 2
import numpy as np
import pandas as pd
import torch
import utils
from datetime import timedelta
from chronos import ChronosPipeline
from darts import TimeSeries
from darts.dataprocessing.pipeline import Pipeline
from darts.models import TiDEModel
from darts.dataprocessing.transformers import Scaler
from darts.utils.timeseries_generation import datetime_attribute_timeseries
from darts.utils.likelihood_models import QuantileRegression
from darts.dataprocessing.transformers import StaticCovariatesTransformer, MissingValuesFiller

TIME_COL = "Date"
TARGET = "visits"
STATIC_COV = ["static_1", "static_2", "static_3", "static_4"]
DYNAMIC_COV = ['CPI', 'Inflation_Rate', 'GDP']
FREQ = "MS"
FORECAST_HORIZON = 8 # months
SCALER = Scaler()
TRANSFORMER = StaticCovariatesTransformer()
PIPELINE = Pipeline([SCALER, TRANSFORMER])

之后,我们加载我们的数据集并使用数据集描述中提到的那些外生特征对其进行丰富:

# load data and exogenous features
df = pd.read_csv('data/data.csv', parse_dates=['Date']).drop(columns=['Year', 'Month']).set_index('Date')
df = utils.preprocess_dataset(df, DYNAMIC_COV, TIME_COL, TARGET)

print(f"Distinct number of time series: {len(df['unique_id'].unique())}")
df.head()

时间序列数量:304

一旦数据集被加载,我们就可以在训练集和测试集之间分割数据(我们决定使用最后 8 个月的数据作为测试集)。并将 pandas 的数据框转换为 Darts TimeSeries 格式。

  • 使用_TimeSeries.from_group*dataframe*函数,我们可以轻松定义静态协变量、我们的目标、时间参考列以及序列的频率。

  • 我们还使用了_fill_missing*dates*参数,在目标变量中用 0 填充,以防我们的某些序列在周之间有间隔。

# 8 months to test
train = df[df[TIME_COL] <= (max(df[TIME_COL])-pd.DateOffset(months=FORECAST_HORIZON))]
test = df[df[TIME_COL] > (max(df[TIME_COL])-pd.DateOffset(months=FORECAST_HORIZON))]

# read train and test datasets and transform train dataset
train_darts = TimeSeries.from_group_dataframe(
      df=train,
      group_cols=STATIC_COV,
      time_col=TIME_COL,
      value_cols=TARGET,
      freq=FREQ,  
      fill_missing_dates=True,
      fillna_value=0)

# since we have several time series not all of them have the same number of weeks in the forecast set
print(f"Weeks for training: {len(train[TIME_COL].unique())} from {min(train[TIME_COL]).date()} to {max(train[TIME_COL]).date()}")
print(f"Weeks for testing: {len(test[TIME_COL].unique())} from {min(test[TIME_COL]).date()} to {max(test[TIME_COL]).date()}")

训练月份:从 1998-01-01 到 2016-04-01 的 220 个月;测试月份:从 2016-05-01 到 2016-12-01 的 8 个月

我们已经有了历史数据的时间序列格式,现在我们需要以相同的格式创建动态协变量。

# create dynamic covariates for each serie in the training darts
dynamic_covariates = []
for serie in train_darts:
    # add the month and week as a covariate
    covariate = datetime_attribute_timeseries(
        serie,
        attribute="month",
        one_hot=True,
        cyclic=False,
        add_length=FORECAST_HORIZON,
    )

    static_1 = serie.static_covariates['static_1'].item()
    static_2 = serie.static_covariates['static_2'].item()
    static_3 = serie.static_covariates['static_3'].item()
    static_4 = serie.static_covariates['static_4'].item()

    # create covariates to fill with interpolation
    dyn_cov_interp = TimeSeries.from_dataframe(df[(df['static_1'] == static_1) &amp; (df['static_2'] == static_2) &amp; (df['static_3'] == static_3) &amp; (df['static_4'] == static_4)], time_col=TIME_COL, value_cols=DYNAMIC_COV, freq=FREQ, fill_missing_dates=True)
    covariate = covariate.stack(MissingValuesFiller().transform(dyn_cov_interp))

    dynamic_covariates.append(covariate)Weeks for training: 126 from 20100205 to 20120629 
Weeks for testing: 17 from 20120706 to 20121026

在分割数据和创建协变量之后,我们可以使用 TiDE 预测 304 个序列:

# scale covariates
dynamic_covariates_transformed = SCALER.fit_transform(dynamic_covariates)

# scale data and transform static covariates
data_transformed = PIPELINE.fit_transform(train_darts)

TiDE_params = {
    "input_chunk_length": 12, # number of months to lookback
    "output_chunk_length": FORECAST_HORIZON,
    "num_encoder_layers": 2,
    "num_decoder_layers": 2,
    "decoder_output_dim": 1,
    "hidden_size": 15,
    "temporal_width_past": 4,
    "temporal_width_future": 4,
    "temporal_decoder_hidden": 26,
    "dropout": 0.1,
    "batch_size": 16,
    "n_epochs": 15,
    "likelihood": QuantileRegression(quantiles=[0.25, 0.5, 0.75]),
    "random_state": 42,
    "use_static_covariates": True,
    "optimizer_kwargs": {"lr": 1e-3},
    "use_reversible_instance_norm": False,
}

model = TiDEModel(**TiDE_params)
model.fit(data_transformed, future_covariates=dynamic_covariates_transformed, verbose=False)
pred = SCALER.inverse_transform(model.predict(n=FORECAST_HORIZON, series=data_transformed, future_covariates=dynamic_covariates_transformed, num_samples=50))
tide_forecast = utils.transform_predictions_to_pandas(pred, TARGET, train_darts, [0.25, 0.5, 0.75])

一旦预测完成,我们将使用相同的数据使用 Chronos 进行预测。由于 Chronos 不是一个多元时间序列模型,我们需要单独预测每个序列。首先,我们加载了两个模型,即小版本和大版本,然后我们在数据集中循环遍历 304 个序列。

# load model
pipeline_tiny = ChronosPipeline.from_pretrained(
  "amazon/chronos-t5-tiny",
  device_map="cuda",
  torch_dtype=torch.bfloat16,
)

pipeline_large = ChronosPipeline.from_pretrained(
  "amazon/chronos-t5-large",
  device_map="cuda",
  torch_dtype=torch.bfloat16,
)

# run forecast
forecast_tiny = []
forecast_large = []
for ts in train_darts:
    # tiny
    lower, mid, upper = utils.chronos_forecast(pipeline_tiny, ts.pd_dataframe().reset_index(), FORECAST_HORIZON, TARGET)
    forecast_tiny.append(utils.convert_forecast_to_pandas([lower, mid, upper], test[test['unique_id'] == list(ts.static_covariates_values())[0][0]+list(ts.static_covariates_values())[0][1]+list(ts.static_covariates_values())[0][2]+list(ts.static_covariates_values())[0][3]]))

    # large
    lower, mid, upper = utils.chronos_forecast(pipeline_large, ts.pd_dataframe().reset_index(), FORECAST_HORIZON, TARGET)
    forecast_large.append(utils.convert_forecast_to_pandas([lower, mid, upper], test[test['unique_id'] == list(ts.static_covariates_values())[0][0]+list(ts.static_covariates_values())[0][1]+list(ts.static_covariates_values())[0][2]+list(ts.static_covariates_values())[0][3]]))

# convert list to data frames
forecast_tiny = pd.concat(forecast_tiny)
forecast_large = pd.concat(forecast_large)

一旦预测完成,我们可以绘制真实值和预测值。我们决定检查按量度排名前三的序列:

# get series ordered by volume in a descending way
series = test.groupby('unique_id')[TARGET].sum().reset_index().sort_values(by=TARGET, ascending=False)['unique_id'].tolist()

for ts in series[:3]:
    utils.plot_actuals_forecast(df[df["unique_id"]==ts], forecast_tiny[forecast_tiny["unique_id"] == ts], ts)
    utils.plot_actuals_forecast(df[df["unique_id"]==ts], forecast_large[forecast_large["unique_id"] == ts], ts)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d7a1151bcd622a5d9062d6876e252188.png

图 9:Chronos 预测值与实际值对比(图片由作者提供)

图 9 显示,Chronos 的大版本和小版本之间没有显著差异。对于ABBHol,两种版本都成功完美捕捉了数据的季节性和峰值和低谷的时间,而没有使用任何外部信息。

在从 Chronos 获得预测之后,我们现在可以加载由 TiDE 生成的预测并计算用于比较的预测性能指标。为了更好的可解释性,我们使用了平均绝对百分比误差(MAPE)作为我们的比较指标。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5262890019fb501d2140d294967afa59.png

图 10:Chronos 与 TiDE 之间的 MAPE 比较(图片由作者提供)

如图 10 所示,Chronos 大型在 8 个月中有 6 个月优于 TiDE。对于前 100 个时间序列,TiDE 在 8 个月中有 7 个月的 MAPE 高于 Chronos 的小型版本。尽管我们没有对 TiDE 进行任何类型的超参数调整,但在零样本推理设置下,Chronos 仍然能够比专门针对此数据集训练的强大模型如 TiDE 取得更好的结果,这仍然令人印象深刻。

结论

本文探讨了 Chronos,这是最近用于时间序列预测的最新基础模型。这类模型承诺在零样本推理中表现准确,这对于缺乏开发 SOTA 模型专业知识的组织来说特别有用。我们的分析显示,Chronos 在 MAPE 方面显著优于 TiDE。此外,结果显示两个 Chronos 版本(小型和大型)之间没有显著差异。

我们想强调的一个关键方法论要点是在得出明确结论之前,在私有数据集上测试新模型的重要性。本文讨论的一个基本点是这些模型面临的挑战,类似于 LLMs 的挑战:它们难以在其训练分布之外生成新数据。鉴于模型开发者通常不会公开他们的训练数据集,这些模型可能在测试我们使用的相同公共数据集上进行了训练。

在使用私有数据集进行测试时,一个有趣的可能性是将我们自己的数据中微调过的 Chronos 版本与 TiDE 等模型进行比较。

开发时间序列预测基础模型的 AI 竞赛才刚刚开始,我们将密切关注其进展,并在此处进行报道。敬请关注!

关于我

人工智能领域的连续创业者和领导者。我为商业开发 AI 产品,并投资于专注于 AI 的初创公司。

ZAAI 创始人 | LinkedIn | X/Twitter

参考文献

[1] Kirillov, A., Mintun, E., Ravi, N., Mao, H., Rolland, C., Gustafson, L., Xiao, T., Whitehead, S., Berg, A. C., Lo, W.-Y., Dollár, P., & Girshick, R. (2023). Segment Anything. arXiv. arxiv.org/abs/2304.02643

[2] 刘辉,李晨,吴强,李宇杰. (2023). 视觉指令调整. arXiv. arxiv.org/abs/2304.08485

[3] 白杰,白松,杨思,王思,谭思,王鹏,林杰,周诚,周杰. (2023). Qwen-VL:一种用于理解、定位、文本阅读等的多功能视觉语言模型. arXiv. arxiv.org/abs/2308.12966

[4] Garza, A., & Mergenthaler-Canseco, M. (2023). TimeGPT-1. arXiv. arxiv.org/abs/2310.03589

[5] Woo, G., Liu, C., Kumar, A., Xiong, C., Savarese, S., & Sahoo, D. (2024). 统一训练通用时间序列预测 Transformer. arXiv. arxiv.org/abs/2402.02592

[6] Rasul, K., Ashok, A., Williams, A. R., Ghonia, H., Bhagwatkar, R., Khorasani, A., Darvishi Bayazi, M. J., Adamopoulos, G., Riachi, R., Hassen, N., Biloš, M., Garg, S., Schneider, A., Chapados, N., Drouin, A., Zantedeschi, V., Nevmyvaka, Y., & Rish, I. (2024). Lag-Llama:向概率时间序列预测的基础模型迈进. arXiv. arxiv.org/abs/2310.08278

[7] Das, A., Kong, W., Sen, R., & Zhou, Y. (2024). 时间序列预测的仅解码器基础模型. arXiv. arxiv.org/abs/2310.10688

[8] Ansari, A. F., Stella, L., Turkmen, C., Zhang, X., Mercado, P., Shen, H., Shchur, O., Rangapuram, S. S., Arango, S. P., Kapoor, S., Zschiegner, J., Maddix, D. C., Mahoney, M. W., Torkkola, K., Wilson, A. G., Bohlke-Schneider, M., & Wang, Y. (2024). Chronos:学习时间序列的语言. arXiv. arxiv.org/abs/2403.07815

[9] Das, A., Kong, W., Leach, A., Mathur, S., Sen, R., & Yu, R. (2023). 使用 TiDE 进行长期预测:时间序列密集编码器. arXiv. arxiv.org/abs/2304.08424

[10] Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., Zhou, Y., Li, W., & Liu, P. J. (2019). 使用统一文本到文本 Transformer 探索迁移学习的极限. arXiv. arxiv.org/abs/1910.10683

[11] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2023). 注意力即一切。arXiv. arxiv.org/abs/1706.03762

[12] Touvron, H., Martin, L., Stone, K., Albert, P., Almahairi, A., Babaei, Y., Bashlykov, N., Batra, S., Bhargava, P., Bhosale, S., Bikel, D., Blecher, L., Ferrer, C. C., Chen, M., Cucurull, G., Esiobu, D., Fernandes, J., Fu, J., Fu, W., Fuller, B., Gao, C., Goswami, V., Goyal, N., Hartshorn, A., Hosseini, S., Hou, R., Inan, H., Kardas, M., Kerkez, V., Khabsa, M., Kloumann, I., Korenev, A., Koura, P. S., Lachaux, M.-A., Lavril, T., Lee, J., Liskovich, D., Lu, Y., Mao, Y., Martinet, X., Mihaylov, T., Mishra, P., Molybog, I., Nie, Y., Poulton, A., Reizenstein, J., Rungta, R., Saladi, K., Schelten, A., Silva, R., Smith, E. M., Subramanian, R., Tan, X. E., Tang, B., Taylor, R., Williams, A., Kuan, J. X., Xu, P., Yan, Z., Zarov, I., Zhang, Y., Fan, A., Kambadur, M., Narang, S., Rodriguez, A., Stojnic, R., Edunov, S., & Scialom, T. (2023). Llama 2:开放基础和微调聊天模型. arXiv. arxiv.org/abs/2307.09288

[13] 姜阿强, 沙布罗勒, 罗克斯, 门施, 萨瓦里, 巴姆福德, 查普洛特, 德拉斯·卡萨斯, 布奥·哈纳, 布雷桑, 莱恩盖尔, 博尔, 拉姆普尔, 拉沃德, 萨乌尼尔, 拉沙乌, 斯托克, 苏布兰南, 杨, 安托尼亚克, 莱·斯高, 日尔维, 拉夫里尔, 王泰, 拉克罗伊, & 埃尔·赛义德 (2024). 专家混合. arXiv. arxiv.org/abs/2401.04088

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值