使用Transformer來進行時序預測可還行?
大語言模型的成功充分證明了Transformer架構的先進性,越來越多的人希望把它應用到其它領域,而非NLP領域本身,因而也催生了以一套Transformer架構統一各種模態的研究熱點。
而在工業界有一個非常常見的場景卻鮮有涉及,那就是結構化數據的時序預測類場景,通常認為這種方式利用統計和經典回歸類模型就已經足夠了,并且確實在過去的研究來看,以Transformer為代表的,在NLP,CV等方面大殺四方的深度學習模型在這方面表現也并不夠出色。
但這并不表示學術界和工業界沒有在這方面有嘗試,甚至可以說,這可能會是下一個爆點。今天我們就圍繞這個話題做一些簡單介紹。
利用Transformer來進行時序預測,有兩個大的方向,一個是針對下游任務訓練一個專有任務模型,另一個是做預訓練通用大模型。
- 專有任務模型
這類思路起步較早,以N-BEATS、N-HiTS、PatchTST和TimesNet,以及最近清華與螞蟻金服出的iTransformer為代表,試圖通過各種手段來適配時序預測場景。它們大體可以根據是否修改組件和架構分為四類。
第一類是最基本的做法,不改變架構,但改進組件以適應場景,特別是用于時間依賴性建模的注意力模塊和長序列的復雜性優化,以autoformer,informer為代表。然而,適配成本較高,性能也備受線性預測器挑戰。
第二類是在不改變結構和組件的情況下充分利用Transformer的特性提升模型性能,以PatchTST為代表。它更關注時間序列的固有處理,如平穩化、通道獨立性和修補,從而帶來持續改進的性能。此外,面對多個變量的獨立性和相互作用的日益重要。
第三類在組件和架構均對Transformer進行改造,以CrossFormer為代表。通過改造的注意力機制和架構明確地捕捉到跨時間和跨變量的依賴性。
第四類是僅調整架構,并不改變transfomer原生組件,研究者認為并不是這些組件不好,而是使用方式不當導致的,以itransformer為代表。
值得一提的是,傳統的Transformer模型在時間序列預測中存在性能下降和計算爆炸的問題,同時對于具有較大回溯窗口的序列預測也存在挑戰。此外,傳統的Transformer模型將每個時間步的多個變量嵌入到同一個標記中,可能導致學習到的注意力無意義。作為這一方向最新進展的代表,iTransformer通過不同的嵌入方式和編碼方式,能夠更好地處理多元相關性,在沒有修改Transformer的任何原生組件的條件下,而是通過全新的倒置視角來實現更好的預測性能,對PatchTST(SOTA)提出了挑戰。
??https://arxiv.org/pdf/2310.06625v3.pdf??
- 通用時序大模型
這一思路顯然受到了GPT-3這樣的通用大語言模型的啟發,嘗試通過預訓練一個大模型,能夠在zero-shot下進行時序預測。這一方向聽起來非常的時髦,也同時存在巨大的風險,業內對于這樣的方式也褒貶不一。其中一個最大的限制就是它很難找到像大語言模型所需要的海量的高質量訓練數據。另外,不同領域的問題也很難像語言、圖片,視頻那樣具有泛化性。
這一方向典型代表是TimeGPT,它是由Nixtla提出的,是一個基于Transformer的時間序列模型,采用歷史值窗口來進行預測,并添加本地位置編碼來豐富輸入。該模型通過捕捉過去事件的多樣性,進而正確地推斷潛在的未來分布。它采用了公開可用的最大時間序列數據集進行訓練,包含超過1000億個數據點。這個訓練集涵蓋了來自金融、經濟、人口統計、醫療保健、天氣、物聯網傳感器數據、能源、網絡流量、銷售、交通和銀行業等廣泛領域的時間序列。由于這種多樣化的領域集合,訓練數據集包含了具有各種特征的時間序列。和timeGPT同類型的還有EarthPT,一個用于地球觀測的時間序列基礎模型。
??https://arxiv.org/pdf/2310.03589.pdf??
需要說明的是,TimeGPT并不是直接基于現有的大型語言模型。雖然TimeGPT遵循在大量數據集上訓練大型Transformer模型的原則,但其架構專門為用于處理時間序列數據而設計,經過訓練后,旨在最小化預測誤差。具體實現方法論文語焉不詳,有人猜測是利用patchTST或者NHITS實現。
下表是其論文中提到的性能對比:
另一個直觀的性能比較是,利用相同的數據集(marcopeix/time-seriesanalysis/blob/master/data/medium_views_published_holidays.csv),微調TimeGPT與采用N-BEATS, N-HiTS 和 PatchTST 這樣的第一類方法訓練的模型進行比較。從結果看,經過簡單微調的TimeGPT表現比PatchTST更好,獲得了第一。
具體實驗可參考:https://github.com/marcopeix/time-series-analysis/blob/master/TimeGPT.ipynb
另外,TimeGPT作為一個商業模型,提供了完備的使用文檔,可以在其模型上預估和微調自己的時序模型。
nixtla_client = NixtlaClient(
# defaults to os.environ.get("NIXTLA_API_KEY")
api_key = 'my_api_key_provided_by_nixtla'
)
# df: A pandas dataframe containing the time series data.
# h: The number of steps ahead to forecast.
# freq: The frequency of the time series in Pandas format. See pandas’ available frequencies.
# time_col: Column that identifies the datestamp column.
# target_col: The variable that we want to forecast.
#預測
timegpt_fcst_pred_int_df = nixtla_client.forecast(
df=df, h=12, level=[80, 90, 99.7],
time_col='timestamp', target_col='value',
)
#微調
timegpt_fcst_finetune_df = nixtla_client.forecast(
df=df, h=12, finetune_steps=10,
time_col='timestamp', target_col='value',
)
更多可參考:https://docs.nixtla.io/docs/timegpt_quickstart
綜上,可以看出目前基于transformer的時序預測領域尚處于早期階段,兩種思路誰更優尚無法判斷,能否取代傳統機器學習方式也無定論,但可以肯定的是,未來肯定會有更多人關注這一領域,或許隨著數據和方法的不斷完備,出現一個類似ChatGPT這樣的新物種也未嘗不可能。
本文轉載自 ??AI工程化??,作者: ully
