前沿高階技術之遞迴神經網路(RNN)

王者歸來szh發表於2022-07-20

遞迴神經網路(RNN)

RNN是最強大的模型之一,它使我們能夠開發如分類、序列資料標註、生成文字序列(例如預測下一輸入詞的SwiftKey keyboard應用程式),以及將一個序列轉換為另一個序列(比如從法語翻譯成英語的語言翻譯)等應用程式。大多數模型架構(如前饋神經網路)都沒有利用資料的序列特性。例如,我們需要資料呈現出向量中每個樣例的特徵,如表示句子、段落或文件的所有token。前饋網路的設計只是為了一次性地檢視所有特徵並將它們對映到輸出。讓我們看一個文字示例,它顯示了為什麼順序或序列特性對文字很重要。I had cleaned my car和I had my car cleaned兩個英文句子,用同樣的單詞,但只有考慮單詞的順序時,它們才意味著不同的含義。
人類透過從左到右閱讀詞序列來理解文字,並構建了可以理解文字資料中所有不同內容的強大模型。RNN的工作方式有些許類似,每次只檢視文字中的一個詞。RNN也是一種包含某特殊層的神經網路,它並不是一次處理所有資料而是透過迴圈來處理資料。由於RNN可以按順序處理資料,因此可以使用不同長度的向量並生成不同長度的輸出。圖6.3提供了一些不同的表示形式。
前沿高階技術之遞迴神經網路(RNN)

圖6.3來自關於RNN一個著名部落格(),其中作者Andrej Karpathy寫明瞭如何使用Python從頭開始構建RNN並將其用作序列生成器。

6.4.1 透過示例瞭解RNN如何使用

假設我們已經構建了一個RNN模型,並且嘗試瞭解它提供的功能。當了解了RNN的作用後,就可以來探討一下RNN內部發生了什麼。
讓我們用Thor的評論作為RNN模型的輸入。我們正在看的示例文字是the action scenes were top notch in this movie... .首先將第一個單詞the傳遞給模型;該模型生成了狀態向量和輸出向量兩種不同的向量。狀態向量在處理評論中的下一個單詞時傳遞給模型,並生成新的狀態向量。我們只考慮在最後一個序列中生成的模型的輸出。圖6.4概括了這個過程。
前沿高階技術之遞迴神經網路(RNN)

圖6.4演示了以下內容:
· RNN如何透過展開和影像來工作;
· 狀態如何以遞迴方式傳遞給同一模型。
到現在為止,我們只是瞭解了RNN的功能,但並不知道它是如何工作的。在瞭解其工作原理之前來看一些程式碼片段,它會更詳細地展示我們學到的東西。仍然將RNN視為黑盒:
在上述程式碼中,hidden變數表示狀態向量,有時也稱為隱藏狀態。到現在為止,我們應該知道了如何使用RNN。現在來看一下實現RNN的程式碼,並瞭解RNN內部發生的情況。以下程式碼包含RNN類:
除了上述程式碼中的單詞RNN之外,其他一切聽起來與在前面章節中使用的非常類似,因為PyTorch隱藏了很多反向傳播的複雜度。讓我們透過init函式和forward函式來了解發生了什麼。
__init__函式初始化了兩個線性層,一個用於計算輸出,另一個用於計算狀態或隱藏向量。
forward函式將input向量和hidden向量組合在一起,並將其傳入兩個線性層,從而生成輸出向量和隱藏狀態。對於output層,我們應用log_softmax函式。
initHidden函式有助於建立隱藏向量,而無需在第一次時宣告呼叫RNN。讓我們透過圖6.5瞭解RNN類的作用。
前沿高階技術之遞迴神經網路(RNN)

圖6.5說明了RNN的工作原理。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70020013/viewspace-2906685/,如需轉載,請註明出處,否則將追究法律責任。

相關文章