1. 程式人生 > >LSTM神經網路輸入輸出究竟是怎樣的?

LSTM神經網路輸入輸出究竟是怎樣的?

轉自:https://blog.csdn.net/T7SFOKzorD1JAYMSFk4/article/details/78960039
本題節選自《BAT機器學習面試1000題》,1000題系列作為國內首個AI題庫,囊括絕大部分機器學習和深度學習的筆試面試題、知識點,可以作為機器學習自測題,也可以當做查漏補缺的資料庫。七月線上AI題庫(網頁版及APP版)見“閱讀原文”

第一要明確的是神經網路所處理的單位全部都是:向量

下面就解釋為什麼你會看到訓練資料會是矩陣和張量

常規feedforward 輸入和輸出:矩陣

   輸入矩陣形狀:(n_samples, dim_input)
   輸出矩陣形狀:(n_samples, dim_output)

注:真正測試/訓練的時候,網路的輸入和輸出就是向量而已。加入n_samples這個維度是為了可以實現一次訓練多個樣本,求出平均梯度來更新權重,這個叫做Mini-batch gradient descent。 如果n_samples等於1,那麼這種更新方式叫做Stochastic Gradient Descent (SGD)。
Feedforward 的輸入輸出的本質都是單個向量。

常規Recurrent (RNN/LSTM/GRU) 輸入和輸出:張量

   輸入張量形狀:(time_steps, n_samples,  dim_input)
   輸出張量形狀:(time_steps, n_samples,  dim_output)

注:同樣是保留了Mini-batch gradient descent的訓練方式,但不同之處在於多了time step這個維度。
Recurrent 的任意時刻的輸入的本質還是單個向量,只不過是將不同時刻的向量按順序輸入網路。所以你可能更願意理解為一串向量 a sequence of vectors,或者是矩陣。

python程式碼表示預測的話:

import numpy as np
#當前所累積的hidden_state,若是最初的vector,則hidden_state全為0
hidden_state=np.zeros((n_samples, dim_input))
#print(inputs.shape):(time_steps, n_samples, dim_input)
outputs = np.zeros((time_steps, n_samples, dim_output))

for i in range(time_steps):
#輸出當前時刻的output,同時更新當前已累積的hidden_state outputs[i],
hidden_state = RNN.predict(inputs[i],hidden_state)
#print(outputs.shape):(time_steps, n_samples, dim_output)
但需要注意的是,Recurrent nets的輸出也可以是矩陣,而非三維張量,取決於你如何設計。

若想用一串序列去預測另一串序列,那麼輸入輸出都是張量 (例如語音識別或機器翻譯 一箇中文句子翻譯成英文句子(一個單詞算作一個向量),機器翻譯還是個特例,因為兩個序列的長短可能不同,要用到seq2seq;

若想用一串序列去預測一個值,那麼輸入是張量,輸出是矩陣 (例如,情感分析就是用一串單片語成的句子去預測說話人的心情)

Feedforward 能做的是向量對向量的one-to-one mapping,
Recurrent 將其擴充套件到了序列對序列 sequence-to-sequence mapping.
但單個向量也可以視為長度為1的序列。所以有下圖幾種型別:0?wx_fmt=jpeg
除了最左側的one to one是feedforward 能做的,右側都是Recurrent所擴充套件的

若還想知道更多

可以將Recurrent的橫向操作視為累積已發生的事情,並且LSTM的memory cell機制會選擇記憶或者忘記所累積的資訊來預測某個時刻的輸出。

以概率的視角理解的話:就是不斷的conditioning on已發生的事情,以此不斷縮小sample space

RNN的思想是: current output不僅僅取決於current input,還取決於previous state;可以理解成current output是由current input和previous hidden state兩個輸入計算而出的。並且每次計算後都會有資訊殘留於previous hidden state中供下一次計算

往期題目:

BAT機器學習面試1000題系列(第1~60題)

BAT機器學習面試1000題系列(第61~100題)

BAT機器學習面試1000題系列(第101~200題)

BAT機器學習面試1000題系列(第201~250題)

BAT機器學習面試1000題系列(第251~255題)

BAT機器學習面試1000題系列(第256~260題)

BAT機器學習面試1000題系列(第261~265題)

BAT機器學習面試1000題系列(第266~270題)

BAT機器學習面試1000題系列(第271~275題)

BAT機器學習面試1000題系列(第276~280題)

BAT機器學習面試1000題系列(第281~285題)

BAT機器學習面試1000題系列(第286~290題)

BAT機器學習面試1000題系列(第291~295題)

BAT機器學習面試1000題系列(第296~300題)

BAT機器學習面試1000題系列(第301~305題)