• 正文
    • NO.1|CNN簡介
    • NO.2|雙向LSTM(BiLSTM)
    • NO.3|注意力機制
    • NO.4|CNN-BiLSTM-Attention
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

融合注意力機制的卷積神經(jīng)網(wǎng)絡(luò)-雙向長短期記憶網(wǎng)絡(luò)(CNN-BiLSTM-Attention)的多變量

03/25 12:25
1488
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

CNN-BiLSTM-Attention模型是一種在自然語言處理(NLP)任務(wù)中常用的強大架構(gòu),如文本分類、情感分析等。它結(jié)合了卷積神經(jīng)網(wǎng)絡(luò)(CNN)、雙向長短期記憶網(wǎng)絡(luò)(BiLSTM)和注意力機制的優(yōu)勢,能夠捕捉局部特征和序列數(shù)據(jù)中的長程依賴關(guān)系。

NO.1|CNN簡介

CNN 主要由卷積層和池化層構(gòu)成,其中卷積層利用卷積核進行電力負(fù)荷數(shù)據(jù)的有效非線性局部特征提取,池化層用于壓縮提取的特征并生成更重要的特征信息,提高泛化能力。卷積神經(jīng)網(wǎng)絡(luò)作為一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、目標(biāo)檢測、圖像分割和自然語言處理等領(lǐng)域。CNN的設(shè)計靈感來源于生物視覺系統(tǒng),通過模擬人類視覺處理的方式來實現(xiàn)對圖像等數(shù)據(jù)的高效識別和處理。

CNN的核心是卷積層,它通過卷積操作自動提取輸入數(shù)據(jù)的空間層次特征,并通過池化層降低特征的空間尺寸,同時保留最重要的特征信息。在經(jīng)過多層卷積和池化層之后,通常會有全連接層來產(chǎn)生最終的輸出結(jié)果,如圖像分類的類別標(biāo)簽 。CNN的工作原理主要包括以下幾個關(guān)鍵步驟:

局部感受野:每個神經(jīng)元只響應(yīng)圖像的一個小區(qū)域,這與人類視覺系統(tǒng)的工作原理相似 。

卷積操作:通過滑動窗口(卷積核)在輸入圖像上進行逐元素相乘然后求和的操作,以此提取圖像的局部特征 。

激活函數(shù):如ReLU,用于引入非線性,幫助網(wǎng)絡(luò)學(xué)習(xí)更復(fù)雜的特征 。

池化層:通過最大池化或平均池化減少特征圖的空間尺寸,降低計算量并提取重要特征 。

全連接層:在網(wǎng)絡(luò)的末端,將提取的特征映射轉(zhuǎn)化為最終輸出,如分類結(jié)果 。

CNN的訓(xùn)練通常采用監(jiān)督學(xué)習(xí)的方法,通過調(diào)整網(wǎng)絡(luò)中的權(quán)重和偏置來最小化預(yù)測輸出和真實標(biāo)簽之間的差異。在訓(xùn)練過程中,網(wǎng)絡(luò)學(xué)習(xí)從簡單到復(fù)雜的分層特征,低層可能學(xué)習(xí)到邊緣等基礎(chǔ)特征,而高層可能學(xué)習(xí)到更復(fù)雜的形狀或紋理特征

NO.2|雙向LSTM(BiLSTM)

LSTM是一種特殊的遞歸神經(jīng)網(wǎng)絡(luò)(RNN),擅長捕捉時間序列中的長期依賴關(guān)系,通過引入遺忘門、輸入門和輸出門三種門的邏輯控制單元保持和更新細(xì)胞狀態(tài),加強了長期記憶能力,可以很好地解決RNN梯度消失與梯度爆炸的問題。LSTM 通過學(xué)習(xí)時序數(shù)據(jù)的長時間相關(guān)性,使網(wǎng)絡(luò)可以更好、更快地收斂,有助于提高預(yù)測精度。

(1)遺忘門的作用是從時刻t-1的細(xì)胞狀態(tài)?為?中選擇需要丟棄的信息,具體如公所示。遺忘門通過讀取前一時刻的隱藏層狀態(tài)?和?當(dāng)前時刻的輸入序列?為?,產(chǎn)生一個介于0到1之間的輸出值,其中1代表完全保留信息,0代表完全舍棄信息。

在公式中,?是?表示當(dāng)前時刻t的遺忘門輸出;Wf和bf分別表示遺忘門的權(quán)重矩陣和偏置項;σ代表 sigmoid 激活函數(shù)。

(2) 輸入門的主要功能是根據(jù)當(dāng)前時刻t的輸入?為?決定需要保存在神經(jīng)元中的信息。首先,通過 tanh 層生成時刻t的候選記憶單元狀態(tài)?為?,然后結(jié)合遺忘門的輸出對細(xì)胞狀態(tài)進行更新,得到新的細(xì)胞狀態(tài)?為?。輸入門的具體運算過程如下所示。

其中,??是輸入門在時刻t的輸出狀態(tài),決定了輸入??對更新細(xì)胞狀態(tài)??的影響程度;Wi和bi分別是輸入門的權(quán)重和偏置項;Wc和bc是生成候選記憶單元??的權(quán)重矩陣和偏置;tanh為雙曲正切激活函數(shù);?是?表示元素逐位相乘。

