精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

人工智能 深度學(xué)習(xí)
時(shí)間序列預(yù)測(cè)在最近兩年內(nèi)發(fā)生了巨大的變化,尤其是在kaiming的MAE出現(xiàn)以后,現(xiàn)在時(shí)間序列的模型也可以用類似MAE的方法進(jìn)行無(wú)監(jiān)督的預(yù)訓(xùn)練

Makridakis M-Competitions系列(分別稱為M4和M5)分別在2018年和2020年舉辦(M6也在今年舉辦了)。對(duì)于那些不了解的人來(lái)說(shuō),m系列得比賽可以被認(rèn)為是時(shí)間序列生態(tài)系統(tǒng)的一種現(xiàn)有狀態(tài)的總結(jié),為當(dāng)前得預(yù)測(cè)的理論和實(shí)踐提供了經(jīng)驗(yàn)和客觀的證據(jù)。

2018年M4的結(jié)果表明,純粹的“ ML”方法在很大程度上勝過(guò)傳統(tǒng)的統(tǒng)計(jì)方法,這在當(dāng)時(shí)是出乎意料的。在兩年后的M5[1]中,最的高分是僅具有“ ML”方法。并且所有前50名基本上都是基于ML的(大部分是樹(shù)型模型)。這場(chǎng)比賽看到了LightGBM(用于時(shí)間序列預(yù)測(cè))以及Amazon's Deepar [2]和N-Beats [3]的首次亮相。 N-Beats模型于2020年發(fā)布,并且優(yōu)于M4比賽的獲勝者3%!

最近的 Ventilator Pressure Prediction比賽展示了使用深度學(xué)習(xí)方法來(lái)應(yīng)對(duì)實(shí)時(shí)時(shí)間序列挑戰(zhàn)的重要性。比賽的目的是預(yù)測(cè)機(jī)械肺內(nèi)壓力的時(shí)間順序。每個(gè)訓(xùn)練實(shí)例都是自己的時(shí)間序列,因此任務(wù)是一個(gè)多個(gè)時(shí)間序列的問(wèn)題。獲勝團(tuán)隊(duì)提交了多層深度架構(gòu),其中包括LSTM網(wǎng)絡(luò)和Transformer 塊。

在過(guò)去的幾年中,許多著名的架構(gòu)已經(jīng)發(fā)布,如MQRNN和DSSM。所有這些模型都利用深度學(xué)習(xí)為時(shí)間序列預(yù)測(cè)領(lǐng)域貢獻(xiàn)了許多新東西。除了贏得Kaggle比賽,還給我們帶來(lái)了更多的進(jìn)步比如:

  • 多功能性:將模型用于不同任務(wù)的能力。
  • MLOP:在生產(chǎn)中使用模型的能力。
  • 解釋性和解釋性:黑盒模型并不那么受歡迎。

本文討論了5種專門(mén)研究時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)體系結(jié)構(gòu),論文是:

  1. N-BEATS(ElementAI)
  2. DeepAR(Amazon)
  3. Spacetimeformer[4]
  4. Temporal Fusion Transformer or TFT(Google) [5]
  5. TSFormer(時(shí)間序列中的MAE)[7]

N-BEATS

這種模式直接來(lái)自于(不幸的)短命的ElementAI公司,該公司是由Yoshua Bengio聯(lián)合創(chuàng)立的。頂層架構(gòu)及其主要組件如圖1所示:

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

N-BEATS是一個(gè)純粹的深度學(xué)習(xí)架構(gòu),它基于集成前饋網(wǎng)絡(luò)的深度堆棧,這些網(wǎng)絡(luò)也通過(guò)正向和反向的相互連接進(jìn)行堆疊。

每一個(gè)塊只對(duì)由前一個(gè)的backcast產(chǎn)生的殘差進(jìn)行建模,然后基于該誤差更新預(yù)測(cè)。該過(guò)程模擬了擬合ARIMA模型時(shí)的Box-Jenkins方法。

以下是該模型的主要優(yōu)勢(shì):

表達(dá)性強(qiáng)且易于使用:該模型易于理解,具有模塊化結(jié)構(gòu),它被設(shè)計(jì)為需要最小的時(shí)間序列特征工程并且不需要對(duì)輸入進(jìn)行縮放。

該模型具有對(duì)多個(gè)時(shí)間序列進(jìn)行概括的能力。換句話說(shuō),分布略有不同的不同時(shí)間序列可以用作輸入。在N-BEATS中是通過(guò)元學(xué)習(xí)實(shí)現(xiàn)的。元學(xué)習(xí)過(guò)程包括兩個(gè)過(guò)程:內(nèi)部學(xué)習(xí)過(guò)程和外部學(xué)習(xí)過(guò)程。內(nèi)部學(xué)習(xí)過(guò)程發(fā)生在塊內(nèi)部,并幫助模型捕獲局部時(shí)間特征。外部學(xué)習(xí)過(guò)程發(fā)生在堆疊層,幫助模型學(xué)習(xí)所有時(shí)間序列的全局特征。

雙重殘差疊加:殘差連接和疊加的想法是非常巧妙的,它幾乎被用于每一種類型的深度神經(jīng)網(wǎng)絡(luò)。在N-BEATS的實(shí)現(xiàn)中應(yīng)用了相同的原理,但有一些額外的修改:每個(gè)塊有兩個(gè)殘差分支,一個(gè)運(yùn)行在回看窗口(稱為backcast),另一個(gè)運(yùn)行在預(yù)測(cè)窗口(稱為forecast)。

