# 時序AI預測方法論說明 時間序列預測是理解資料數據在時間上變化的一個重要問題。傳統的深度學習模型(例如 LSTM 或 RNN)在短期預測中表現不錯,但在長期預測上往往效果不好。而近些年Transformer 模型原本在自然語言處理(NLP)和計算機視覺(CV)上有很好的表現,因此研究者們也開始考慮將 Transformer 用於時間序列預測。 在開始介紹方法論前,我會盡可能不這麼理論的去介紹幾個基本概念。 ### 基本概念說明 * 時序資料預測 什麼是時序資料? 就是根據時間順序記錄的資料數據,例如每天的溫度、股票價格等。 而我們的預測目標就是根據過去的數據預測未來的趨勢。 * Transformer 什麼是 Transformer? 它是一種神經網路,也就是一種深度學習的模型架構,藉由追蹤序列資料中的關係,學習上下文之間的脈絡及意義,就如同句子中的每一個字。中文大部分的研究團隊比較少翻譯這個詞,但[AWS](https://aws.amazon.com/tw/what-is/transformers-in-artificial-intelligence/)還是有在部分文章中翻譯為「轉換器」。 Transformer 的核心概念稱為注意力(attention)或自我注意力(self-attention)的技術,它可偵測一個系列中以相互影響、依賴的資料間關聯,甚至是模糊的資料間關係。 為什麼使用 Transformer? 它擅長處理序列數據(例如句子或時間序列),並且能夠從數據中找到重要的特徵或是關聯。在近幾年,Transformer 模型以幾乎即時的方式翻譯文字和語音,讓各種背景的人士及聽障者都能出席會議和上學。與此同時,在許多大公司的近期研究,Transformer 模型也用於協助研究人員瞭解 DNA 中的基因鏈和蛋白質中的氨基酸,以加快設計藥物的腳步。 參考資料: https://blogs.nvidia.com.tw/blog/what-is-a-transformer-model/ ### 模型介紹 有了以上幾點基本概念,以下的方法論基本上就是利用將時序資料轉換成一種長時間記憶的方式來建立模型的使用資料(input data),並將建立模型的結果用於預測時序資料數據未來的趨勢,而這方法的概念我們可以稱之為LONG-TERM FORECASTING WITH TRANSFORMERS。而為了將這個概念模型進一步實作,以防無限制增長的時序資料,首先我們要先釐清我們的時序預測問題本身。 #### 問題背景 傳統的預測方法(例如 LSTM 或 RNN)在處理長期的時間序列預測時,常常效果不理想,原因在於它們難以捕捉到數據中長時間的模式和依賴關係。 為了解決這些問題,我們可以將資料進行一些前處理 1. 時間序列切片(Patching): - 原因:單個時間點的數據大多時候並沒有太多資訊,但一段時間的數據就能看出更多的資訊,如趨勢變化等等。 - 做法:把一段時間內的數據作為一個「切片」,例如把 7 天的數據作為一個單位來看待,而不是逐天分析。這樣可以捕捉到這 7 天內的模式。 - 好處: 更好地捕捉局部模式。 減少模型需要處理的信息量,提高計算效率。 可以考慮更長的歷史數據,這樣模型可以基於更長時間的趨勢進行預測。 2. 頻道獨立性(Channel Independence): - 原因:如同彩色的圖片同時會有 RGB 三個頻道,不同的數據維度(例如溫度、濕度)有各自的特徵,混合處理可能會互相干擾。 - 做法:把每個維度的數據單獨處理。這意味著溫度用自己的模型來分析,濕度也用自己的模型來分析,兩者之間不互相干擾。 - 好處: 更精準地捕捉每個維度的特徵。 減少不同維度之間的干擾,提高預測準確性。 ### 模型架構 * 主架構: 多變量時間序列數據被劃分為不同的頻道。這些頻道共享同一個 Transformer 骨幹,但訓練時的資料傳遞過程(如Forward propagation)是獨立的。 ![圖片](https://hackmd.io/_uploads/HJmyYSJxgg.png) * Transformer 骨幹 (Backbone): 每個頻道的單變量序列都會經過正規化(normalization)操作,然後被分割成切片(Patching)。這些切片將作為 Transformer 的輸入。 ![圖片](https://hackmd.io/_uploads/H1wlYHylgx.png) ### 具體實施步驟 * 資料蒐集與資料前處理 * 收集數據:資料來源主要是來自於ETC的CosmosDB,但目前我們的可訓練資料,如雨量資料是從2024年5月3日之後才有正常的資料可以蒐集,其餘資料狀況可以參考上面「20240417討論項目」的「目前資料蒐整情形」。 * 標準化:對數據進行標準化處理,這樣能使數據在同一範圍內(比如每個值減去平均值再除以標準差),這樣模型可以更好地學習。 * 劃分切片:例如每個切片長度是 7 天,然後移動 7 天再切下一個切片。這樣你會得到很多切片,每個切片代表 7 天內的數據。假設你有 30 天的數據,把它劃分成 3 個切片,每個切片是 10 天(長度為 10,間隔為 10)。每個切片就是一個最小的訓練資料單元,這樣能夠保留時間序列中的局部模式,這些切片將會用來訓練模型。 * 模型訓練(此部分專有名詞介紹請偉恩決定是否要使用) * 專有名詞介紹 1. 嵌入(Embedding,ㄑㄧㄢ):在數學上指的是一個數學結構經映射(mapping)包含到另一個結構中,而在ML(Machine Learning,機器學習)、DL(Deep Learning,深度學習)的領域,則是指將實體(entity)高維離散的特徵映射到相對低維的連續向量空間中。在不同ML/DL 模型中,依照不同的情境或任務,我們可以看到各式各樣不同實體的Embedding,比如: User Embedding、、Word Embedding …。 2. 位置編碼(Positional Encoding): * 用於讓模型知道這些數據在時間序列中的位置。 * 具體做法:在嵌入表示的基礎上,加入額外的位置資訊,這些資訊是通過特定的公式計算出來的。舉例來說,根據位置(例如第幾天)計算出一個特定的數字,並加到Embdeeing上。計算的公式可以參考(https://arxiv.org/pdf/2211.14730的 position encoding),但基本上可以簡化成一個排隊的人群,各自給他一個號碼牌。 3. 多來源自注意力機制(Multi-head Self-Attention): * 用於讓模型能夠同時考慮不同位置數據之間的關聯性。 * 具體做法:將數據通過多個注意力頭進行處理,每個注意力頭學習資料中的不同模式,然後將結果合併。這樣模型能夠理解哪些部分的重要性,從而做出更準確的預測。工作原理是利用模型學習每個向量來源(head)都會學習不同的關聯,比如第 1 天的溫度與第 2 天的溫度之間的關係。並將最終結果,也就是所有向量來源(head)的加權總和,代表了模型對整個序列的向量化結果。 * 模型訓練流程: 前處理的每個切片,利用嵌入(Embedding)轉換成一種數學表示的向量資料,用向量來代表切片的內容。再來利用使用一個線性變換將切片轉換成固定維度的向量。並添加位置編碼,位置編碼用來表示切片在整個時間序列中的位置,比如第 1 天到第 7 天。使用多來源自注意力機制來捕捉數據中的關聯性。每個頻道(即每個數據維度)都有自己的 Transformer 來單獨學習。讓模型學習如何從這些切片中預測未來的數據。模型的預測結果和實際值之間的誤差用均方誤差(MSE)來衡量。