時序數據處理中DNN和RNN的區別

DNNV vs RNN

在實際處理時序數據的時候思考了這麼一個問題(知乎上也有人問):爲什麼要用RNN,不能把時間序列的數據都作爲特徵值輸入全連接神經網絡(DNN)嗎?

我看到知乎上有個回答不錯:

如果固定了就是前四天輸入,預測第五天,普通的全連接完全可以解決這個問題,無非是擬合一個四元的高階函數罷了。

但是大多數的時序問題,輸入是變長的,而且非常長。有時輸出也要求是變長一個序列。網絡的形狀都是固定的,故而普通的全連接無法解決輸入輸出的變長問題。

上面的回答我是認可的,在定長window作爲輸入下,確實可以用DNN或者其他機器學習模型,只不過收斂速度會慢些。

下面我們回到RNN如何處理時序數據。舉例來說,我們做故障預測(注意這裏是預測),已經知道了故障發生點,如何使用時序數據進行故障預測。

RNN方法一(有問題的方法)

首先我們不可能固定確定的window作爲輸入,因爲不知道應該取1分鐘,還是3分鐘,還是5分鐘。。。因此我們可能需要先截取一個相對較長的時間,比如5分鐘的數據作爲輸入,也就是說故障發生點的前五分鐘數據拿出來進行label,並且分成不同長度:

  1. 故障發生點向前推30秒
  2. 故障發生點向前推1分鐘
  3. 故障發生點向前推2分鐘
  4. 故障發生點向前推3分鐘
  5. 故障發生點向前推4分鐘
  6. 故障發生點向前推5分鐘

相當於不同長度的時間序列打標爲故障,同時取正常數據也是相同數據量的長度數據打標爲正常。塞到RNN訓練。

判定的時候,每一個instance的時間序列需要截成上述6種序列輸入到model進行判定。即從當前時刻,向前推30秒判斷;向前推1分鐘判斷。。。但是如果30秒判定會有故障,那麼1分鐘也應該判定會有故障,餘此類推,這麼來看,就沒有必要把時間序列截成6段。這就是該方法最大的問題。

RNN方法二

上述方法問題的根源在於標註不對,即不確定到底應該是多長的時間序列應該標註爲故障。比如有的故障對應了前面30秒,有的故障對應了前面50秒,有的對應了前面80秒等等。最理想的方案是我們人工標註數據集,比如我們獲得了2千個故障,那麼人工標註每個故障發生前多久的時間序列爲故障序列。這樣的序列可能每個長度都不一樣,假設有兩千種長度,然後統一塞到RNN模型做訓練。

判定的時候,需要根據長度種類,從當前時刻拿出對應的長度來判定,那麼需要拿出多少種長度呢?需要拿出2000種長度嗎?待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章