1. 程式人生 > 其它 >動手學深度學習 | 雙向迴圈神經網路 | 59

動手學深度學習 | 雙向迴圈神經網路 | 59

目錄

雙向迴圈神經網路

雙向LSTM非常不適合做推理,基礎是不能用在預測下一個詞。

Bi-RNN的作用主要是對一個句子做特徵提取,比如做翻譯, 給句子A翻譯句子B,那麼可以對句子A使用Bi-RNN去雙向的看它。

程式碼

這裡程式碼不會講具體實現,但是其實很簡單,前向的隱藏層就正常進行運算。反向的怎麼實現呢?首先把reverse(input),然後輸入到隱層得到一個輸出,再講這個輸出reverse(), 最後將這個兩個輸出進行連線。

# 可以直接指定RNN的單元和是否是雙向的
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)

下面是一個錯誤的案例,就是要說明不能使用雙向迴圈神經網路來做預測。

QA

  1. 時間序列預測,也用雙向的嗎?這個能從後向前看嗎?

時間序列是不能使用雙向的,只能做做完形填空、文字分類這種,可以看完一整段文字的。雙向迴圈神經網路不適合做預測的任務。

  1. 雙向迴圈神經網路,在正向和反向之間有權重關係嗎?

沒有。因為他們正向和反向的權重是concat在一起的,而不是相加或者其他運算,所以是獨立的。

  1. 隱藏層和隱馬爾科夫有什麼關係?

理論上RNN訓練是沒有長度限制的,但是訓練的時候我們把句子裁剪成了不要過長的子序列(比如35),這裡就可以認為暗含使用了隱馬爾科夫的假設。

  1. 雙向是否可以深度雙向?

是的,兩層是一組單元,可以進行疊加。