Home >> Blog >> 遞歸神經網路 RNN-Recurrent neural network 簡介
遞歸神經網路 RNN-Recurrent neural network 簡介
RNN 是一種功能強大且穩健的神經網絡,屬於最有前途的算法,因為它是唯一具有內部存儲器的算法。
與許多其他深度學習算法一樣,循環神經網絡相對較舊。它們最初是在 1980 年代創建的,但直到最近幾年我們才看到了它們的真正潛力。計算能力的提高以及我們現在必須處理的大量數據,以及 1990 年代長短期記憶 (LSTM) 的發明,確實將 RNN 帶到了前台。
由於它們的內部記憶,RNN 可以記住有關他們收到的輸入的重要訊息,這使他們能夠非常精確地預測接下來會發生什麼。這就是為什麼它們是時序數據、語音、文案、財務數據、聲音、影片、SEO優化、天氣等序列數據的首選算法。與其他算法相比,循環神經網絡可以對序列及其上下文形成更深入的理解。
但是什麼時候需要使用 RNN?
“只要有一系列數據並且連接數據的時間動態比每個單獨幀的空間內容更重要。” ——萊克斯·弗里德曼(麻省理工學院)
由於在 Siri 和Google翻譯背後的軟件中使用了 RNN,因此遞歸神經網絡在日常生活中出現了很多。
循環神經網絡如何工作
要正確理解 RNN,您需要具備“正常”前饋神經網絡和序列數據的工作知識。
順序數據基本上只是相關事物相互跟隨的有序數據。例如財務數據或 DNA 序列。最流行的序列數據類型可能是時間序列數據,它只是按時間順序列出的一系列數據點。
RNN 與前饋神經網絡
RNN 和前饋神經網絡的名稱來源於它們傳遞訊息的方式。
在前饋神經網絡中,訊息僅沿一個方向移動——從輸入層,通過隱藏層,到輸出層。訊息直接通過網絡移動,並且不會兩次觸及節點。
前饋神經網絡對它們接收的輸入沒有記憶,並且不善於預測接下來會發生什麼。因為前饋網絡只考慮當前輸入,它沒有時間順序的概念。除了訓練之外,它根本不記得過去發生的任何事情。
在 RNN 中,訊息通過一個循環循環。當它做出決定時,它會考慮當前的輸入以及它從之前收到的輸入中學到的東西。
下面的兩張圖片說明了 RNN 和前饋神經網絡之間訊息流的差異。
通常的 RNN 具有短期記憶。結合 LSTM,它們還具有長期記憶(稍後會詳細介紹)。
說明循環神經網絡記憶概念的另一個好方法是用一個例子來解釋它:
想像一下,你有一個普通的前饋神經網絡,並給它“神經元”這個詞作為輸入,它會逐個字符地處理這個詞。當它到達字符“r”時,它已經忘記了“n”、“e”和“u”,這使得這種類型的神經網絡幾乎不可能預測接下來會出現哪個字符。
然而,循環神經網絡能夠記住這些字符是因為它的內部記憶。它產生輸出,複製該輸出並將其循環回網絡。
簡單地說:循環神經網絡將過去添加到現在。
因此,RNN 有兩個輸入:現在和最近的過去。這很重要,因為數據序列包含有關接下來會發生什麼的關鍵訊息,這就是為什麼 RNN 可以做其他算法不能做的事情的原因。
與所有其他深度學習算法一樣,前饋神經網絡為其輸入分配一個權重矩陣,然後產生輸出。請注意,RNN 將權重應用於當前輸入以及先前的輸入。此外,循環神經網絡還將調整 梯度下降和隨時間反向傳播 (BPTT) 的權重。
另請注意,雖然前饋神經網絡將一個輸入映射到一個輸出,但 RNN 可以映射一對多、多對多(翻譯)和多對一(分類語音)。
時間反向傳播
要了解反向傳播的概念,您首先需要了解正向和反向傳播的概念。我們可以用整篇文章討論這些概念,因此我將嘗試提供盡可能簡單的定義。
在神經網絡中,您基本上進行前向傳播以獲取模型的輸出並檢查此輸出是正確還是不正確,以獲取錯誤。反向傳播只不過是通過您的神經網絡反向查找誤差相對於權重的偏導數,這使您能夠從權重中減去該值。
然後通過梯度下降使用這些導數,梯度下降是一種可以迭代最小化給定函數的算法。然後它向上或向下調整權重,具體取決於哪個會減少誤差。這正是神經網絡在訓練過程中的學習方式。
因此,通過反向傳播,您基本上會在訓練時嘗試調整模型的權重。
下圖說明了前饋神經網絡中前向傳播和反向傳播的概念:
BPTT 基本上只是一個花哨的流行語,用於在展開的 RNN 上進行反向傳播。Unrolling 是一種可視化和概念性工具,可幫助您了解網絡中正在發生的事情。大多數情況下,在通用編程框架中實現循環神經網絡時,會自動處理反向傳播,但您需要了解它是如何工作的,以解決開發過程中可能出現的問題。
您可以將 RNN 視為一系列神經網絡,您可以通過反向傳播一個接一個地對其進行訓練。
下圖展示了一個展開的 RNN。在左側,RNN 在等號之後展開。請注意,等號之後沒有循環,因為不同的時間步被可視化並且訊息從一個時間步傳遞到下一個時間步。該圖還說明了為什麼可以將 RNN 視為一系列神經網絡。
如果您使用 BPTT,則需要展開的概念化,因為給定時間步的誤差取決於前一個時間步。
在 BPTT 中,錯誤從最後一個時間步反向傳播到第一個時間步,同時展開所有時間步。這允許計算每個時間步的誤差,從而允許更新權重。請注意,當您有大量時間步長時,BPTT 的計算量可能會很大。
標準RNN的兩個問題
RNN 必須處理兩個主要障礙,但要理解它們,您首先需要知道什麼是梯度。
梯度是關於其輸入的偏導數。如果你不知道這意味著什麼,可以這樣想:梯度測量如果你稍微改變輸入,函數的輸出會發生多大的變化。
您也可以將梯度視為函數的斜率。梯度越高,斜率越陡,模型可以學習的速度越快。但是如果斜率為零,模型就會停止學習。梯度只是衡量所有權重相對於誤差變化的變化。
爆炸梯度
梯度爆炸是指算法在沒有太多理由的情況下對權重賦予了愚蠢的高重要性。幸運的是,這個問題可以通過截斷或壓縮梯度輕鬆解決。
消失的漸變
當梯度的值太小並且模型停止學習或因此花費的時間太長時,就會發生梯度消失。這是 1990 年代的一個主要問題,比爆炸梯度更難解決。幸運的是,Sepp Hochreiter 和 Juergen Schmidhuber 通過 LSTM 的概念解決了這個問題。
長短期記憶 (LSTM)
長短期記憶網絡 (LSTM) 是循環神經網絡的擴展,它基本上擴展了記憶。因此,它非常適合從間隔很長的重要經驗中學習。
LSTM 的單元用作 RNN 層的構建單元,通常稱為 LSTM 網絡。
LSTM 使 RNN 能夠長時間記住輸入。這是因為 LSTM 將訊息包含在內存中,就像計算機的內存一樣。LSTM 可以從其內存中讀取、寫入和刪除訊息。
這種記憶可以看作是一個門控單元,門控意味著單元根據它分配給訊息的重要性來決定是否存儲或刪除訊息(即,是否打開門)。重要性的分配是通過權重發生的,這也是算法學習的。這僅僅意味著它會隨著時間的推移了解哪些訊息是重要的,哪些訊息不重要。
在 LSTM 中,您有三個門:輸入門、遺忘門和輸出門。這些門決定是否讓新輸入進入(輸入門),刪除不重要的訊息(忘記門),還是讓它在當前時間步影響輸出(輸出門)。下面是具有三個門的 RNN 的圖示:
LSTM 中的門以 sigmoid 的形式模擬,這意味著它們的範圍從零到一。它們是模擬的這一事實使它們能夠進行反向傳播。
通過 LSTM 解決了梯度消失的問題,因為它使梯度保持足夠陡峭,從而使訓練相對較短且準確度較高。
概括
現在您對循環神經網絡的工作原理有了適當的了解,您可以確定它是否是用於給定機器學習問題的正確算法。