DeepLearning之LSTM模型輸入參數:time_step, input_size, batch_size的理解

1. LSTM模型 輸入參數理解

(Long Short-Term Memory)

lstm是RNN模型的一種變種模式,增加了輸入門,遺忘門,輸出門。

LSTM也是在時間序列預測中的常用模型。

小白我也是從這個模型入門來開始機器學習的坑。

LSTM的基本概念與各個門的解釋已經有博文寫的非常詳細:推薦博文:【譯】理解LSTM(通俗易懂版)

這篇文章寫的非常詳細,生動,概念解釋的非常清楚。我也是從這個博文裏開始理解的。


2. 模型參數

  1. 模型的調參是模型訓練中非常重要的一部分,調整參數前的重要一步就是要理解參數是什麼意思,才能幫助更好的調整參數。
  2. 但是發現在一些實戰模型將代碼直接放在那裏,但是基本參數只是把定義寫在哪裏,沒有生動的解釋,我一開始看的時候也是一臉懵逼。
  3. 在我尋找着寫參數的額定義的時候,往往看不到讓小白一眼就能明白的解釋。
  4. 希望從一個小白的角度來講解我眼中的這些參數是什麼意思,如果有不對,還請指出交流。

3. LSTM 的參數輸入格式

1. 一般表示爲[batch_size, time_step, input_size]

2. 中文解釋爲[每一次feed數據的行數,時間步長,輸入變量個數]


3.1 分開講解,input_size

  1. 如果你使用7個自變量來預測1個因變量,那麼input_size=7,output_size=1
  2. 如果你使用8個自變量來預測3個因變量,那麼input_size=8,output_size=3

這個還是比較好理解的,你的輸入數據,想要通過什麼變量預測什麼變量應該是比較清楚的。

難點是另外兩個參數的區別。


3.2 分開講解,batch_size

  1. 如果你的數據有10000行,訓練100次把所有數據訓練完,那麼你的batch_size=10000/100=100
  2. 如果你的數據有20000行,同樣訓練100次把所有數據訓練完,那麼你的batch_size=20000/100=200
  3. 如果你的數據有20000行,訓練50次把所有數據訓練完,那麼你的batch_size=20000/50=400
  4. 以此類推
  5. 不過只是舉個例子,實際的情況要看你的數據樣本,一般的batch_size小於100,來使你的訓練結果更好,一次feed太多行數據,模型容易喫撐,消化不良,可能需要健胃消食片,哈哈哈哈

3.3 分開講解, time_step

最最最最難理解的就是這個time_step了,我也是琢磨了好久。

  1. 首先要知道,time_step是指的哪個過程?
    是不是看到的圖都是在畫,輸入了什麼,遺忘了什麼,輸出了什麼,以爲每個細胞狀態都是1個time_step?
    如果這樣的話,那麼恭喜你,你和我一樣,都是想錯了,其實那些一串的流程細胞狀態圖都是在1個time_step!都是在1個time_step!都是在1個time_step!
  2. 是不是很驚訝,很奇怪?
  3. 那講的是time_step的內部進行的,而不是在time_step之間。
  4. 換句話說,所謂的t-1的遺留狀態也是在一個time_step裏面的事情,t多少取決於time_step的取值。

此時,再來看看time_step的本身含義,時間步長,時間步長,那麼一定是是和時間有關係啊!!!

4. 重點

4.1 batch_size與time_step

  1. 之前的batch_size中只是規定了一個每次feed多少行數據進去,並沒有涵蓋一個時間的概念進去,
  2. 而這個參數剛好就是對於時間的限制,畢竟你是做時間序列預測,所以纔多了這個參數。
  3. 換句話說,就是在一個batch_size中,你要定義一下每次數據的時間序列是多少?
  4. 如果你的數據都是按照時間排列的,batch_size是100的話,time_step=10
  5. 在第1次訓練的時候,是用前100行數據進行訓練,而在這其中每次給模型10個連續時間序列的數據。
  6. 那你是不是以爲應該是1-10,11-20,21-30,這樣把數據給模型?還是不對,請看下圖。

4.2 [batch_size, time_step, input_size]=[30,5,7]

time_step=n, 就意味着我們認爲每一個值都和它前n個值有關係
在這裏插入圖片描述

  1. 如果 [batch_size, time_step, input_size]=[30,5,7]
  2. 那麼,上圖中,黑色框代表的就是一個batch_size中所含有的數據的量。
  3. 那麼,從上到下的3個紅色框就爲 time_step爲5的時候,每次細胞輸入門所輸入的數據量。
  4. 那麼,列B~列H,一共7列,就爲 input_size

4.3 舉例

再看下圖
在這裏插入圖片描述

time_step=n, 就意味着我們認爲每一個值都和它前n個值有關係

  1. 假如沒有time_step這個參數, [input_size=7,batch_size=30],一共只需要1次就能訓練完所有數據。
  2. 如果有,那麼變成了 [input_size=7,batch_size=30, time_step=5],需要30-5+1=26,需要26次數據連續餵給模型,中間不能停。
  3. 在26次中每一次都要把上一次產生的y,與這一次的5行連續時間序列數據一起feed進去,再產生新的y
  4. 以此往復,直到此個batch_size 結束。

結語

1. input_size 是根據你的訓練問題而確定的。

2. time_step是LSTM神經網絡中的重要參數,time_step在神經網絡模型建好後一般就不會改變了。

3. 與time_step不同的是,batch_size是模型訓練時的訓練參數,在模型訓練時可根據模型訓練的結果以及loss隨時進行調整,達到最優。


非常感謝以下作者,讓我慢慢理解了參數意義,纔有了以上學習筆記!

參考資料:

菜雞的自我拯救,RNN 參數理解

視覺弘毅,RNN之多層LSTM理解

MichaelLiu_dev,理解LSTM(通俗易懂版)

Andrej Karpathy,The Unreasonable Effectiveness of Recurrent Neural Networks

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