倪 錚 梁 萍
(中國人民解放軍96873部隊 陜西 寶雞 721000)
天氣與人類活動密切相關,隨著科技發展和生活節奏的加快,準確精細的天氣預報在日常生活、工作、國防與軍隊建設上起到越來越重要的作用。但是,氣溫要素的預報一直是天氣預報中的重點和難點,本文利用LSTM神經網絡,初步嘗試精細化氣溫預報的模擬計算。
人工神經網絡一直是氣象預報的一種重要手段,但是由于BP神經網絡的缺陷,其在氣象預報業務方面的發展受到了極大制約。而近年來,人工神經網絡在時間序列上的重大發展,使其在氣象業務上有了重大突破。在時間序列分析中,未來的數據與過去的數據是相關的,但是普通BP神經網絡并不能把這種相關性體現出來,而近年來出現的LSTM網絡能很好地把這種相關性體現出來。并且在語音識別[8-9]、自動樂曲譜寫[10]、自然語言學習[11]等領域已經有了重大應用,在氣象領域也有LSTM結合CNN(Convolitional Neural Networks)進行臨近降水預報的先例[6],還有研究表明通過LSTM神經網絡建立的模型,能有效預報24小時和72小時的逐時次氣溫、濕度和風[1]。
圖1是目前RNN運用的一種典型結構[5],RNN和傳統的多層感知機的不同就是跟時間有了關系,下一時間的數據會受到上一時間數據的影響。圖1的右邊就是將左邊展開的結果。

圖1 典型的RNN結構
從圖中的結構可以看出,一組時間序列(x1,x2,x3,…)的隱藏層和輸出層將由如下公式計算得來:
(1)
(2)
與傳統BP相比,RNN在隱層計算上多了過去時次數據作為輸入,將未來的數據預報與過去數據比較緊密的聯系起來,因此,更適用于時間序列預報。
原生的RNN會遇到一個很大的問題,叫作梯度消失(The vanishing gradient problem for RNNs)。對于傳統深度神經網絡來說,由于sigmoid函數的性質會導致反向傳播過程中梯度消失,導致模型收斂速度過慢,訓練時間加長。而對RNN來說,后面的時間節點對前面時間節點感知力下降,導致模型無法記住更久之前的數據,這也是原生RNN從20世紀80年代末提出以來,一直沒有較大作用的原因。
但是,近幾年,一種改進的RNN較好地解決了這個問題,這就是LSTM(Long-Short Term Memory)。
LSTM的特點是可以記憶長時間的數據,因為它引進了一個核心元素Cell。Cell中有一堆參數state來記錄過去的數據,但是有時候state參數并不是全部有用。比如,Cell中記錄了過去1小時的氣溫,但在輸入了當前時刻的氣溫后,相對于過去1小時的氣溫來說,當前時刻的氣溫更有價值。所以,為了表示這種關系,引入了一種遺忘機制Forget Gate。本文所使用的LSTM結構如圖2所示。

圖2 本文所使用的LSTM結構
本文對LSTM網絡的實現,主要參考了文獻[5,10]對LSTM的公式描述,但是對其結構略有簡化。
圖2中s所代表的就是Cell的參數state;f(t)為Forget Gate方程;i(t)和g(t)共同構成了Input Gate方程,用來更新Cell狀態s;o(t)是Output Gate方程,與s一起輸出h。其方程如下:
f(t)=σ(Wf·[ht-1,xt]+bf)
(3)
i(t)=σ(Wi·[ht-1,xt]+bi)
(4)
g(t)=tanh(Wg·[ht-1,xt]+bg)
(5)
o(t)=σ(Wo·[ht-1,xt]+bo)
(6)
st=f(t)×st-1+i(t)×g(t)
(7)
ht=o(t)×tanh(st)
(8)
如圖3所示,所構建的模型為有兩層LSTM隱層的網絡。

