遞歸神經(jīng)網(wǎng)絡(luò)(RNN)
RNN是最強(qiáng)大的模型之一,它使我們能夠開(kāi)發(fā)如分類、序列數(shù)據(jù)標(biāo)注、生成文本序列(例如預(yù)測(cè)下一輸入詞的SwiftKey keyboard應(yīng)用程序),以及將一個(gè)序列轉(zhuǎn)換為另一個(gè)序列(比如從法語(yǔ)翻譯成英語(yǔ)的語(yǔ)言翻譯)等應(yīng)用程序。大多數(shù)模型架構(gòu)(如前饋神經(jīng)網(wǎng)絡(luò))都沒(méi)有利用數(shù)據(jù)的序列特性。例如,我們需要數(shù)據(jù)呈現(xiàn)出向量中每個(gè)樣例的特征,如表示句子、段落或文檔的所有token。前饋網(wǎng)絡(luò)的設(shè)計(jì)只是為了一次性地查看所有特征并將它們映射到輸出。讓我們看一個(gè)文本示例,它顯示了為什么順序或序列特性對(duì)文本很重要。I had cleaned my car和I had my car cleaned兩個(gè)英文句子,用同樣的單詞,但只有考慮單詞的順序時(shí),它們才意味著不同的含義。
人類通過(guò)從左到右閱讀詞序列來(lái)理解文本,并構(gòu)建了可以理解文本數(shù)據(jù)中所有不同內(nèi)容的強(qiáng)大模型。RNN的工作方式有些許類似,每次只查看文本中的一個(gè)詞。RNN也是一種包含某特殊層的神經(jīng)網(wǎng)絡(luò),它并不是一次處理所有數(shù)據(jù)而是通過(guò)循環(huán)來(lái)處理數(shù)據(jù)。由于RNN可以按順序處理數(shù)據(jù),因此可以使用不同長(zhǎng)度的向量并生成不同長(zhǎng)度的輸出。圖6.3提供了一些不同的表示形式。
圖6.3來(lái)自關(guān)于RNN一個(gè)著名博客(http://karpathy.github.io/2015/05/21/rnn-effectiveness),其中作者Andrej Karpathy寫(xiě)明了如何使用Python從頭開(kāi)始構(gòu)建RNN并將其用作序列生成器。
6.4.1通過(guò)示例了解RNN如何使用
假設(shè)我們已經(jīng)構(gòu)建了一個(gè)RNN模型,并且嘗試了解它提供的功能。當(dāng)了解了RNN的作用后,就可以來(lái)探討一下RNN內(nèi)部發(fā)生了什么。
讓我們用Thor的評(píng)論作為RNN模型的輸入。我們正在看的示例文本是the action scenes were top notch in this movie... .首先將第一個(gè)單詞the傳遞給模型;該模型生成了狀態(tài)向量和輸出向量?jī)煞N不同的向量。狀態(tài)向量在處理評(píng)論中的下一個(gè)單詞時(shí)傳遞給模型,并生成新的狀態(tài)向量。我們只考慮在最后一個(gè)序列中生成的模型的輸出。圖6.4概括了這個(gè)過(guò)程。
圖6.4演示了以下內(nèi)容:
· RNN如何通過(guò)展開(kāi)和圖像來(lái)工作;
· 狀態(tài)如何以遞歸方式傳遞給同一模型。
到現(xiàn)在為止,我們只是了解了RNN的功能,但并不知道它是如何工作的。在了解其工作原理之前來(lái)看一些代碼片段,它會(huì)更詳細(xì)地展示我們學(xué)到的東西。仍然將RNN視為黑盒:
在上述代碼中,hidden變量表示狀態(tài)向量,有時(shí)也稱為隱藏狀態(tài)。到現(xiàn)在為止,我們應(yīng)該知道了如何使用RNN?,F(xiàn)在來(lái)看一下實(shí)現(xiàn)RNN的代碼,并了解RNN內(nèi)部發(fā)生的情況。以下代碼包含RNN類:
除了上述代碼中的單詞RNN之外,其他一切聽(tīng)起來(lái)與在前面章節(jié)中使用的非常類似,因?yàn)镻yTorch隱藏了很多反向傳播的復(fù)雜度。讓我們通過(guò)init函數(shù)和forward函數(shù)來(lái)了解發(fā)生了什么。
__init__函數(shù)初始化了兩個(gè)線性層,一個(gè)用于計(jì)算輸出,另一個(gè)用于計(jì)算狀態(tài)或隱藏向量。
forward函數(shù)將input向量和hidden向量組合在一起,并將其傳入兩個(gè)線性層,從而生成輸出向量和隱藏狀態(tài)。對(duì)于output層,我們應(yīng)用log_softmax函數(shù)。
initHidden函數(shù)有助于創(chuàng)建隱藏向量,而無(wú)需在第一次時(shí)聲明調(diào)用RNN。讓我們通過(guò)圖6.5了解RNN類的作用。
圖6.5說(shuō)明了RNN的工作原理。
審核編輯 黃昊宇
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4734瀏覽量
100420 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5466瀏覽量
120891
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論