雙向RNN原理

1. 引入

我們之前已經瞭解了RNN中的GRU[2]和LSTM[3]。

怎麼樣才能進一步優化RNN這樣的模型呢?就是使用雙向RNN,它能使得我們在序列的某點處,不僅獲取之前的信息,還能獲取將來的信息。

將來的信息是什麼意思呢?爲什麼根據之前的信息還不足夠網絡做決策?

我們看下面的一個例子:用傳統RNN做NER,判定某個單詞是否爲人名。

在這裏插入圖片描述

例子中給出的兩句話,第一句話中的Teddy不是人名(是泰迪熊玩具),第二句話中的纔是人名。

我們可以看到,要判斷Teddy是否爲人名,如果僅僅根據它之前的信息(“He said”),是難以進行判斷的。

這就是單向RNN的困境。不僅僅是RNN,單向的GRU/LSTM都存在這樣的問題。

2. 雙向RNN的原理

那雙向RNN是如何解決這個問題的呢?

例如,輸入一個句子,有四個單詞,每個單詞用x表示,雙向RNN如下圖所示。

在這裏插入圖片描述

其中紫色部分的框圖和連接線表示原始的單向RNN,他們依次從左向右連接。

綠色的部分,表示反向連接,他們依次反向向前連接。

這個網絡構成了一個無環圖。給定一個輸入序列(x<1>,…,x<4>),這個網絡首先進行前向計算(正向),依次得到正向a<1>, a<2>, a<3>, a<4>的值;然後進行反向計算,依次得到反向a<4>, a<3>, a<2>, a<1>的值。

這樣,給定一個句子:“He said,Teddy Roosevelt”,要判斷Teddy是否爲人名,這個雙向網絡就會考慮之前的信息“He said”,也會考慮之後的信息“Roosevelt”,來綜合做判斷。

這就是雙向RNN。上圖中的基本單元,可以爲RNN單元,也可以是GRU單元,或者是LSTM單元。

3. 雙向網絡

根據上面的原理,我們可以有很多種雙向序列模型:

  • 雙向RNN
  • 雙向GRU
  • 雙向LSTM

雙向序列模型的優點,是可以考慮整個句子的信息,即使在句子中間,也可以綜合考慮過去的信息和將來的信息。

當然,它也有缺點:

  • 需要完整數據的序列,你才能預測任意位置。

舉個例子,比如語音識別系統中,這就要求你必須等待一個人說完整句話,才能做出識別,這樣就有一個比較長的等待時間。

但是對於很多NLP的應用,你可以獲取完整的整個句子,那這個標準的雙向RNN算法就很高效。

4. 參考

  • [1]. Andrew Ng Sequence Models video
  • [2]. https://blog.csdn.net/ybdesire/article/details/105374720
  • [3]. https://blog.csdn.net/ybdesire/article/details/105621683
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章