每一個(gè)連續(xù)的塊只對(duì)由前一個(gè)塊重建的backcast產(chǎn)生的殘差進(jìn)行建模,然后基于該誤差更新預(yù)測(cè)。這有助于模型更好地逼近有用的后推信號(hào),同時(shí)最終的堆棧預(yù)測(cè)預(yù)測(cè)被建模為所有部分預(yù)測(cè)的分層和。就是這個(gè)過(guò)程模擬了ARIMA模型的Box-Jenkins方法。

可解釋性:模型有兩種變體,通用的和可解釋性的。在通用變體中,網(wǎng)絡(luò)任意學(xué)習(xí)每個(gè)塊的全連接層的最終權(quán)值。在可解釋的變體中,每個(gè)塊的最后一層被刪除。然后將后推backcast和預(yù)測(cè)forecast分支乘以模擬趨勢(shì)(單調(diào)函數(shù))和季節(jié)性(周期性循環(huán)函數(shù))的特定矩陣。

注意:原始的N-BEATS實(shí)現(xiàn)只適用于單變量時(shí)間序列。

DeepAR

結(jié)合深度學(xué)習(xí)和自回歸特性的新穎時(shí)間序列模型。圖2顯示了DeepAR的頂層架構(gòu):

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

以下是該模型的主要優(yōu)勢(shì):

DeepAR在多個(gè)時(shí)間序列上工作得非常好:通過(guò)使用多個(gè)分布略有不同的時(shí)間序列來(lái)構(gòu)建全局模型。也適用于許多現(xiàn)實(shí)場(chǎng)景。例如電力公司可能希望為每個(gè)客戶推出電力預(yù)測(cè)服務(wù),每個(gè)客戶都有不同的消費(fèi)模式(這意味著不同的分布)。

除了歷史數(shù)據(jù),DeepAR還允許使用已知的未來(lái)時(shí)間序列(自回歸模型的一個(gè)特點(diǎn))和額外的靜態(tài)屬性。在前面提到的電力需求預(yù)測(cè)場(chǎng)景中,一個(gè)額外的時(shí)間變量可以是月份(作為一個(gè)整數(shù),值在1-12之間)。假設(shè)每個(gè)客戶都與一個(gè)測(cè)量功耗的傳感器相關(guān)聯(lián),那么額外的靜態(tài)變量將是sensor_id或customer_id之類的東西。

如果莫熟悉使用MLPs和rnn等神經(jīng)網(wǎng)絡(luò)架構(gòu)進(jìn)行時(shí)間序列預(yù)測(cè),那么一個(gè)關(guān)鍵的預(yù)處理步驟是使用標(biāo)準(zhǔn)化或標(biāo)準(zhǔn)化技術(shù)對(duì)時(shí)間序列進(jìn)行縮放。這在DeepAR中是不需要手動(dòng)操作的,因?yàn)榈讓拥哪P蛯?duì)每個(gè)時(shí)間序列i的自回歸輸入z進(jìn)行縮放,縮放因子為v_i,即該時(shí)間序列的平均值。具體而言,論文基準(zhǔn)中使用的比例因子方程如下:

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

但是在實(shí)踐中,如果目標(biāo)時(shí)間序列的大小差異很大,那么在預(yù)處理過(guò)程中應(yīng)用自己的縮放還是很有必要的。例如,在能源需求預(yù)測(cè)場(chǎng)景中,數(shù)據(jù)集可以包含中壓電力客戶(例如小工廠,按兆瓦單位消耗電力)和低壓客戶(例如家庭,按千瓦單位消耗電力)。

DeepAR進(jìn)行概率預(yù)測(cè),而不是直接輸出未來(lái)值。這是以蒙特卡洛樣本的形式完成的。這些預(yù)測(cè)被用來(lái)計(jì)算分位數(shù)預(yù)測(cè),通過(guò)使用分位數(shù)損失函數(shù)。對(duì)于那些不熟悉這種損失類型的人,分位數(shù)損失不僅用來(lái)計(jì)算一個(gè)估計(jì),而且用來(lái)計(jì)算圍繞該值的預(yù)測(cè)區(qū)間。

Spacetimeformer

在單變量時(shí)間序列中時(shí)間依賴性是最重要的。但是在多個(gè)時(shí)間序列場(chǎng)景中,事情就沒(méi)那么簡(jiǎn)單了。例如假設(shè)我們有一個(gè)天氣預(yù)報(bào)任務(wù),想要預(yù)測(cè)五個(gè)城市的溫度。讓我們假設(shè)這些城市屬于一個(gè)國(guó)家。鑒于目前所看到的,我們可以使用DeepAR并將每個(gè)城市作為外部靜態(tài)協(xié)變量進(jìn)行建模。

換句話說(shuō),該模型將同時(shí)考慮時(shí)間和空間關(guān)系。這便是Spacetimeformer的核心理念:使用一個(gè)模型來(lái)利用這些城市/地點(diǎn)之間的空間關(guān)系,從而學(xué)習(xí)額外的有用依賴,因?yàn)槟P蛯⑼瑫r(shí)考慮時(shí)間和空間關(guān)系。

深入研究時(shí)空序列

顧名思義,這種模型在內(nèi)部使用了基于transformers的結(jié)構(gòu)。在使用基于transformers的模型進(jìn)行時(shí)間序列預(yù)測(cè)時(shí),一種流行的產(chǎn)生時(shí)間感知嵌入的技術(shù)是通過(guò)Time2Vec[6]嵌入層傳遞輸入(對(duì)于NLP任務(wù)是使用位置編碼向量來(lái)代替Time2Vec)。雖然這種技術(shù)對(duì)于單變量時(shí)間序列非常有效,但對(duì)于多變量時(shí)間輸入?yún)s沒(méi)有任何意義。可能是在語(yǔ)言建模中,句子中的每個(gè)單詞都用嵌入表示,單詞本質(zhì)上是一個(gè)是詞匯表的一部分,而時(shí)間序列則沒(méi)那么簡(jiǎn)單。

