時(shí)序預測的深度學(xué)習算法介紹(2)
CNN通過(guò)卷積層和池化層等操作可以自動(dòng)提取時(shí)間序列數據的特征,從而實(shí)現時(shí)序預測。在應用CNN進(jìn)行時(shí)序預測時(shí),需要將時(shí)間序列數據轉化為二維矩陣形式,然后利用卷積和池化等操作進(jìn)行特征提取和壓縮,最后使用全連接層進(jìn)行預測。相較于傳統的時(shí)序預測方法,CNN能夠自動(dòng)學(xué)習時(shí)間序列數據中的復雜模式和規律,同時(shí)具有更好的計算效率和預測精度。
2.2.1 WaveNet(2016)Paper:WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
WaveNet是由DeepMind團隊在2016年提出的一種用于生成語(yǔ)音的神經(jīng)網(wǎng)絡(luò )模型,它的核心思想是利用卷積神經(jīng)網(wǎng)絡(luò )來(lái)模擬語(yǔ)音信號的波形,并使用殘差連接和門(mén)控卷積操作來(lái)提高模型的表示能力。除了用于語(yǔ)音生成,WaveNet還可以應用于時(shí)序預測任務(wù)。在時(shí)序預測任務(wù)中,我們需要預測給定時(shí)間序列的下一個(gè)時(shí)間步的取值。通常情況下,我們可以將時(shí)間序列看作是一個(gè)一維向量,并將其輸入到WaveNet模型中,得到下一個(gè)時(shí)間步的預測值。
在WaveNet模型的構建中,關(guān)鍵的是對卷積層的設計和參數調整。卷積層的設計可以影響模型的表達能力和泛化能力,參數的調整可以影響模型的預測準確性和魯棒性。
2.2.2 TCN(2018)Paper:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
TCN(Temporal Convolutional Network)是一種基于卷積神經(jīng)網(wǎng)絡(luò )的時(shí)序預測算法,其設計初衷是為了解決傳統RNN(循環(huán)神經(jīng)網(wǎng)絡(luò ))在處理長(cháng)序列時(shí)存在的梯度消失和計算復雜度高的問(wèn)題。。相比于傳統的RNN等序列模型,TCN利用卷積神經(jīng)網(wǎng)絡(luò )的特點(diǎn),能夠在更短的時(shí)間內對長(cháng)期依賴(lài)進(jìn)行建模,并且具有更好的并行計算能力。TCN模型由多個(gè)卷積層和殘差連接組成,其中每個(gè)卷積層的輸出會(huì )被輸入到后續的卷積層中,從而實(shí)現對序列數據的逐層抽象和特征提取。TCN還采用了類(lèi)似于ResNet的殘差連接技術(shù),可以有效地減少梯度消失和模型退化等問(wèn)題,而空洞卷積可以擴大卷積核的感受野,從而提高模型的魯棒性和準確性。
TCN模型的結構如下圖所示:
TCN模型的預測過(guò)程包括以下幾個(gè)步驟:
- 輸入層:接收時(shí)間序列數據的輸入。
- 卷積層:采用一維卷積對輸入數據進(jìn)行特征提取和抽象,每個(gè)卷積層包含多個(gè)卷積核,可以捕獲不同尺度的時(shí)間序列模式。
- 殘差連接:類(lèi)似于ResNet,通過(guò)將卷積層的輸出與輸入進(jìn)行殘差連接,可以有效地減少梯度消失和模型退化等問(wèn)題,提高模型的魯棒性。
- 重復堆疊:重復堆疊多個(gè)卷積層和殘差連接,逐層提取時(shí)間序列數據的抽象特征。
- 池化層:在最后一個(gè)卷積層之后添加一個(gè)全局平均池化層,將所有特征向量進(jìn)行平均,得到一個(gè)固定長(cháng)度的特征向量。
輸出層:將池化層的輸出通過(guò)一個(gè)全連接層進(jìn)行輸出,得到時(shí)間序列的預測值。
TCN模型的優(yōu)點(diǎn)包括:
- 能夠處理長(cháng)序列數據,并且具有良好的并行性。
- 通過(guò)引入殘差連接和空洞卷積等技術(shù),避免了梯度消失和過(guò)擬合的問(wèn)題。
- 相對于傳統RNN模型,TCN模型具有更高的計算效率和預測準確率。
# 模型構建TCN = TCNModel( input_chunk_length=13, output_chunk_length=12, n_epochs=200, dropout=0.1, dilation_base=2, weight_norm=True, kernel_size=5, num_filters=3, random_state=0,)# 模型訓練,無(wú)協(xié)變量TCN.fit(series=train, val_series=val, verbose=True)# 模型訓練,有協(xié)變量TCN.fit(series=train, past_covariates=train_month, val_series=val, val_past_covariates=val_month, verbose=True)# 模型推理backtest = TCN.historical_forecasts( series=ts, # past_covariates=month_series, start=0.75, forecast_horizon=10, retrain=False, verbose=True,)# 成果可視化ts.plot(label="actual")backtest.plot(label="backtest (D=10)")plt.legend()plt.show()數據歸一化對時(shí)序預測影響探究?
原始數據是否按月份生成協(xié)變量,是否歸一化,對最終時(shí)序預測效果影響重大,就本實(shí)驗場(chǎng)景而言,原始數據為百分制更適用于無(wú)歸一化&有協(xié)變量方式,協(xié)變量需根據實(shí)際業(yè)務(wù)表現進(jìn)行選擇。
歸一化&無(wú)協(xié)變量
歸一化&有協(xié)變量
無(wú)歸一化&無(wú)協(xié)變量
無(wú)歸一化&有協(xié)變量
Paper:Probabilistic Forecasting with Temporal Convolutional Neural Network.Code:deepTCN
DeepTCN(Deep Temporal Convolutional Networks)是一種基于深度學(xué)習的時(shí)序預測模型,它是對傳統TCN模型的改進(jìn)和擴展。DeepTCN模型使用了一組1D卷積層和最大池化層來(lái)處理時(shí)序數據,并通過(guò)堆疊多個(gè)這樣的卷積-池化層來(lái)提取時(shí)序數據的不同特征。在DeepTCN模型中,每個(gè)卷積層都包含多個(gè)1D卷積核和激活函數,并且使用殘差連接和批量歸一化技術(shù)來(lái)加速模型的訓練。
DeepTCN模型的訓練過(guò)程通常涉及以下幾個(gè)步驟:
- 數據預處理:將原始的時(shí)序數據進(jìn)行標準化和歸一化處理,以減小不同特征的尺度不一致對模型訓練的影響。
- 模型構建:使用多個(gè)1D卷積層和最大池化層構建DeepTCN模型,可以使用深度學(xué)習框架,如TensorFlow、PyTorch等來(lái)構建模型。
- 模型訓練:使用訓練數據集對DeepTCN模型進(jìn)行訓練,并通過(guò)損失函數(如MSE、RMSE等)來(lái)度量模型的預測性能。在訓練過(guò)程中,可以使用優(yōu)化算法(如SGD、Adam等)來(lái)更新模型參數,并使用批量歸一化和DeepTCN等技術(shù)來(lái)提高模型的泛化能力。
模型評估:使用測試數據集對訓練好的DEEPTCN模型進(jìn)行評估,并計算模型的性能指標,如平均絕對誤差(MAE)、平均絕對百分比誤差(MAPE)等。
就本實(shí)驗場(chǎng)景而言,受原始數據樣本限制,輸入輸出長(cháng)度和batch_size無(wú)法過(guò)大調整,從性能角度建議選用大batch_size&短輸入輸出方式。
# 短輸入輸出deeptcn = TCNModel( input_chunk_length=13, output_chunk_length=12, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 長(cháng)輸入輸出deeptcn = TCNModel( input_chunk_length=60, output_chunk_length=20, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 長(cháng)輸入輸出,大batch_sizedeeptcn = TCNModel( batch_size=60, input_chunk_length=60, output_chunk_length=20, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 短輸入輸出,大batch_sizedeeptcn = TCNModel( batch_size=60, input_chunk_length=13, output_chunk_length=12, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)
短輸入輸出
長(cháng)輸入輸出
長(cháng)輸入輸出,大batch_size
短輸入輸出,大batch_size
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。