動手學深度學習 | 雙向迴圈神經網路 | 59
阿新 • • 發佈:2021-10-07
目錄
雙向迴圈神經網路
雙向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
- 時間序列預測,也用雙向的嗎?這個能從後向前看嗎?
時間序列是不能使用雙向的,只能做做完形填空、文字分類這種,可以看完一整段文字的。雙向迴圈神經網路不適合做預測的任務。
- 雙向迴圈神經網路,在正向和反向之間有權重關係嗎?
沒有。因為他們正向和反向的權重是concat在一起的,而不是相加或者其他運算,所以是獨立的。
- 隱藏層和隱馬爾科夫有什麼關係?
理論上RNN訓練是沒有長度限制的,但是訓練的時候我們把句子裁剪成了不要過長的子序列(比如35),這裡就可以認為暗含使用了隱馬爾科夫的假設。
- 雙向是否可以深度雙向?
是的,兩層是一組單元,可以進行疊加。