在多元時(shí)間序列中,在給定的時(shí)間步長(zhǎng)t,輸入的形式為x_1,t, x2,t, x_m,t其中x_i,t是特征i的數(shù)值,m是特征/序列的總數(shù)。如果我們將輸入通過(guò)一個(gè)Time2Vec層,將產(chǎn)生一個(gè)時(shí)間嵌入向量。這種嵌入真正代表什么?答案是它將把整個(gè)輸入集合表示為單個(gè)實(shí)體(令牌)。因此模型將只學(xué)習(xí)時(shí)間步之間的時(shí)間動(dòng)態(tài),但將錯(cuò)過(guò)特征/變量之間的空間關(guān)系。

Spacetimeformer解決了這個(gè)問(wèn)題,它將輸入扁平化為一個(gè)大向量,稱為時(shí)空序列。如果輸入包含N個(gè)變量,組織成T個(gè)時(shí)間步,則生成的時(shí)空序列將具有(NxT)標(biāo)記。下圖3更好地顯示了這一點(diǎn):

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

論文指出:“(1)包含時(shí)間信息的多元輸入格式。解碼器輸入缺少(“?”)值,在進(jìn)行預(yù)測(cè)時(shí)設(shè)置為零。(2)時(shí)間序列通過(guò)一個(gè)Time2Vec層,生成一個(gè)代表周期性輸入模式的頻率嵌入。(3)二進(jìn)制嵌入表示該值是作為上下文給出的還是需要預(yù)測(cè)的。(4)將每個(gè)時(shí)間序列的整數(shù)索引映射到一個(gè)具有查找表嵌入的“空間”表示。(5)利用前饋層投影每個(gè)時(shí)間序列的Time2Vec嵌入和變量值。(6)將值和時(shí)間,變量和給定的嵌入求和會(huì)導(dǎo)致使MSA在時(shí)間和可變空間之間以更長(zhǎng)的序列作為輸入。

換句話說(shuō),最后的序列編碼了一個(gè)包含了時(shí)間、空間和上下文信息統(tǒng)一的嵌入。但是這種方法的一個(gè)缺點(diǎn)是,序列可能會(huì)變得很長(zhǎng)導(dǎo)致資源的二次增長(zhǎng)。這是因?yàn)楦鶕?jù)注意機(jī)制,每個(gè)令牌都要對(duì)另一個(gè)進(jìn)行檢查。作者使用了一種更有效的體系結(jié)構(gòu),稱為Performer注意機(jī)制,適用于更大的序列。

Temporal Fusion Transformer

Temporal Fusion Transformer(TFT)是由Google發(fā)布的基于Transformer的時(shí)間序列預(yù)測(cè)模型。 TFT比以前的模型更加通用。

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

TFT的頂層架構(gòu)如圖4所示。以下是該模型的主要優(yōu)勢(shì):

與前面提到的模型一樣,TFT支持在多個(gè)異構(gòu)時(shí)間序列上構(gòu)建模型。

TFT支持三種類型的特征:i)具有已知的未來(lái)輸入的時(shí)變數(shù)據(jù)ii)僅到目前為止已知的時(shí)變數(shù)據(jù)iii)分類/靜態(tài)變量,也被稱為時(shí)不變特征。因此TFT比以前的型號(hào)更通用。在前面提到的電力需求預(yù)測(cè)場(chǎng)景中,我們希望使用濕度水平作為一個(gè)時(shí)變特征,這是到目前為止才知道的。這在TFT中是可行的,但在DeepAR中不行。

圖5顯示了如何使用所有這些特性的示例:

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

TFT非常強(qiáng)調(diào)可解釋性。具體地說(shuō),通過(guò)利用Variable Selection組件(如上圖4所示),模型可以成功地度量每個(gè)特性的影響。因此可以說(shuō)模型學(xué)習(xí)了特性的重要性。

另一方面,TFT提出了一種新的可解釋的多頭注意機(jī)制:該層的注意權(quán)重可以揭示在回顧期間哪些時(shí)間步是最重要的。這些權(quán)重的可視化可以揭示整個(gè)數(shù)據(jù)集中最顯著的季節(jié)模式。

預(yù)測(cè)區(qū)間:與DeepAR類似,TFT通過(guò)使用分位數(shù)回歸輸出預(yù)測(cè)區(qū)間和預(yù)測(cè)值。

綜上所述,深度學(xué)習(xí)無(wú)疑徹底改變了時(shí)間序列預(yù)測(cè)的格局。上述所有模型除了無(wú)與倫比的性能之外,還有一個(gè)共同點(diǎn):它們充分利用多重、多元的時(shí)間數(shù)據(jù),同時(shí)它們使用外生信息,將預(yù)測(cè)性能提高到前所未有的水平。但是在自然語(yǔ)言處理(NLP)任務(wù)中多數(shù)都利用了預(yù)訓(xùn)練的模型。NLP任務(wù)的feed大多是人類創(chuàng)造的數(shù)據(jù),充滿了豐富而優(yōu)秀的信息,幾乎可以看作是一個(gè)數(shù)據(jù)單元。在時(shí)間序列預(yù)測(cè)中,我們可以感覺(jué)到缺乏這種預(yù)先訓(xùn)練的模型。為什么我們不能像在NLP中那樣在時(shí)間序列中利用這個(gè)優(yōu)勢(shì)呢?

