RNN知識點複習

2021-09-30 20:57:54 字數 1855 閱讀 9886

迴圈神經網路作為一種新型的網路結構,在處理序列資料問題上則不存在上面的兩個缺點。在每乙個時間步中,迴圈神經網路會傳遞乙個啟用值到下乙個時間步中,用於下一時間步的計算。如下圖所示:

下圖是迴圈神經網路結構圖:

門控迴圈單元(gated recurrent unit, gru)改變了rnn的隱藏層,使其能夠更好地捕捉深層次連線,並改善了梯度消失的問題。

簡化的gru 單元:

γu表示更新門,趨近於1時,表示更新,趨近於0時,就不更新。相當於在傳統rnn單元中,增加了乙個γu,而γu也對應一組引數,專門用來學習該不該更新這樣乙個模型。。

完整的gru 單元:

完整的gru單元除了更新門(學習什麼時候該更新)之外,還存在另外乙個門(相關門,控制當前時刻與上個時刻的相關度,趨近於0,說明與上個時刻無關,趨於1,說明與上個時刻相關,相當於學習了乙個判斷當前時刻和上個時刻相關度的模型),以決定每個時間步的候選值,公式如下:

gru能夠讓我們在序列中學習到更深的聯絡,長短期記憶(long short-term memory, lstm)對捕捉序列中更深層次的聯絡要比gru更加有效。

其中,在實際使用時,幾個門值不僅僅取決於a和x< t >,還可能會取決於上乙個記憶細胞的值c,這也叫做**孔連線。

雙向rnn(bidirectional rnns)模型能夠讓我們在序列的某處,不僅可以獲取之前的資訊,還可以獲取未來的資訊。

對於下圖的單向rnn的例子中,無論我們的rnn單元是基本的rnn單元,還是gru,或者lstm單元,對於例子中第三個單詞」teddy」很難判斷是否是人名,僅僅使用前面的兩個單詞是不夠的,需要後面的資訊來進行判斷,但是單向rnn就無法實現獲取未來的資訊。

而雙向rnn則可以解決單向rnn存在的弊端。在brnn中,不僅有從左向右的前向連線層,還存在乙個從右向左的反向連線層。

nlp中,如機器翻譯,通常是完整的句子,所以用雙向rnn,效果更好;

但是語音識別,如果用雙向rnn,就必須等一句話說完,才能開始處理,這樣效率就會很低,所以語音識別領域一般會用更複雜的模型。。

與深層的基本神經網路結構相似,深層rnns模型具有多層的迴圈結構,但不同的是,在傳統的神經網路中,我們可能會擁有很多層,幾十層上百層,但是對與rnn來說,三層的網路結構就已經很多了,因為rnn存在時間的維度,所以其結構已經足夠的龐大。如下圖所示:

複習知識點

題目 class aclass bextends aclass cextends aclass dextends ba obj newd system.out.println obj instanceofb system.out.println obj instanceofc system.out....

知識點複習

scanf d用於輸入十進位制數 u無符號十進位制輸入 o用於輸入8進製數 c用於輸入單個字元 s用於輸入字串 非空格開始,空格結束,字串變數以 0 結尾 f,lf用於輸入實數,一般使用double,lf 表示對應的輸入量不賦給乙個變數 d printf d帶符號十進位制輸出 u無符號十進位制輸出 ...

C 知識點複習

static static變數只能初始化一次 include include using namespace std void fun int i int main 輸出為 0 00因為static變數只初始化一次,static int value i這句話只執行一次,也就是fun 0 的時候執行。...