在機(jī)器學(xué)習(xí)的廣闊前景中,transformers 就像建筑奇跡一樣高高聳立,以其復(fù)雜的設(shè)計和捕獲復(fù)雜關(guān)系的能力重塑了我們處理和理解大量數(shù)據(jù)的方式。
自 2017 年創(chuàng)建第一個 Transformer 以來,Transformer 類型呈爆炸式增長,其中包括 ChatGPT 和 DALL-E 等強(qiáng)大的生成式 AI 模型。雖然transformers 在文本到文本或文本到圖像模型中非常有效,但將transformers 應(yīng)用于時間序列時存在一些挑戰(zhàn)。在 2023 年北美開源峰會 上,Ezequiel Lanza 分享了 transformers 模型的問題,并介紹了新的 transformers ,這些 transformers 開始在時間序列方面顯示出有希望的結(jié)果。
這篇文章[1]不會深入探討技術(shù)方面的內(nèi)容,但如果您想閱讀更多內(nèi)容,我們將在全文中提供重要論文的鏈接。
讓我們看看 Transformer 在 Stable Diffusion 中的作用,這是一種深度學(xué)習(xí)模型,可以將短語(例如“戴眼鏡的狗”)轉(zhuǎn)換為圖像。轉(zhuǎn)換器接收用戶輸入的文本并生成文本嵌入。文本嵌入是可以由卷積神經(jīng)網(wǎng)絡(luò) (CNN)(在本例中為 U-NET)讀取的文本表示。雖然穩(wěn)定擴(kuò)散模型使用嵌入來生成圖像,但嵌入可用于生成對時間序列模型有用的附加輸出。
為了理解如何將 Transformer 應(yīng)用到時間序列模型中,我們需要關(guān)注 Transformer 架構(gòu)的三個關(guān)鍵部分:
嵌入和位置編碼
編碼器:計算多頭自注意力
解碼器:計算多頭自注意力
作為一個例子,我們將解釋普通Transformer 是如何工作的,這是一種將簡單短語從一種語言翻譯成另一種語言的Transformer 。
嵌入和位置編碼:如何表示輸入數(shù)據(jù)
當(dāng)您將短語“我愛狗”輸入普通轉(zhuǎn)換器時,一種名為 Word2Vec 的算法會將每個單詞轉(zhuǎn)換為數(shù)字列表(稱為向量)。每個向量都包含有關(guān)單詞含義以及它與其他單詞如何相關(guān)的信息,例如同義詞和反義詞。
模型還必須理解短語中每個單詞的位置。例如,“我愛狗”與“我愛狗”的含義不同。第二種算法稱為位置向量,它使用復(fù)雜的數(shù)學(xué)方程來幫助您的模型理解句子順序。將 Word2Vec 和位置向量算法提供的信息打包在一起,就是所謂的文本嵌入,或者以機(jī)器可以讀取的方式表示的原始短語。
編碼器級別的多頭自注意力
接下來,編碼器接收文本嵌入并將其轉(zhuǎn)換為新的向量,添加信息以幫助模型辨別短語中單詞之間的關(guān)系。例如,在短語“孩子們在公園里玩耍”中,編碼器會將最大權(quán)重分配給“孩子”、“玩耍”和“公園”。我們稱這個過程為自注意力,因?yàn)樗鼪Q定了模型應(yīng)該最關(guān)注哪些單詞。
為了計算自注意力,編碼器為每個單詞創(chuàng)建三個向量——查詢向量、鍵向量和值向量。通過將短語乘以三個矩陣來創(chuàng)建向量。這是一個復(fù)雜的算法,但需要理解的重要部分是短語中的每個單詞都會與短語中的每個其他單詞相乘,并且可能需要大量時間來計算長短語的注意力。
為了更好地理解單詞之間的關(guān)系,自注意力層可以同時運(yùn)行多個頭。這個過程稱為多頭注意力,它允許模型同時關(guān)注短語的不同部分,例如當(dāng)存在短期和長期依賴性時。例如,在短語“動物沒有過馬路,因?yàn)樗哿恕敝校囝^注意力告訴模型“動物”和“它”指的是同一個想法。
解碼器級別的多頭自注意力
解碼器的工作方式與編碼器相同,只是它是使用不同的數(shù)據(jù)集進(jìn)行訓(xùn)練的。例如,在普通 Transformer 中,如果編碼器接受過英語數(shù)據(jù)訓(xùn)練,解碼器接受過法語數(shù)據(jù)訓(xùn)練,則解碼器將運(yùn)行相同的多頭自注意力算法,將原始短語翻譯成法語。
為什么這種Transformer 架構(gòu)不適用于時間序列?時間序列在某些方面就像一種語言,但它與傳統(tǒng)語言不同。在語言中,您可以使用截然不同的單詞或句子順序來表達(dá)相同的想法。一旦基于語言的轉(zhuǎn)換器(例如 vanilla)接受了某種語言的訓(xùn)練,它就可以理解單詞之間的關(guān)系,因此當(dāng)您用兩個不同的輸入表示一個想法時,轉(zhuǎn)換器仍然會得出大致相同的含義。然而,時間序列需要嚴(yán)格的順序——數(shù)據(jù)點(diǎn)的順序更重要。這對使用時間序列轉(zhuǎn)換器提出了挑戰(zhàn)。
讓我們看看我們目前如何解決這個問題以及為什么這些模型存在不足。
目前的方法
自回歸積分移動平均 (ARIMA) 模型適用于某些時間序列,但需要深入了解相關(guān)趨勢、季節(jié)性變化和殘差值,即使如此,它也僅適用于線性相關(guān)性。在許多具有多元問題特征的時間序列中,依賴關(guān)系之間的關(guān)系不是線性的,ARIMA 不起作用。
還有幾種使用神經(jīng)網(wǎng)絡(luò)的方法。
前饋神經(jīng)網(wǎng)絡(luò) (FNN) 模型使用系列中任何前六個數(shù)據(jù)點(diǎn)來預(yù)測接下來的六個數(shù)據(jù)點(diǎn)。盡管 FNN 支持非線性依賴性,但它們要求您手工制作一個專注于非常具體的問題或數(shù)據(jù)子集的模型,這使得為大型數(shù)據(jù)集構(gòu)建該模型過于耗時。
在循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN) 模型中,您可以向模型提供與時間序列相關(guān)的一小部分?jǐn)?shù)據(jù)點(diǎn),RNN 中的單元將記住哪些數(shù)據(jù)點(diǎn)很重要以及它們的權(quán)重是多少。然而,當(dāng)您處理具有長期依賴性的數(shù)據(jù)集時,權(quán)重變得不那么相關(guān),并且模型的準(zhǔn)確性隨著時間的推移而降低。
長短期記憶 (LSTM) 模型與 RNN 類似,不同之處在于每個單元都有一個記憶,允許您在長序列期間更頻繁地更新權(quán)重。這使得 LSTM 成為某些用例的良好解決方案。
Seq2seq 是一種提高 LSTM 性能的方法。您可以將數(shù)據(jù)輸入編碼器,而不是直接輸入網(wǎng)絡(luò),編碼器會生成輸入的特征并輸入解碼器。
Transformer 如何改進(jìn)時間序列?
使用 Transformer 啟用的多頭注意力可以幫助改進(jìn)時間序列模型處理長期依賴性的方式,從而提供優(yōu)于當(dāng)前方法的優(yōu)勢。為了讓您了解變壓器對于長依賴關(guān)系的工作效果如何,請考慮 ChatGPT 可以在基于語言的模型中生成的長而詳細(xì)的響應(yīng)。通過允許一個頭專注于長期依賴性,而另一個頭專注于短期依賴性,將多頭注意力應(yīng)用于時間序列可以產(chǎn)生類似的好處。我們相信 Transformer 可以讓時間序列模型預(yù)測未來多達(dá) 1,000 個數(shù)據(jù)點(diǎn),甚至更多。
二次復(fù)雜度問題
Transformer 計算多頭自注意力的方式對于時間序列來說是有問題的。由于系列中的數(shù)據(jù)點(diǎn)必須乘以系列中的每個其他數(shù)據(jù)點(diǎn),因此添加到輸入中的每個數(shù)據(jù)點(diǎn)都會以指數(shù)方式增加計算注意力所需的時間。這稱為二次復(fù)雜度,在處理長序列時會產(chǎn)生計算瓶頸。
今年早些時候發(fā)布的一項(xiàng)調(diào)查確定了在將 Transformer 應(yīng)用于時間序列之前需要解決的兩項(xiàng)重要網(wǎng)絡(luò)修改:
位置編碼:我們?nèi)绾伪硎据斎霐?shù)據(jù)
注意力模塊:降低時間復(fù)雜度的方法
下一部分將介紹主要要點(diǎn),但您可以閱讀調(diào)查以了解有關(guān)修改及其結(jié)果的更多詳細(xì)信息。
網(wǎng)絡(luò)修改1:位置編碼
2019 年,我們嘗試在普通 Transformer 中應(yīng)用 Word2Vec 編碼過程,但該模型無法充分利用時間序列的重要特征。 Vanilla Transformer 擅長辨別單詞之間的關(guān)系,但不擅長遵循數(shù)據(jù)序列中的嚴(yán)格順序。閱讀更多。
2021 年,我們創(chuàng)建了可學(xué)習(xí)的文本嵌入,使我們能夠在輸入中包含額外的位置編碼信息。與普通 Transformer 中的固定編碼相比,可學(xué)習(xí)的位置編碼允許 Transformer 更加靈活并更好地利用順序排序信息。這有助于 Transformer 了解有關(guān)時間序列的更重要的上下文,例如季節(jié)信息。
網(wǎng)絡(luò)修改2:注意力模塊
為了降低注意力層的二次復(fù)雜度,新的 Transformer 引入了 ProbSparse Attention 的概念。通過使注意力層僅使用最重要的數(shù)據(jù)點(diǎn)而不是所有數(shù)據(jù)點(diǎn)來計算權(quán)重和概率,ProbSparse 有助于大大減少計算注意力所需的時間。
雖然 LogTrans、Pyraformer和 FEDformer 等許多新 Transformer 都納入了這些網(wǎng)絡(luò)修改,但這里我們重點(diǎn)關(guān)注 Informer 和 Spacetimeformer,因?yàn)樗鼈兪情_源的。 GitHub存儲庫提供參考文檔和示例,讓您可以輕松根據(jù)數(shù)據(jù)微調(diào)模型,而無需了解關(guān)注層的每個細(xì)節(jié)。
讓我們看看 Informer 和 Spacetimeformer 如何利用這些網(wǎng)絡(luò)修改,看看它們會生成什么樣的結(jié)果。
「Informer」架構(gòu)
Informer Transformer 使您能夠向它們提供有關(guān)季節(jié)性、每月或假期趨勢的重要信息,以幫助模型了解一年中數(shù)據(jù)行為方式的細(xì)微差異。例如,您的數(shù)據(jù)集在夏季的表現(xiàn)可能與冬季不同。通過位置編碼,您可以告訴模型在一年中的不同時間使用不同的權(quán)重,從而使您可以更好地控制輸入的質(zhì)量。
通過結(jié)合 ProbSparse 注意力模型和位置編碼,Informer 比 LSTM 等傳統(tǒng) Transformer 具有性能優(yōu)勢。當(dāng)預(yù)測未來 24 個數(shù)據(jù)點(diǎn)時,Informer 產(chǎn)生的均方誤差 (MSE) 為 0.577,比 LSTM 的 MSE 0.650 稍好一些。當(dāng)預(yù)測 720 個數(shù)據(jù)點(diǎn)時,性能差異更大,Informer 的 MSE 為 1.215,而 LSTM 的 MSE 為 1.960。我們可以得出的結(jié)論是,Informer 在長序列中提供了稍微更好的結(jié)果,但 LSTM 對于某些短期用例仍然可能產(chǎn)生良好的結(jié)果。
Spacetimeformer 提出了一種表示輸入的新方法。像 Informer 這樣的時間注意力模型表示單個輸入標(biāo)記中每個時間步長的多個變量的值,它沒有考慮特征之間的空間關(guān)系。圖注意力模型允許您手動表示特征之間的關(guān)系,但依賴于不能隨時間變化的硬編碼圖。
Spacetimeformer 結(jié)合了時間和空間注意力方法,創(chuàng)建一個輸入標(biāo)記來表示給定時間單個特征的值。這有助于模型更多地了解空間、時間和價值信息之間的關(guān)系。
與 Informer 一樣,Spacetimeformer 提供的結(jié)果比 LSTM 稍好一些。在預(yù)測未來 40 小時時,Spacetimeformer 的 MSE 為 12.49,略好于 LSTM 的 MSE 14.29。雖然對于較長的序列,這一裕度會變大,但 Spacetimeformer 尚未為每個用例提供比 LSTM 更好的結(jié)果。
讓我們將時間序列模型應(yīng)用于在線精品店。該商店有 11 個微服務(wù),包括允許用戶添加和刪除商品的購物車服務(wù)以及允許用戶搜索單個產(chǎn)品的目錄服務(wù)。
為了演示對最終用戶的影響,我們將預(yù)測用戶必須等待每個微服務(wù)處理請求的時間。基于每個服務(wù)之前 360 個數(shù)據(jù)點(diǎn)的模型,我們對未來的 36 個數(shù)據(jù)點(diǎn)進(jìn)行了短期預(yù)測,并對未來的 120 個數(shù)據(jù)點(diǎn)進(jìn)行了長期預(yù)測。
在預(yù)測接下來的 36 個數(shù)據(jù)點(diǎn)時,Informer 產(chǎn)生的 MSE 為 0.6,略優(yōu)于 LSTM。然而,Informer 需要更多時間來處理。長模型的結(jié)果也是如此:Informer 的預(yù)測更準(zhǔn)確,但處理時間更長。
image-20230917230120011
時間序列的復(fù)雜性各不相同,因此測試模型以找到最適合您的用例的模型非常重要。雖然 LSTM 等傳統(tǒng)模型是某些短期時間序列的有力選擇,但 Informer 和 Spacetimeformer 可以為長期序列提供更準(zhǔn)確的預(yù)測。隨著我們繼續(xù)對注意力層以及輸入數(shù)據(jù)的表示方式進(jìn)行優(yōu)化,我們預(yù)計性能將會提高。此外,作為開源框架,Informer 和 Spacetimeformer 使安裝模型并開始使用數(shù)據(jù)進(jìn)行測試變得更加容易。
[1]Source: https://medium.com/intel-tech/how-to-apply-transformers-to-time-series-models-spacetimeformer-e452f2825d2e