這就引出了我們要介紹的最后一個(gè)模型TSFormer,該模型考慮了兩個(gè)視角,我們講從輸入到輸出將其為四個(gè)部分,并且提供Python的實(shí)現(xiàn)代碼(官方也提供了),這個(gè)模型是剛剛發(fā)布不久的,所以我們才在這里著重介紹它。

TSFormer

它是一種基于Transformer(TSFormer)的無(wú)監(jiān)督的時(shí)間序列預(yù)訓(xùn)練模型,使用了MAE中的訓(xùn)練策略并且能夠捕獲數(shù)據(jù)中非常長(zhǎng)的依賴關(guān)系。

NLP和時(shí)間序列:

在某種程度上,NLP信息和Time Series數(shù)據(jù)是相同的。它們都是順序數(shù)據(jù)和局部敏感的,這意味著與它的下一個(gè)/以前的數(shù)據(jù)點(diǎn)有關(guān)。但是還是有一些區(qū)別,在提出我們的預(yù)訓(xùn)練模型時(shí),我們應(yīng)該考慮兩個(gè)差異,就像我們?cè)贜LP任務(wù)中所做的那樣:

  • 時(shí)間序列數(shù)據(jù)的密度比自然語(yǔ)言數(shù)據(jù)低得多
  • 我們需要比NLP數(shù)據(jù)更長(zhǎng)的時(shí)間序列數(shù)據(jù)

TSFormer簡(jiǎn)介

TSFormer與MAE的主要體系結(jié)構(gòu)基本類似,數(shù)據(jù)通過(guò)一個(gè)編碼器,然后經(jīng)過(guò)一個(gè)解碼器,最終的目標(biāo)是為了重建缺失(人工掩蔽)的數(shù)據(jù)。

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

我們將他總結(jié)為以下4點(diǎn):

1、掩蔽

作為數(shù)據(jù)進(jìn)入編碼器的前一步。 輸入序列(S?)已分布到P片中,其長(zhǎng)度為L(zhǎng)。因此,用于預(yù)測(cè)下一個(gè)時(shí)間步長(zhǎng)的滑動(dòng)窗口的langth是P XL。

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

遮蔽比率為75%(看著很高,估計(jì)是用了MAE一樣的參數(shù)); 我們要完成的是一項(xiàng)自監(jiān)督任務(wù),所以數(shù)據(jù)越少編碼器的計(jì)算速度就越快。

這樣做(掩蔽輸入序列段)的主要原因是:

  • 段(patch)比單獨(dú)點(diǎn)好。
  • 它使使用下游模型變得簡(jiǎn)單(STGNN將單元段作為輸入)
  • 可以分解編碼器的輸入大小。
class Patch(nn.Module):
def __init__(self, patch_size, input_channel, output_channel, spectral=True):
super().__init__()
self.output_channel = output_channel
self.P = patch_size
self.input_channel = input_channel
self.output_channel = output_channel
self.spectral = spectral
if spectral:
self.emb_layer = nn.Linear(int(patch_size/2+1)*2, output_channel)
else:
self.input_embedding = nn.Conv2d(input_channel, output_channel, kernel_size=(self.P, 1), stride=(self.P, 1))
def forward(self, input):
B, N, C, L = input.shape
if self.spectral:
spec_feat_ = torch.fft.rfft(input.unfold(-1, self.P, self.P), dim=-1)
real = spec_feat_.real
imag = spec_feat_.imag
spec_feat = torch.cat([real, imag], dim=-1).squeeze(2)
output = self.emb_layer(spec_feat).transpose(-1, -2)
else:
input = input.unsqueeze(-1) # B, N, C, L, 1
input = input.reshape(B*N, C, L, 1) # B*N, C, L, 1
output = self.input_embedding(input) # B*N, d, L/P, 1
output = output.squeeze(-1).view(B, N, self.output_channel, -1)
assert output.shape[-1] == L / self.P
return output

以下是生成遮蔽的函數(shù):

class MaskGenerator(nn.Module):
def __init__(self, mask_size, mask_ratio, distribution='uniform', lm=-1):
super().__init__()
self.mask_size = mask_size
self.mask_ratio = mask_ratio
self.sort = True
self.average_patch = lm
self.distribution = distribution
if self.distribution == "geom":
assert lm != -1
assert distribution in ['geom', 'uniform']
def uniform_rand(self):
mask = list(range(int(self.mask_size)))
random.shuffle(mask)
mask_len = int(self.mask_size * self.mask_ratio)
self.masked_tokens = mask[:mask_len]
self.unmasked_tokens = mask[mask_len:]
if self.sort:
self.masked_tokens = sorted(self.masked_tokens)
self.unmasked_tokens = sorted(self.unmasked_tokens)
return self.unmasked_tokens, self.masked_tokens
def geometric_rand(self):
mask = geom_noise_mask_single(self.mask_size, lm=self.average_patch, masking_ratio=self.mask_ratio) # 1: masked, 0:unmasked
self.masked_tokens = np.where(mask)[0].tolist()
self.unmasked_tokens = np.where(~mask)[0].tolist()
# assert len(self.masked_tokens) > len(self.unmasked_tokens)
return self.unmasked_tokens, self.masked_tokens
def forward(self):
if self.distribution == 'geom':
self.unmasked_tokens, self.masked_tokens = self.geometric_rand()
elif self.distribution == 'uniform':
self.unmasked_tokens, self.masked_tokens = self.uniform_rand()
else:
raise Exception("ERROR")
return self.unmasked_tokens, self.masked_tokens

