時序預(yù)測 | MATLAB實(shí)現(xiàn)Attention-GRU時間序列預(yù)測----注意力機(jī)制融合門控循環(huán)單元,即TPA-GRU,時間注意力機(jī)制結(jié)合門控循環(huán)單元
效果一覽
基本介紹
Matlab實(shí)現(xiàn)Attention-GRU時間序列預(yù)測(時間注意力機(jī)制融合門控循環(huán)單元,也可稱呼TPA-GRU,時間注意力機(jī)制結(jié)合門控循環(huán)單元),將注意力機(jī)制( attention mechanism) 引入GRU( gated recurrent unit) 模型之中,最后,將特征數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測試集,訓(xùn)練集用于訓(xùn)練模型,確定最優(yōu)模型參數(shù),驗(yàn)證集和測試集用于對模型效果進(jìn)行評估。
模型結(jié)構(gòu)
相較于LSTM,GRU網(wǎng)絡(luò)比較大的改動在于:
(1)GRU網(wǎng)絡(luò)將單元狀態(tài)與輸出合并為隱藏狀態(tài),依靠隱藏狀態(tài)來傳輸信息。
(2) GRU網(wǎng)絡(luò)將LSTM 中的遺忘門和輸入門整合成為了一個更新門限。正是由于這兩個創(chuàng)新點(diǎn)的引入,使得GRU 模型較LSTM 模型具有如下優(yōu)點(diǎn): 參數(shù)量減少了三分之一,不容易發(fā)生過擬合的現(xiàn)象,在一些情況下可以省略dropout 環(huán)節(jié); 在訓(xùn)練數(shù)據(jù)很大的時候可以有效減少運(yùn)算時間,加速迭代過程,提升運(yùn)算效率; 從計算角度看,其可擴(kuò)展性有利于構(gòu)筑較大的模型。同時,GRU繼承了LSTM 處理梯度問題的能力,其門結(jié)構(gòu)可以有效過濾掉無用信息,捕捉輸入數(shù)據(jù)的長期依賴關(guān)系,在處理序列問題上具有非常出色的表現(xiàn)。
注意力機(jī)制是深度學(xué)習(xí)中的一種仿生機(jī)制,它的提出是由人類觀察環(huán)境的習(xí)慣規(guī)律所總結(jié)而來的,人類在觀察環(huán)境時,大腦往往只關(guān)注某幾個特別重要的局部,獲取需要的信息,構(gòu)建出關(guān)于環(huán)境的描述,而注意力機(jī)制正是如此,其本質(zhì)就是對關(guān)注部分給予較高權(quán)重,從而獲取更有效的信息,從數(shù)學(xué)意義上來說,它可以理解為是一種加權(quán)求和。注意力機(jī)制的主要作用包括:
( 1) 對輸入序列的不同局部,賦予不同的權(quán)重。
( 2) 對于不同的輸出序列局部,給輸入局部不一樣賦權(quán)規(guī)劃。
文章來源:http://www.zghlxwxcb.cn/news/detail-678460.html
程序設(shè)計
- 完整程序和數(shù)據(jù)下載:MATLAB實(shí)現(xiàn)Attention-GRU時間序列預(yù)測(時間注意力機(jī)制融合門控循環(huán)單元,TPA-GRU)。
%% 注意力參數(shù)
Attentionweight = params.attention.weight; % 計算得分權(quán)重
Ht = GRU_Y(:, :, end); % 參考向量
num_time = size(GRU_Y, 3); % 時間尺度
%% 注意力得分
socre = dlarray;
for i = 1: num_time - 1
A = extractdata(squeeze(GRU_Y(:, :, i)));
A = repmat(A, [1, 1, num_hidden]);
A = permute(A, [1, 3, 2]);
A = dlarray(A, 'SCB');
B = squeeze(sum(A .* dlarray(Attentionweight, 'SC'), 1));
C = squeeze(sum(B .* Ht, 1));
socre = [socre; C];
end
%% 注意力得分
a = sigmoid(socre);
Vt = 0;
for i = 1: num_time - 1
Vt = Vt + a(i, :) .* GRU_Y(:, :, i);
end
%% 注意力機(jī)制
bias1 = params.attenout.bias1;
bias2 = params.attenout.bias2;
weight1 = params.attenout.weight1;
weight2 = params.attenout.weight2;
HVT = fullyconnect(Vt, weight1, bias1) + fullyconnect(Ht, weight2, bias2);
%% 全連接層
LastBias = params.fullyconnect.bias1;
LastWeight = params.fullyconnect.weight1;
%% 注意力參數(shù)初始化
params.attention.weight = gpuArray(dlarray(0.01 * randn(num_hidden, num_hidden)));
%% 注意力權(quán)重初始化
params.attenout.weight1 = gpuArray(dlarray(0.01 * randn(num_hidden, num_hidden)));
params.attenout.weight2 = gpuArray(dlarray(0.01 * randn(num_hidden, num_hidden)));
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/127944569?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/127944537?spm=1001.2014.3001.5502文章來源地址http://www.zghlxwxcb.cn/news/detail-678460.html
到了這里,關(guān)于時序預(yù)測 | MATLAB實(shí)現(xiàn)Attention-GRU時間序列預(yù)測(注意力機(jī)制融合門控循環(huán)單元,TPA-GRU)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!