遞歸神經網路基礎知識:您需要了解的內容
已發表: 2024-09-19循環神經網路 (RNN) 是資料分析、機器學習 (ML) 和深度學習領域的重要方法。本文旨在探索 RNN 並詳細介紹其在更廣泛的深度學習背景下的功能、應用以及優缺點。
目錄
什麼是 RNN?
RNN 的工作原理
RNN 的類型
RNN 與 Transformer 和 CNN 對比
RNN 的應用
優點
缺點
什麼是循環神經網路?
循環神經網路是一種深度神經網絡,可以透過維護內部記憶體來處理順序數據,使其能夠追蹤過去的輸入以產生輸出。 RNN 是深度學習的基本組成部分,特別適合涉及順序資料的任務。
「循環神經網路」中的「循環」是指模型如何將過去輸入的資訊與目前輸入的資訊結合。來自舊輸入的資訊儲存在一種內部記憶體中,稱為「隱藏狀態」。它會重複出現——將先前的計算回饋回自身以創建連續的資訊流。
讓我們用一個例子來示範:假設我們想使用 RNN 來偵測「He ate the pie happy」這句話的情緒(正面或負面)。 RNN 將處理單字he ,更新其隱藏狀態以合併該單字,然後繼續處理ate ,將其與從he學到的內容結合,依此類推,直到句子完成。從長遠來看,閱讀這句話的人會更新他們對每個單字的理解。一旦他們閱讀並理解了整個句子,人們就可以說這個句子是肯定的還是否定的。這種人類的理解過程正是隱藏狀態試圖模擬的。
RNN 是基本的深度學習模型之一。儘管 Transformer 已經取代了它們,但它們在自然語言處理 (NLP) 任務上做得非常好。 Transformer 是先進的神經網路架構,可透過並行處理資料並能夠發現原始文字中相距較遠的單字之間的關係(使用注意力機制)來提高 RNN 效能。然而,RNN 對於時間序列資料以及簡單模型就足夠的情況仍然有用。
RNN 的工作原理
為了詳細描述 RNN 的工作原理,讓我們回到前面的範例任務:對句子「He ate the pie happy」的情緒進行分類。
我們從一個訓練有素的 RNN 開始,它接受文字輸入並返回二進位輸出(1 代表正數,0 代表負數)。在將輸入提供給模型之前,隱藏狀態是通用的——它是從訓練過程中學習到的,但還不是特定於輸入的。
第一個單字He被傳遞到模型中。在 RNN 內部,其隱藏狀態隨後更新(至隱藏狀態 h1)以合併單字He 。接下來,單字ate被傳遞到 RNN,並且 h1 被更新(到 h2)以包含這個新單字。這個過程不斷重複,直到最後一個單字被傳入。然後更新的隱藏狀態用於產生 0 或 1。
以下是 RNN 流程如何運作的直覺表示:
遞歸是 RNN 的核心,但還有一些其他考慮因素:
- 文本嵌入: RNN 無法直接處理文本,因為它僅適用於數位表示。文字必須先轉換為嵌入,然後才能由 RNN 處理。
- 輸出產生: RNN 在每一步都會產生輸出。但是,在處理大部分來源資料之前,輸出可能不是很準確。例如,在僅處理句子的「He ate」部分後,RNN 可能不確定它代表的是正面情緒還是負面情緒——「He ate」可能會被認為是中性的。只有處理完完整的句子後,RNN 的輸出才是準確的。
- 訓練 RNN:必須訓練 RNN 才能準確執行情緒分析。訓練涉及使用許多標籤的範例(例如,“他憤怒地吃了餡餅”,標記為否定),透過 RNN 運行它們,並根據其預測的偏差程度調整模型。此過程為隱藏狀態設定預設值和變更機制,使 RNN 能夠了解哪些單字對於追蹤整個輸入非常重要。
循環神經網路的類型
RNN 有多種不同類型,每種類型的結構和應用各不相同。基本 RNN 的主要差異在於輸入和輸出的大小。高階 RNN,例如長短期記憶 (LSTM) 網絡,解決了基本 RNN 的一些限制。
基本 RNN
一對一 RNN:此 RNN 接受長度為 1 的輸入並傳回長度為 1 的輸出。因此,實際上不會發生遞歸,使其成為標準神經網路而不是 RNN。一對一 RNN 的一個例子是圖像分類器,其中輸入是單個圖像,輸出是標籤(例如“鳥”)。
一對多 RNN:此 RNN 接受長度為 1 的輸入並傳回多部分輸出。例如,在圖像字幕任務中,輸入是一個圖像,輸出是描述該圖像的一系列單字(例如,「陽光明媚的日子裡,一隻鳥穿過河流」)。
多對一 RNN:此 RNN 接受多部分輸入(例如,句子、一系列影像或時間序列資料)並傳回長度為 1 的輸出。例如,一個句子情緒分類器(就像我們討論的那樣),其中輸入是一個句子,輸出是單一情緒標籤(正面或負面)。
多對多 RNN:此 RNN 接受多部分輸入並傳回多部分輸出。一個例子是語音辨識模型,其中輸入是一系列音訊波形,輸出是表示口語內容的單字序列。
高階 RNN:長短期記憶 (LSTM)
長短期記憶網路旨在解決標準 RNN 的一個重大問題:它們會忘記長輸入的資訊。在標準 RNN 中,隱藏狀態對輸入的最近部分有很大的權重。在數千個單字長度的輸入中,RNN 會忘記開頭句子中的重要細節。 LSTM 有一個特殊的架構來解決這個遺忘問題。他們有一些模組可以選擇要明確記住和忘記的資訊。因此,最近但無用的資訊將被遺忘,而舊的但相關的資訊將被保留。因此,LSTM 比標準 RNN 更常見——它們在複雜或長任務上表現得更好。然而,他們並不完美,因為他們仍然選擇忘記物品。
RNN 與 Transformer 和 CNN 對比
另外兩種常見的深度學習模式是卷積神經網路(CNN)和 Transformer。它們有何不同?
RNN 與 Transformer 對比
RNN 和 Transformer 都在 NLP 中大量使用。然而,它們在架構和處理輸入的方法上存在顯著差異。
架構和處理
- RNN: RNN 依序處理輸入,一次處理一個單詞,並保持一個隱藏狀態,該狀態攜帶來自先前單字的資訊。這種順序性質意味著 RNN 可能會因為這種遺忘而與長期依賴性作鬥爭,隨著序列的進展,早期的資訊可能會遺失。
- Transformers:Transformers 使用一種稱為「注意力」的機制來處理輸入。與 RNN 不同,Transformer 同時查看整個序列,將每個單字與其他單字進行比較。這種方法消除了遺忘問題,因為每個單字都可以直接存取整個輸入上下文。由於這種能力,Transformers 在文本生成和情感分析等任務中表現出了卓越的表現。
平行化
- RNN: RNN 的順序性質意味著模型必須完成輸入的一部分的處理,然後才能繼續處理下一部分。這是非常耗時的,因為每一步都依賴前一步。
- 變壓器:變壓器同時處理輸入的所有部分,因為它們的架構不依賴順序隱藏狀態。這使得它們更加可並行化和高效。例如,如果處理句子每個單字需要 5 秒,則 RNN 處理 5 個單字的句子需要 25 秒,而 Transformer 只需要 5 秒。
實際意義
由於這些優點,變壓器在工業中得到越來越廣泛的應用。然而,RNN,特別是長短期記憶 (LSTM) 網絡,對於更簡單的任務或處理較短的序列時仍然有效。 LSTM 通常用作大型機器學習架構中的關鍵記憶體儲存模組。
RNN 與 CNN
CNN 在處理資料和運行機制方面與 RNN 有著根本的不同。
資料類型
- RNN: RNN 專為序列資料(例如文字或時間序列)而設計,其中資料點的順序很重要。
- CNN:CNN 主要用於空間數據,例如圖像,其重點是相鄰數據點之間的關係(例如,圖像中像素的顏色、強度和其他屬性與附近其他像素的屬性密切相關)像素)。
手術
- RNN: RNN 維護整個序列的記憶,使它們適合上下文和序列很重要的任務。
- CNN:CNN 透過卷積層查看輸入的局部區域(例如,相鄰像素)來進行操作。這使得它們對於影像處理非常有效,但對於順序資料則不太有效,因為長期依賴性可能更重要。
輸入長度
- RNN: RNN 可以處理結構定義較少的可變長度輸入序列,使其能夠靈活地處理不同的順序資料類型。
- CNN:CNN 通常需要固定大小的輸入,這可能是處理可變長度序列的限制。
RNN 的應用
RNN 由於能夠有效處理順序資料而被廣泛應用於各個領域。
自然語言處理
語言是一種高度順序的資料形式,因此 RNN 在語言任務上表現良好。 RNN 在文字生成、情緒分析、翻譯和摘要等任務中表現出色。借助像 PyTorch 這樣的函式庫,有人可以使用 RNN 和幾 GB 的文字範例建立一個簡單的聊天機器人。
語音辨識
語音辨識的核心是語言,因此也是高度連續的。多對多 RNN 可用於此任務。在每一步中,RNN 都會接收先前的隱藏狀態和波形,輸出與波形相關的單字(基於截至該點的句子上下文)。
音樂世代
音樂也是高度連續的。歌曲中之前的節拍強烈影響未來的節拍。多對多 RNN 可以將一些起始節拍作為輸入,然後根據使用者的需求產生其他節拍。或者,它可以接受“旋律爵士樂”之類的文字輸入,並輸出旋律爵士節拍的最佳近似值。
RNN 的優點
儘管 RNN 不再是事實上的 NLP 模型,但由於一些因素,它們仍然有一些用途。
良好的順序性能
RNN,尤其是 LSTM,在順序資料上表現良好。 LSTM 憑藉其專門的記憶體架構,可以管理長且複雜的順序輸入。例如,在 Transformer 時代之前,Google翻譯曾經在 LSTM 模型上運行。當基於變壓器的網路組合形成更先進的架構時,LSTM 可用於添加戰略記憶體模組。
更小、更簡單的模型
RNN 的模型參數通常比 Transformer 少。 Transformer 中的注意力層和前饋層需要更多參數才能有效運作。 RNN 可以用更少的運行和資料範例進行訓練,使其對於更簡單的用例更加高效。這會產生更小、更便宜、更有效率的模型,但仍具有足夠的性能。
RNN 的缺點
RNN 失寵是有原因的:Transformers 儘管尺寸更大,訓練過程也更大,但沒有與 RNN 相同的缺陷。
記憶體有限
標準 RNN 中的隱藏狀態嚴重偏差最近的輸入,使其難以保留長期依賴關係。具有長輸入的任務在 RNN 中表現不佳。雖然 LSTM 旨在解決這個問題,但它們只是緩解了這個問題,並沒有完全解決它。許多人工智慧任務需要處理長輸入,這使得有限的記憶體成為一個重大缺點。
不可並行化
RNN 模型的每次運行都取決於前一次運行的輸出,特別是更新的隱藏狀態。因此,必須針對輸入的每個部分順序處理整個模型。相比之下,Transformer 和 CNN 可以同時處理整個輸入。這允許跨多個 GPU 進行平行處理,從而顯著加快運算速度。 RNN 缺乏並行性導致訓練速度較慢、輸出產生速度較慢以及可學習的最大資料量較低。
梯度問題
訓練 RNN 可能具有挑戰性,因為反向傳播過程必須經歷每個輸入步驟(隨時間的反向傳播)。由於時間步長較多,指示應如何調整每個模型參數的梯度可能會退化並變得無效。梯度可能會因消失而失敗,這意味著它們變得非常小,模型無法再使用它們來學習,或者因爆炸而失敗,其中梯度變得非常大,模型超出其更新,從而使模型無法使用。要平衡這些問題是很困難的。