2、編碼

包括了輸入嵌入,位置編碼和Transformer 塊的。 編碼器只能在未遮蔽的patchs上執(zhí)行(這個(gè)也是MAE的方法)。

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

輸入嵌入

使用線性的投影來(lái)獲得輸入的嵌入,可將未遮蔽的空間轉(zhuǎn)換為潛在空間。 它的公式可以在下面看到:

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

W和B是可學(xué)習(xí)的參數(shù),U是維度中的模型輸入向量。

位置編碼

簡(jiǎn)單的位置編碼層用于附加新的順序信息。 添加了“可學(xué)習(xí)”一詞,這有助于表現(xiàn)出比正弦更好的性能。 因此可學(xué)習(xí)的位置嵌入顯示了時(shí)間序列的良好結(jié)果。

class LearnableTemporalPositionalEncoding(nn.Module):
def __init__(self, d_model, dropout=0.1, max_len: int = 1000):
super().__init__()
self.dropout = nn.Dropout(p=dropout)
self.pe = nn.Parameter(torch.empty(max_len, d_model), requires_grad=True)
nn.init.uniform_(self.pe, -0.02, 0.02)

def forward(self, X, index):
if index is None:
pe = self.pe[:X.size(1), :].unsqueeze(0)
else:
pe = self.pe[index].unsqueeze(0)
X = X + pe
X = self.dropout(X)
return X
class PositionalEncoding(nn.Module):
def __init__(self, hidden_dim, dropout=0.1):
super().__init__()
self.tem_pe = LearnableTemporalPositionalEncoding(hidden_dim, dropout)
def forward(self, input, index=None, abs_idx=None):
B, N, L_P, d = input.shape
# temporal embedding
input = self.tem_pe(input.view(B*N, L_P, d), index=index)
input = input.view(B, N, L_P, d)
# absolute positional embedding
return input

Transformer 塊

論文使用了4層Transformer ,比計(jì)算機(jī)視覺(jué)和自然語(yǔ)言處理任務(wù)中常見(jiàn)的數(shù)量低。這里所使用的Transformer 是最基本的也是在原始論文中提到的結(jié)構(gòu),如下圖4所示:

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

class TransformerLayers(nn.Module):
def __init__(self, hidden_dim, nlayers, num_heads=4, dropout=0.1):
super().__init__()
self.d_model = hidden_dim
encoder_layers = TransformerEncoderLayer(hidden_dim, num_heads, hidden_dim*4, dropout)
self.transformer_encoder = TransformerEncoder(encoder_layers, nlayers)
def forward(self, src):
B, N, L, D = src.shape
src = src * math.sqrt(self.d_model)
src = src.view(B*N, L, D)
src = src.transpose(0, 1)
output = self.transformer_encoder(src, mask=None)
output = output.transpose(0, 1).view(B, N, L, D)
return output

3、解碼

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

該解碼器包括一系列Transformer塊。它適用于所有的patch(相比之下MAE是沒(méi)有位置嵌入,因?yàn)樗膒atch已經(jīng)有位置信息),并且層數(shù)只有一層,然后使用了簡(jiǎn)單的MLP,這使得輸出長(zhǎng)度等于每個(gè)patch的長(zhǎng)度。

4、重建目標(biāo)

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

對(duì)每一個(gè)數(shù)據(jù)點(diǎn)(i)進(jìn)行遮蔽patch的計(jì)算,并選擇mae (Mean-Absolute-Error)作為主序列和重建序列的損失函數(shù)。

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

這就是整體的架構(gòu)了

5個(gè)時(shí)間序列預(yù)測(cè)的深度學(xué)習(xí)模型對(duì)比總結(jié)

下面是代碼實(shí)現(xiàn):

def trunc_normal_(tensor, mean=0., std=1.):
__call_trunc_normal_(tensor, mean=mean, std=std, a=-std, b=std)
def unshuffle(shuffled_tokens):
dic = {}
for k, v, in enumerate(shuffled_tokens):
dic[v] = k
unshuffle_index = []
for i in range(len(shuffled_tokens)):
unshuffle_index.append(dic[i])
return unshuffle_index
class TSFormer(nn.Module):
def __init__(self, patch_size, in_channel, out_channel, dropout, mask_size, mask_ratio, L=6, distribution='uniform', lm=-1, selected_feature=0, mode='Pretrain', spectral=True):
super().__init__()
self.patch_size = patch_size
self.seleted_feature = selected_feature
self.mode = mode
self.spectral = spectral
self.patch = Patch(patch_size, in_channel, out_channel, spectral=spectral)
self.pe = PositionalEncoding(out_channel, dropout=dropout)
self.mask = MaskGenerator(mask_size, mask_ratio, distribution=distribution, lm=lm)
self.encoder = TransformerLayers(out_channel, L)
self.decoder = TransformerLayers(out_channel, 1)
self.encoder_2_decoder = nn.Linear(out_channel, out_channel)
self.mask_token = nn.Parameter(torch.zeros(1, 1, 1, out_channel))
trunc_normal_(self.mask_token, std=.02)
if self.spectral:
self.output_layer = nn.Linear(out_channel, int(patch_size/2+1)*2)
else:
self.output_layer = nn.Linear(out_channel, patch_size)
def _forward_pretrain(self, input):
B, N, C, L = input.shape
# get patches and exec input embedding
patches = self.patch(input)
patches = patches.transpose(-1, -2)
# positional embedding
patches = self.pe(patches)

