適馬|前沿高端技術之遞歸神經網絡(RNN)

適馬|前沿高端技術之遞歸神經網絡(RNN)

文章圖片

適馬|前沿高端技術之遞歸神經網絡(RNN)

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

圖6.3來自關于RNN一個著名博客(http://karpathy.github.io/2015/05/21/rnn-effectiveness) , 其中作者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概括了這個過程 。

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

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

相關經驗推薦