圖3 模型流程及各層輸入輸出的數組形狀
InputLayer:是一個全鏈接層,其輸入數據為2維向量,第二維度是數據的特征;其輸出也是一個2維向量(None,27),第二維度是隱層網絡單元(在實驗中并沒有對節點單元數量進行控制,但是很多研究表明,尋找一個合適節點數是保證訓練速度和訓練效果的有效保障)。根據對LSTM的解釋,為了能輸入LSTMLayer,需要將其變為一個三維向量(None,8,27),增加的一維是時間步長(time step),在這個例子中就是說每8組數據構成一個時間序列。
LSTMLayer:LSTM層的具體結構如上文所述。第一層接受的輸入為InputLayer的輸出(None,8,27),其輸出格式為(None,8,27),第二層接受的輸入為第一層LSTM的輸出(None,8,27),輸出格式也為(None,8,27),但為了能進行輸出層的輸入,需要將其轉為一個2維向量(None,27),去掉的維度是時間步長(time step)。
OutputLayer:是一個全鏈接層,其輸入數據為LSTMLayer的Output,輸出為預報值的2維向量。
眾所周知,人工神經網絡的實現有兩大難題,一是反向傳播梯度下降過慢,二是過擬合,本文通過如下方法來抑制。
(1) 梯度下降問題 本文使用梯度下降優化器來解決這個問題。本文所使用的Adma優化器[4]依靠對梯度的一階期望和二階期望對學習率進行動態調整,目的是將一個固定的學習率變為一個動態的學習率。
(2) 過擬合 使用Dropout來防止過擬合。依據Srivastava等[2]對Dropout的解釋,它能有效抑制過擬合。其主要思想是將每一個神經網絡單元按照一定的概率暫時將其隨機丟棄(Drop),因此每一次訓練網絡都是在訓練不同的網絡模型,這相當于是在訓練多個模型進行組合。
訓練數據:氣溫數據為寶雞市2017年9月到2018年3月每日逐小時實況觀測數據。高度場、渦度場、濕度場和溫度場使用空軍T511數值預報模式計算出的對應數據。每個時次太陽高度角和方位角數據是通過Python的PyEphem庫計算的。其中,T511數值預報模式為每3小時一次預報。
驗證數據:將2018年3月寶雞市逐3小時氣溫作為驗證數據。其特征數據為2018年3月T511數值產品、過去24小時氣溫、太陽高度角和方位角。輸出為逐3小時氣溫預報,并與實況觀測數據進行對比分析。
本實驗使用Python作為開發語言,LSTM的構建使用Google的Tensorflow開源架構。
數據清洗流程如圖4所示。

圖4 數據清洗流程
對空值和缺失值的處理,并沒有一種統一的做法,不同數據只能根據數據特點分別處理。本文中,為了體現數據的連續性將使用上一條數據與下一條數據的均值進行填充,公式如下:
Xt=(Xt-1+Xt+1)/2
(9)
在實驗中,主要對未來24小時的逐3小時氣溫進行預報。根據天氣學原理, 氣溫除與歷史氣溫相關外, 還主要與對流層中下部的氣溫、風、水汽含量等大氣物理量有關。結合預報員的經驗和氣象工作者的長期研究,在數據特征選擇中,主要選取了850 hpa溫度場、850 hpa濕度場、700 hpa濕度場、850 hpa渦度場、700 hpa渦度場、2 m溫度場。另外,為了表現局地的變化,還加上了太陽高度角和方位角。本文基于經驗,初步選取了9個特征,并不排除有其他特征量對結果有較大影響,并且這9個特征在作為因變量時,相互之間也會有一定影響,這在一定程度上也會對結果產生一定偏差。
參數初始化:對于輸入層,對權重初始化為均值為0,標準差為1的標準正態矩陣;對輸出層,初始化為0.1的常數矩陣;對LSTM層,從上面公式可以看出有s和h兩個輸出需要初始化,為了簡單起見,直接初始化為0。
學習率:學習率經過多次實驗,確定為0.001。
時間步長:時間步長可以設為一周、一個月甚至一年,隨著時間步長的加大,可以學習到的數據細節可能會更多。但由于本文數據量和機器性能的局限,只把步長設為一天。
所采取的預報模型如圖5所示。

圖5 預報模型
根據日常氣象業務氣溫精細化預報的要求,當預報氣溫與實際氣溫之差小于等于2.0 ℃時,預報結果即為正確。所以本文所使用的預報準確率定義如下:
(10)
式(10)的含義是預報值與真實值差的絕對值小于等于2.0 ℃的個數與實際個數的比值,可以看到,模型效果越好,acc越接近1。
逐3小時氣溫化氣溫預報與實況的具體對比如圖6所示,橫軸為時間,單位是小時(h),縱軸是氣溫,單位是攝氏度(℃),實曲線為預報值,虛曲線為實況。結果表明:預報準確率為68.75%,日最低氣溫預報準確率為84.62%,日最高氣溫預報準確率為61.54%,預報值能較好地擬合實況。并且,從實況曲線中可以看到有兩次天氣轉折的過程,這兩次轉折也在模型預報中體現了出來,說明LSTM神經網絡結合數值預報產品能對天氣轉折進行較好描述。同時能較好地擬合實況也說明通過Dropout的方法可以避免過擬合的風險。

圖6 實況與預報數據的對比
所訓練模型對寶雞地區2018年3月份的氣溫預報結果顯示:
(1) 其氣溫預報預報準確率為68.75%,日最低氣溫預報準確率84.62%,日最高氣溫預報準確率61.54%,可以滿足平時業務需要。
(2) 能較好地對轉折天氣的氣溫進行預報。
(3) 如果運用Optimizer和Dropout方法,能較好地解決神經網絡收斂過慢和過擬合的問題。
本文運用了LSTM神經網絡,對空軍T511數據模式產品進行了試用,初步探索了LSTM網絡在平時業務過程中的使用方法,并且發現其對氣溫預報的指導性較高,可以運用在平時業務過程中。
本文還存在選取的LSTM模型比較簡單、訓練數據過小,數據特征的選取沒有依靠統計學原理等問題。這些問題對計算結果的影響有待進一步研究。