# mask tokens
unmasked_token_index, masked_token_index = self.mask()
encoder_input = patches[:, :, unmasked_token_index, :]
# encoder
H = self.encoder(encoder_input)
# encoder to decoder
H = self.encoder_2_decoder(H)
# decoder
# H_unmasked = self.pe(H, index=unmasked_token_index)
H_unmasked = H
H_masked = self.pe(self.mask_token.expand(B, N, len(masked_token_index), H.shape[-1]), index=masked_token_index)
H_full = torch.cat([H_unmasked, H_masked], dim=-2) # # B, N, L/P, d
H = self.decoder(H_full)
# output layer
if self.spectral:
# output = H
spec_feat_H_ = self.output_layer(H)
real = spec_feat_H_[..., :int(self.patch_size/2+1)]
imag = spec_feat_H_[..., int(self.patch_size/2+1):]
spec_feat_H = torch.complex(real, imag)
out_full = torch.fft.irfft(spec_feat_H)
else:
out_full = self.output_layer(H)
# prepare loss
B, N, _, _ = out_full.shape
out_masked_tokens = out_full[:, :, len(unmasked_token_index):, :]
out_masked_tokens = out_masked_tokens.view(B, N, -1).transpose(1, 2)
label_full = input.permute(0, 3, 1, 2).unfold(1, self.patch_size, self.patch_size)[:, :, :, self.seleted_feature, :].transpose(1, 2) # B, N, L/P, P
label_masked_tokens = label_full[:, :, masked_token_index, :].contiguous()
label_masked_tokens = label_masked_tokens.view(B, N, -1).transpose(1, 2)
# prepare plot
## note that the output_full and label_full are not aligned. The out_full in shuffled
### therefore, unshuffle for plot
unshuffled_index = unshuffle(unmasked_token_index + masked_token_index)
out_full_unshuffled = out_full[:, :, unshuffled_index, :]
plot_args = {}
plot_args['out_full_unshuffled'] = out_full_unshuffled
plot_args['label_full'] = label_full
plot_args['unmasked_token_index'] = unmasked_token_index
plot_args['masked_token_index'] = masked_token_index
return out_masked_tokens, label_masked_tokens, plot_args
def _forward_backend(self, input):
B, N, C, L = input.shape
# get patches and exec input embedding
patches = self.patch(input)
patches = patches.transpose(-1, -2)
# positional embedding
patches = self.pe(patches)
encoder_input = patches # no mask when running the backend.
# encoder
H = self.encoder(encoder_input)
return H
def forward(self, input_data):

if self.mode == 'Pretrain':
return self._forward_pretrain(input_data)
else:
return self._forward_backend(input_data)

看完這個(gè)論文,我發(fā)現(xiàn)這基本上可以說(shuō)是復(fù)制了MAE,或者說(shuō)是時(shí)間序列的MAE,在預(yù)測(cè)階段也是與MAE類似,使用編碼器的輸出作為特征,為下游任務(wù)提供特征數(shù)據(jù)作為輸入,有興趣的可以讀讀原始論文并且看看論文給的代碼。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2024-02-21 14:32:09

2017-05-08 14:42:36

2023-01-30 17:10:23

DeepTime元學(xué)習(xí)

2023-10-13 15:34:55

時(shí)間序列TimesNet

2023-03-16 18:09:00

機(jī)器學(xué)習(xí)數(shù)據(jù)集

2023-03-19 17:24:43

2022-12-09 14:50:51

機(jī)器學(xué)習(xí)時(shí)間序列預(yù)測(cè)

2024-05-09 16:23:14

2023-12-29 22:37:42

時(shí)間序列NLP

2024-06-17 16:02:58

2021-08-05 13:49:39

Python工具開(kāi)發(fā)

2023-01-13 16:43:13

深度學(xué)習(xí)模型數(shù)據(jù)集

2022-11-24 17:00:01

模型ARDL開(kāi)發(fā)

2024-01-30 01:12:37

自然語(yǔ)言時(shí)間序列預(yù)測(cè)Pytorch

2023-11-06 07:27:38

模型NLP領(lǐng)域

2019-03-06 09:55:54

Python 開(kāi)發(fā)編程語(yǔ)言

2022-08-01 11:50:47

PySpark流失預(yù)測(cè)模型

2022-02-21 00:05:25

深度學(xué)習(xí)可視化工具

2024-09-03 08:16:08

2023-07-05 07:21:34

時(shí)間序列學(xué)習(xí)框架模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

