2017年3月19日 星期日

[AI] 循環式神經網路 (RNN, Recurrent Neural Networks) 介紹

[本人沒有文中的圖片版權,僅作為個人筆記使用而非商用]

Recurrent 劍橋辭典字面上的意思是 happening again many times

也就是重複發生非常多次的意思,至於為什麼,等等看結構圖就能夠約略明白


RNN (Recurrent Neural Networks) vs Feedforward NN (Neural Networks)

循環式神經網路與前饋式類神經網路不相同的地方在於

前饋式類神經網路,不同層之間有互相連接,同一層之間則未必,如下圖一所示

 「Neural Networks」的圖片搜尋結果
圖一、傳統類神經網路

但是循環式神經網路,同一層的神經元之間則是彼此之間互相連接,甚至輸出之後也會聯回自己本身,如下圖二、三、四。

「recurrent Neural Networks」的圖片搜尋結果
圖二、RNN -1
「recurrent Neural Networks」的圖片搜尋結果
圖三、RNN -2

相關圖片
圖四、RNN -3

RNN 的設計哲學

這樣的設計是因為前饋式神經網路設計辦法因應需要前後關係的問題。

例如,自然語言處理(Natural Language Processing, NLP) 中,如果要預測下一個字詞,我們就需要前段的文字資訊才能判斷。[1]

如果是前饋式的類神經網路,在辨識照片上能夠取得不錯的結果,是因為辨識的照片之間,沒有前後關係。像是這張影像如果是貓,下張需要辨識的影像可能是大象,貓與大象之間是沒有邏輯上的直接相關性。

但是如果需要因應包含時間上順序(order)的問題,前饋式類神經網路就顯得力不從心。

但是RNN則不同,它的設計允許前一層的輸出能夠影響下一個時刻的輸出。意即是隱藏層(Hidden Layer)的神經元能夠接收到前一個時刻其他同層神經元,甚至自己本身的輸出的回饋(feedback)。因此,能根據前一輪記憶的結果來提昇推測下一個單字的準確度。[2]


RNN的展開

如果我們將下圖五左側的RNN結構給展開來,就會得到一個序列式的形式,如右側所示。

我們可以看到,隨著不同的時間點(t0, t1, t2, ...),就會能夠得到不同的輸出結果(h0, h1, h2, ...),最終,將結果合併起來,我們就可以得到最後的預測結果。


沒有留言:

張貼留言

/* 載入prettify的autoloader */ /* 載入JQuery */