(3) 輸出門從當(dāng)前細(xì)胞狀態(tài)中提取并輸出關(guān)鍵信息。首先通過σ層決定哪些神經(jīng)元狀態(tài)需要被輸出,然后將這些神經(jīng)元狀態(tài)經(jīng)過 tanh 層處理,再與σ輸出相乘,生成最終的?輸出值?,該值也作為下一個時間步的隱藏層輸入。輸出門的計算過程如公式所示。?? ? ? ?其中,?是?輸出門在時刻t的輸出狀態(tài);Wo和 bo分別為輸出門的權(quán)重矩陣和偏置項。

由此可見,LSTM網(wǎng)絡(luò)在訓(xùn)練過程中通常采用單向的數(shù)據(jù)流,即信息只從序列的開始流向結(jié)束。這種單向訓(xùn)練方式可能會導(dǎo)致數(shù)據(jù)的時間序列特征沒有得到充分利用,因為它忽略了從序列末尾到開始的潛在聯(lián)系。為了克服這一限制,BiLSTM(雙向長短期記憶)網(wǎng)絡(luò)被提出。BiLSTM 融合了兩個LSTM層:一個處理正向序列(從前到后),另一個處理反向序列(從后到前)。這種結(jié)構(gòu)的優(yōu)勢在于:

(1)正向LSTM:捕捉時間序列中從過去到當(dāng)前的信息流動,提取序列的前向依賴特征。

(2)反向LSTM:捕捉從未來到當(dāng)前的逆向信息流動,提取序列的后向依賴特征。

前向 LSTM、后向 LSTM 的隱藏層更新狀態(tài)以及 BiLSTM 最終輸出過程如式所示。

式中,?、、?分別為不同層之間的激活函數(shù)。通過結(jié)合這兩個方向的信息,BiLSTM 能夠更全面地理解數(shù)據(jù)在時間序列上的特征聯(lián)系,從而提高模型對數(shù)據(jù)的利用率和預(yù)測精度。這種雙向處理方式使得BiLSTM在處理諸如自然語言處理、語音識別和其他需要理解時間序列前后文信息的任務(wù)中表現(xiàn)出色。

NO.3|注意力機制

注意力機制(Attention Mechanism)是深度學(xué)習(xí)中的一種關(guān)鍵技術(shù),它模仿了人類在處理大量信息時選擇性集中注意力的能力。注意力模型在自然語言處理、圖像識別、語音識別等多個領(lǐng)域都有廣泛應(yīng)用。

注意力機制的核心思想是通過權(quán)重(或分?jǐn)?shù))來表示模型對輸入數(shù)據(jù)中不同部分的關(guān)注程度。這些權(quán)重通常通過一個可學(xué)習(xí)的方式計算得到,以反映不同輸入部分對于當(dāng)前任務(wù)的重要性。注意力機制的數(shù)學(xué)模型通常包括以下幾個步驟:

(1)計算權(quán)重:對于給定的查詢(Query)和一組鍵(Key),計算它們之間的相似度或相關(guān)性得分。?? ? ? ??(2)歸一化:使用softmax函數(shù)對得分進行歸一化處理,得到每個鍵對應(yīng)的權(quán)重。?? ? ? ?(3)加權(quán)求和:根據(jù)權(quán)重對相應(yīng)的值(Value)進行加權(quán)求和,得到最終的注意力輸出。

其中,et是注意力評分,?是?歸一化的注意力權(quán)重,c是加權(quán)上下文向量

NO.4|CNN-BiLSTM-Attention

%% 建立模型#%% Build the modelfrom tensorflow.keras.layers import Input, Conv2D, ReLU, GlobalAveragePooling2D, Dense, Multiply, Reshape, Bidirectional, LSTMfrom tensorflow.keras.models import Modelfrom tensorflow.keras.optimizers import Adam
input_layer = Input(shape=(f_, 1, 1), name='sequence')
# Conv Layer 1x = Conv2D(filters=32, kernel_size=(1, 1), name='conv_1')(input_layer)x1 = x  # For SE blockx = ReLU(name='relu_1')(x)
# Conv Layer 2x = Conv2D(filters=64, kernel_size=(1, 1), name='conv_2')(x)x = ReLU(name='relu_2')(x)x2 = x  # For multiplication
# SE Attention Mechanismse = GlobalAveragePooling2D(name='gapool')(x1)se = Dense(16, activation='relu', name='fc_2')(se)se = Dense(64, activation='sigmoid', name='fc_3')(se)se = Reshape((1, 1, 64))(se)
# Multiply attention weightsx = Multiply(name='multiplication')([x2, se])
# BiLSTM and output layersx = Reshape((f_, 64))(x)  # Reshape for LSTMx = Bidirectional(LSTM(6, return_sequences=False), name='bilstm')(x)output = Dense(1, name='fc')(x)
model = Model(inputs=input_layer, outputs=output)
#%% Compile the modelmodel.compile(optimizer=Adam(learning_rate=1e-2),              loss='mean_squared_error')
#%% Train the modelhistory = model.fit(p_train, t_train,                    epochs=100,                    batch_size=32,                    shuffle=True,????????????????????verbose=1)

----------------------- Error Metrics --------------------------Evaluation Results:Mean Absolute Error (MAE): 1.8489978987170805Mean Squared Error (MSE): 5.891611959966271Root Mean Square Error (RMSE): 2.4272642954499766R^2: 0.9020706144428995Residual Predictive Deviation (RPD): 3.339283608704873Mean Absolute Percentage Error (MAPE): 5.175561686899579%Total execution time: 42.57008957862854 seconds

相關(guān)推薦