天堂网在线免费观看| 欧洲精品一区色| 国产精品第一页在线观看| 色综合www| 欧美日韩一区 二区 三区 久久精品| 一区二区精品国产| 国产小视频免费观看| 日韩国产精品久久久| 欧美成人黑人xx视频免费观看| 亚洲麻豆一区二区三区| 日本美女久久| 精品美女永久免费视频| 一区二区免费在线视频| 少妇人妻精品一区二区三区| 美女视频一区在线观看| 午夜精品美女自拍福到在线| 成人无码精品1区2区3区免费看 | 日本黄色免费观看| 欧美美女被草| 色综合久久综合| 国产精品国三级国产av| av在线播放网| 99精品视频中文字幕| 成人网在线免费看| 一区二区三区麻豆| 在线亚洲观看| 欧美激情视频在线观看| 久久国产高清视频| 九九综合久久| 日韩福利视频在线观看| 国产精品19p| 在线欧美激情| 欧美日韩国产在线播放网站| 成人羞羞国产免费网站| av中文在线资源库| 亚洲综合自拍偷拍| 四虎精品欧美一区二区免费| 天堂а√在线资源在线| 中文字幕欧美国产| 日本午夜精品一区二区| 韩日在线视频| 久久免费电影网| 麻豆传媒一区| 你懂的在线网址| 久久综合色鬼综合色| 国产一区二区中文字幕免费看| 国产v片在线观看| 韩国午夜理伦三级不卡影院| 成人av在线天堂| 国产又粗又黄视频| 激情综合亚洲精品| 成人中文字幕+乱码+中文字幕| 一级片在线免费观看视频| 喷水一区二区三区| 国产日韩欧美视频在线| 97人妻精品一区二区三区软件| 久久国产视频网| 亚洲va国产va天堂va久久| 国产精品无码白浆高潮| 国产乱妇无码大片在线观看| 99re在线视频观看| 亚洲免费成人网| av一区二区三区四区| 久久综合福利| 国产高清视频在线| 亚洲色图清纯唯美| 妞干网视频在线观看| 91九色porn在线资源| 欧美日韩国产在线| 午夜免费福利在线| 精品一区91| 亚洲国产精品高清久久久| 魔女鞋交玉足榨精调教| 国产精品羞羞答答在线观看| 一区二区三区美女xx视频| 潮喷失禁大喷水aⅴ无码| 五月开心六月丁香综合色啪 | 亚洲天堂资源| 欧美四级电影网| 丰满人妻一区二区三区53视频| 欧美激情网址| 日韩在线观看免费高清| 久久精品99国产精| 亚洲欧美日韩国产一区| 国产精品永久免费| 日韩有码第一页| 欧美国产日韩精品免费观看| 五月天在线免费视频| 日本不卡1234视频| 3751色影院一区二区三区| 人妻互换一二三区激情视频| 国产精品一区二区三区av麻| 久久综合色影院| 欧美黑人一区二区| 国产真实乱偷精品视频免| 久久久久久久久久久久久久久久av| 国产精品无码2021在线观看| 一级女性全黄久久生活片免费| 男人操女人免费| 欧美在线在线| 一区二区三区美女xx视频| 久草中文在线视频| 日本成人在线不卡视频| 国产91免费视频| 天天综合视频在线观看| 狠狠色狠狠色综合日日五| 在线观看网站黄| 日韩精品欧美| 日本国产精品视频| www日本在线| 国产精品美日韩| 亚洲乱码中文字幕久久孕妇黑人| 久久免费精品| 日韩在线免费av| 91久久国产综合久久91| 白白色 亚洲乱淫| 日韩最新中文字幕| 素人啪啪色综合| 日韩精品极品在线观看| www.av视频在线观看| 韩国v欧美v亚洲v日本v| 日韩资源av在线| 欧美办公室脚交xxxx| 精品国产精品一区二区夜夜嗨| 日韩欧美123区| 免费成人小视频| 日本高清不卡一区二区三| 成人免费网站观看| 精品欧美一区二区在线观看| 亚洲一级生活片| 精品中文av资源站在线观看| 一区二区成人国产精品 | 久久精选视频| 欧美日韩亚洲综合一区二区三区激情在线 | 欧美亚洲综合视频| 一区二区三区国产视频| 午夜一区二区三区四区| 久久久久久久网| 中文字幕乱码人妻综合二区三区| 欧美电影在线观看免费| 午夜精品久久17c| 四虎在线视频免费观看| 五月激情综合色| 成人影视免费观看| 久久黄色影院| 神马影院我不卡午夜| 91福利精品在线观看| 国产亚洲精品成人av久久ww| 国产亚洲欧美日韩高清| 中文字幕精品—区二区四季| 少妇网站在线观看| 91精品一区二区三区综合| 成人性教育视频在线观看| 3d玉蒲团在线观看| 精品国产1区二区| 亚洲一区欧美在线| 91社区在线播放| 中文字幕在线观看第三页| 欧美国产一区二区三区激情无套| 国产一区二区丝袜高跟鞋图片| 国产cdts系列另类在线观看| 日韩精品最新网址| 亚洲日本韩国在线| 中文欧美字幕免费| 日韩 国产 一区| 在线欧美日韩| 欧美在线播放一区| 久久久久久成人精品| 亚洲一区二区三区精品视频| 午夜成年人在线免费视频| 欧美大片在线观看一区二区| 青青国产在线观看| 国产亚洲午夜高清国产拍精品| 一区二区三区 欧美| 久久久久亚洲| 精品综合久久| 国产欧美自拍| 久久久久久国产精品美女| 日本一区视频| 337p亚洲精品色噜噜| 国产一级特黄a高潮片| 国产亚洲精品久| 中文字幕亚洲乱码| 在线观看一区| 一区二区精品国产| 天堂成人娱乐在线视频免费播放网站| 日本一区二区不卡| 午夜伦理大片视频在线观看| 亚洲裸体xxxx| 超碰在线观看av| 91福利国产精品| 久久机热这里只有精品| 国产日产欧美一区二区三区| 人妻精油按摩bd高清中文字幕| 亚洲尤物精选| 超碰超碰超碰超碰超碰| 女厕嘘嘘一区二区在线播放| 91在线视频精品| 日韩免费va| 97国产精品免费视频| 欧美成人二区| 国产午夜一区二区| 日韩中文字幕观看| 555www色欧美视频| 波多野结衣小视频| 精品久久久久久久久国产字幕 | 亚洲国产精品欧美久久| 欧美午夜精品久久久久久孕妇| 国产主播在线播放| 中文字幕在线观看不卡视频| 色欲av无码一区二区三区| 国产91色综合久久免费分享| 亚洲一级片免费| 久久国产精品亚洲77777| 欧美国产视频一区| 婷婷亚洲五月| 一区二区三区偷拍| 国产一区二区三区四区大秀| 国产一区二区免费在线观看| 国产一精品一av一免费爽爽| 国产精品亚发布| 午夜精品成人av| 欧美性受xxx| 国产99在线观看| 久久久久久有精品国产| 成人短视频在线| 久久手机精品视频| 日韩三级影院| 久久精品国产久精国产一老狼| 国产高清一区在线观看| 国产亚洲人成a一在线v站| 日本视频在线观看一区二区三区| 亚洲国产精品成人av| 日本波多野结衣在线| 亚洲第一精品夜夜躁人人爽| 丰满熟女一区二区三区| 精品少妇一区二区三区视频免付费| 99视频免费看| 日韩免费看网站| 国产 日韩 欧美 综合| 欧美不卡一区二区三区四区| 北条麻妃一二三区| 精品国产一区二区精华| 少妇精品高潮欲妇又嫩中文字幕 | 一区在线视频观看| 国产精品va在线观看无码| 国产一在线精品一区在线观看| 4444亚洲人成无码网在线观看| 影音先锋日韩在线| 日本免费a视频| 一区二区日韩免费看| 欧美视频在线播放一区| 日韩中文字幕麻豆| 日本人69视频| 国产精品夜夜爽| 欧美xxxxx精品| 久久久国产精华| 天天操天天摸天天舔| 亚洲精品乱码久久久久久日本蜜臀| 九九热国产精品视频| 精品国产91久久久| 日日夜夜狠狠操| 69精品人人人人| 日韩一级在线播放| 国产亚洲欧洲高清一区| 美女免费久久| 久久久久久久久国产精品| 色综合亚洲图丝熟| 国产在线日韩在线| 亚洲天堂中文字幕在线观看| 国产综合av一区二区三区| 国产亚洲一卡2卡3卡4卡新区| 一本一本a久久| 亚洲激情自拍| 中文字幕第100页| 国产精品一级片在线观看| 中文乱码人妻一区二区三区视频| 国产亚洲欧美色| 欧美黄色aaa| 色综合天天狠狠| 国产黄色一区二区| 亚洲欧美综合区自拍另类| 大地资源网3页在线观看| 国内免费久久久久久久久久久| 欧美日韩精品免费观看视完整| 成人国产精品色哟哟| 欧美激情99| 亚洲成人动漫在线| 久久一二三区| 18禁一区二区三区| 国产日韩亚洲欧美综合| 中文字幕第28页| 欧美日韩在线一区二区| 手机在线观看毛片| 精品国内亚洲在观看18黄| 九九精品调教| 国产日韩欧美另类| 亚州av一区| 青青草视频国产| 六月丁香婷婷久久| 国产精品无码一区二区三| 中文字幕在线观看不卡视频| 黄色免费av网站| 精品国产一区二区三区不卡 | 午夜精品久久久久久久99热浪潮| 成人免费一区| 欧美12av| 亚洲视频综合| 中文字幕亚洲影院| 国产视频在线观看一区二区三区| 久久免费公开视频| 欧美一区二区三级| 在线观看免费高清完整| 人体精品一二三区| 女仆av观看一区| 久草视频国产在线| 国产精品资源网| 51精品免费网站| 欧美日韩一区二区三区免费看| 欧美色视频免费| 5566成人精品视频免费| 91精品导航| 国产成人亚洲综合无码| 国产一区视频导航| 欧美色视频一区二区三区在线观看| 色999日韩国产欧美一区二区| 亚洲欧美自偷自拍| 91精品国产91久久久久久最新| 一区二区三区高清在线观看| youjizz.com亚洲| 动漫一区在线| 亚洲日韩欧美视频| 亚洲伊人av| 麻豆精品视频| 亚洲影音先锋| 中文字幕av网址| 色婷婷综合久色| 美国成人毛片| 国产成人亚洲综合青青| 国产欧美久久一区二区三区| 日本精品一区二区三区四区 | 麻豆久久久av免费| 午夜在线视频观看日韩17c| 亚洲熟女乱综合一区二区三区| 黄色91在线观看| 日本福利在线观看| 日本一区二区在线播放| 国内成人精品| 欧美日韩亚洲自拍| 一区二区中文视频| 99热这里只有精| 久久久久久久久久久网站| 激情av综合| 国产成人无码一二三区视频| 国产日韩欧美电影| 国产精品国产av| 久久久久久美女| 国内精品视频在线观看| 色戒在线免费观看| 一区二区三区在线观看动漫| 日本精品一二区| 日本国产精品视频| 久久在线视频| 男女性杂交内射妇女bbwxz| 精品福利樱桃av导航| 成人不用播放器| 亚洲一区二区三| 国产视频亚洲| www.4hu95.com四虎| 日韩亚洲欧美一区二区三区| av丝袜在线| 亚洲一区二区精品在线观看| 国产精品一区二区视频| 久久久综合久久久| 亚洲人成电影在线观看天堂色| 婷婷精品久久久久久久久久不卡| 精品国产一区二区三区在线| 99久久精品免费看| 中文字幕在线视频免费| 欧美大奶子在线| 免费视频国产一区| japan高清日本乱xxxxx| 岛国视频午夜一区免费在线观看| 午夜视频在线| 久久精品欧美| 国产在线看一区| 亚洲精品中文字幕乱码三区91| 久久精品免费播放| 男男gay无套免费视频欧美| 一级做a爱视频| 日本久久一区二区| 啦啦啦中文在线观看日本| 欧美日韩精品综合| 国产福利电影一区二区三区| 国产成人无码av| 欧美激情伊人电影| 久久一区二区三区电影| 玖草视频在线观看| 日韩欧美国产wwwww| 日本精品在线一区|