RNN工作原理和架構

?

## 1. 什么是 RNN?

?

* **全稱:** Recurrent Neural Network(循環神經網絡)

* **核心特點:** 它是一種專門設計用來處理**序列數據**的神經網絡。

* **核心能力:** 擁有“記憶”能力,能夠利用**之前步驟處理過的信息**來影響當前步驟的輸出。

* **解決的核心問題:** 傳統的前饋神經網絡(如多層感知機 MLP 或卷積神經網絡 CNN)在處理序列數據時存在根本性缺陷:

? ? * **輸入/輸出長度固定:** 它們要求輸入和輸出的大小是預先設定好的。

? ? * **缺乏時間維度上的記憶:** 它們將每個輸入樣本視為完全獨立的,無法記住或利用序列中元素之間的順序依賴關系和歷史信息。

* **適用場景舉例:**

? ? * **自然語言處理 (NLP):** 文本生成(寫詩、寫小說)、機器翻譯(理解句子順序)、情感分析(理解上下文)、語音識別(聲音信號是時間序列)。

? ? * **時間序列預測:** 股票價格預測、天氣預測、銷量預測。

? ? * **視頻分析:** 理解視頻幀之間的動作連續性。

? ? * **音樂生成:** 創作有連貫旋律的音樂。

?

**簡單來說:RNN 是一種帶有“記憶”的神經網絡,特別擅長處理像句子、時間線、音樂等有前后順序的數據,因為它能記住之前看到或計算過的信息,并用這些信息來理解當前的內容。**

?

## 2. RNN 的工作原理

?

RNN 的核心思想是引入了 **“循環”** 的概念。關鍵點在于它有一個 **“隱藏狀態”**。

?

1. **時間步:** RNN 將序列數據分解成一個一個的**時間步**。例如,一個句子可以按單詞或字符拆分成多個時間步;一段音頻信號可以按時間點拆分成多個時間步。

2. **輸入:** 在每一個時間步 `t`,RNN 接收兩個輸入:

? ? * **當前時間步的輸入 `X_t`:** 序列在 t 時刻的數據(比如第 t 個單詞的詞向量)。

? ? * **上一個時間步的隱藏狀態 `H_{t-1}`:** 這是 RNN 的“記憶”,包含了之前所有時間步處理過的信息的某種**總結**。在初始時間步(t=0),`H_0` 通常初始化為零向量或小的隨機值。

3. **計算新的隱藏狀態:** RNN 的核心計算發生在這一步。它結合當前輸入 `X_t` 和上一個隱藏狀態 `H_{t-1}`,通過一個**帶參數的函數 `f`**(通常是帶有非線性激活函數如 `tanh` 或 `ReLU` 的線性變換)來計算**當前時間步的隱藏狀態 `H_t`**:

? ? `H_t = f(W_xh * X_t + W_hh * H_{t-1} + b_h)`

? ? * `W_xh`: 連接輸入層到隱藏層的權重矩陣。

? ? * `W_hh`: 連接上一個隱藏狀態到當前隱藏狀態的權重矩陣(這是實現“記憶”和“循環”的關鍵參數)。

? ? * `b_h`: 隱藏層的偏置向量。

? ? * `f`: 激活函數(常用 `tanh`)。

4. **生成輸出 (可選):** 在需要生成輸出的時間步(可能不是每個時間步都需要輸出),RNN 會使用當前的隱藏狀態 `H_t` 來計算當前時間步的輸出 `Y_t`:

? ? `Y_t = g(W_hy * H_t + b_y)`

? ? * `W_hy`: 連接隱藏層到輸出層的權重矩陣。

? ? * `b_y`: 輸出層的偏置向量。

? ? * `g`: 輸出層的激活函數(根據任務不同而變化,如 Softmax 用于分類,線性函數用于回歸)。

5. **傳遞記憶:** 計算得到的當前隱藏狀態 `H_t` 會被傳遞到下一個時間步 `t+1`,作為 `H_t`,繼續參與計算。這個傳遞過程就是“循環”的本質,使得信息能夠沿著時間步流動。

6. **循環進行:** 對序列中的每一個時間步重復步驟 2-5。

?

**關鍵理解:** 隱藏狀態 `H_t` 是 RNN 的“記憶單元”。它捕獲了從序列開始到當前時間步 `t` 的所有相關信息的一個**壓縮表示**。這個狀態被不斷更新并傳遞給未來,使網絡能夠利用歷史信息。

?

## 3. RNN 的架構

?

RNN 的架構可以通過“展開”的方式來直觀理解:

?

1. **基本單元 (RNN Cell):** 這是構成 RNN 的基本計算模塊。它定義了如何根據當前輸入 `X_t` 和前一個隱藏狀態 `H_{t-1}` 計算當前隱藏狀態 `H_t`(以及可能的輸出 `Y_t`)。上面工作原理中描述的公式就是在這個單元里實現的。

2. **展開視圖:** 為了理解 RNN 如何處理整個序列,我們可以將 RNN 在時間維度上“展開”。想象一下,序列有多少個時間步,就把這個基本單元復制多少份,并按時間順序連接起來。

? ? * 每個副本對應一個時間步。

? ? * 每個副本接收兩個輸入:當前時間步的 `X_t` 和**前一個副本**計算得到的 `H_{t-1}`。

? ? * 每個副本計算當前時間步的 `H_t`(和 `Y_t`)。

? ? * 當前副本計算出的 `H_t` 會作為輸入傳遞給**下一個副本**(即下一個時間步)。

? ? * **最重要的是,所有這些展開的副本,使用的是同一套參數 (`W_xh`, `W_hh`, `W_hy`, `b_h`, `b_y`)**!這就是**參數共享**,是 RNN 能夠處理任意長度序列的關鍵,也是其模型效率的來源。無論序列多長,處理每個時間步的規則(參數)都是一樣的。

?

**圖示描述:**

?

```

時間步: t=0 t=1 t=2 ... t=T

輸入: X0 ---------> X1 ---------> X2 ---------> ... ------> XT

? ? ? ? ?| | | |

隱藏狀態: H0 --------> H1 --------> H2 --------> ... ------> HT

? ? ? ? ?| RNN | RNN | RNN | RNN

輸出: Y0 Y1 Y2 ... YT

```

?

* 每個垂直的 `RNN` 框代表同一個 RNN Cell(使用相同的參數)。

* 水平箭頭表示隱藏狀態 `H` 在時間步之間的傳遞,形成循環連接(在展開視圖中表現為鏈式連接)。

* 輸入 `X_t` 在每個時間步進入對應的 Cell。

* 輸出 `Y_t` 在每個時間步從對應的 Cell 產生(根據任務需求決定是否在每個時間步都輸出)。

?

**核心架構組件總結:**

?

* **輸入層:** 接收序列數據在每個時間步的表示 `X_t`。

* **循環隱藏層:** 是 RNN 的核心。它包含隱藏狀態 `H_t` 并執行 `H_t = f(W_xh * X_t + W_hh * H_{t-1} + b_h)` 的計算。該層負責維護和更新“記憶”。

* **輸出層 (可選):** 在需要時,根據當前隱藏狀態 `H_t` 計算輸出 `Y_t = g(W_hy * H_t + b_y)`。

* **參數共享:** 所有時間步共享相同的權重矩陣 (`W_xh`, `W_hh`, `W_hy`) 和偏置向量 (`b_h`, `b_y`)。

?

## 重要補充:基本 RNN 的局限性及發展

?

雖然基本 RNN 的設計理念很巧妙,但它存在一個嚴重問題:**長序列依賴問題**(梯度消失/爆炸問題)。當序列很長時,早期時間步的信息在反向傳播訓練過程中,其梯度要么變得極小(消失)無法有效更新權重,要么變得極大(爆炸)導致訓練不穩定。這使得基本 RNN 很難有效學習長距離的依賴關系(比如理解句子里隔得很遠的兩個詞之間的關系)。

?

為了解決這個問題,研究者提出了更復雜的 RNN 變體:

?

* **LSTM (長短期記憶網絡):** 通過引入“門控機制”(輸入門、遺忘門、輸出門)和“細胞狀態”,顯式地控制信息的遺忘、更新和輸出,能更有效地捕獲長距離依賴。

* **GRU (門控循環單元):** LSTM 的簡化版本,合并了部分門,參數更少,計算效率更高,在許多任務上能達到與 LSTM 相當的性能。

?

**總結:**

?

RNN 是一種通過引入循環連接和隱藏狀態來專門處理序列數據的神經網絡。其工作原理是利用當前輸入和前一個隱藏狀態計算當前隱藏狀態(即更新記憶),并可能生成輸出。通過參數共享和展開視圖,它可以處理任意長度的序列。盡管基本 RNN 存在長序列依賴問題,但其思想是理解更強大的序列模型(如 LSTM、GRU 和 Transformer)的基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84647.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能計算模擬:第一性原理+分子動力學+機器學習

第一性原理分子動力學機器學習”三位一體的綜合手段,已經成為模擬計算的一個前沿方向,為解決傳統計算化學方法面臨的挑戰提供了新的解決方案。國內外已有科研團隊在深化第一性原理與分子動力學的研究與應用拓展,利用機器學習優化大規模計算、…

基于Attention機制的模型。這使得它擺脫了RNN模型順序讀取序列的缺點,可以實現高度的并行化的理解

這句話的核心意思是:??該模型完全基于注意力機制(Attention Mechanism),不再依賴傳統的循環神經網絡(RNN)結構,因此避免了 RNN 的順序計算問題,能夠實現高效的并行化計算??。我們可以從以下幾個方面深入理解: 1. ??"僅基于 Attention 機制"?? ??傳…

解決虛擬機 Kali 系統安裝了VMware Tools 不能拖入文件問題

進入終端,這里我是root模式下,不是root模式在命令前加一個sudo即可,命令如下: apt install open-vm-tools open-vm-tools-desktop 執行成功后輸入 reboot 重啟后即可

GitHub OAuth 認證示例

GitHub鏈接:github_auth 流程圖 功能特性 ? GitHub OAuth 認證? 獲取用戶基本信息? 顯示用戶的 GitHub 倉庫列表? 安全的會話管理? 響應式用戶界面 技術棧 后端 Flask - Python Web 框架Flask-CORS - 跨域資源共享Requests - HTTP 庫Session - 會話管理 …

百度蘿卜快跑攜4顆禾賽激光雷達進軍迪拜,千輛L4無人車開啟全球化戰略

3月28日,百度旗下自動駕駛出行服務平臺“蘿卜快跑”宣布在迪拜市區啟動無人駕駛規模化測試及服務,計劃部署超1000輛L4級全無人駕駛汽車。此次出海不僅是蘿卜快跑首次在中國以外地區實現規模化落地,更以“單車搭載4顆禾賽激光雷達”的硬件配置引發行業關注,標志著中國自動駕…

湖北師范大學人工智能與計算機學院電子信息研究生課程《隨機過程》第六次作業

一. 計算題(共10題,100分) 1. (計算題, 10分)隨機信號 的實測樣本函數如題圖(a)與(b)所示, ,期中X為隨機變量, ,試說明它們可能是均值各態歷經的嗎?(寫明道理&#xff…

解決Windows Server打開DNS提示“拒絕訪問”和“RPC服務器不可用”

問題背景 在一個活動目錄域xyzz.internal中,有兩臺域控制器(Domain Controller),各位于一個站點。 問題 當我們在其中一臺域控制器上的服務器管理器中打開DNS管理工具時,卻看到類似如下錯誤,提示拒絕訪問…

Python中字符串常用的操作方法

在Python中,字符串是不可變序列類型,提供了豐富的內置方法。以下是常用的字符串操作方法及示例: 1. 大小寫轉換 lower() 轉小寫 upper() 轉大寫 capitalize() 首字母大寫 title() 每個單詞首字母大寫 swapcase() 大小寫互換 print(&q…

利用百度/高德地圖API實現車輛軌跡跟蹤系統

利用百度/高德地圖API實現車輛軌跡跟蹤系統 摘要: 本文詳細闡述了如何利用百度地圖API或高德地圖API構建一套完整的車輛軌跡跟蹤系統。內容涵蓋系統架構設計、數據采集與傳輸、地圖API核心功能實現(地圖展示、軌跡繪制、實時定位、歷史軌跡回放)、關鍵優化技術(軌跡糾偏、…

解鎖K-近鄰算法:數據挖掘的秘密武器

目錄 一、K - 近鄰算法是什么二、算法原理深度剖析2.1 核心思想2.2 距離度量方式2.3 K 值的選擇2.4 分類決策規則 三、K - 近鄰算法實踐3.1 準備數據集3.2 代碼實現步驟3.3 結果分析與評估 四、K - 近鄰算法優缺點4.1 優點闡述4.2 缺點分析 五、應用案例展示5.1 圖像識別領域5.…

華為OD機試_2025 B卷_構成正方形數量(Python,100分)(附詳細解題思路)

題目描述 輸入N個互不相同的二維整數坐標&#xff0c;求這N個坐標可以構成的正方形數量。[內積為零的的兩個向量垂直] 輸入描述 第一行輸入為N&#xff0c;N代表坐標數量&#xff0c;N為正整數。N < 100 之后的 K 行輸入為坐標x y以空格分隔&#xff0c;x&#xff0c;y為整…

Qt:智能指針QScopedPointer使用

QScopedPointer和C中的智能指針std::unique_ptr其概念是一樣的&#xff0c;它包裝了new操作符在堆上分配的動態對象&#xff0c;能夠保證動態創建的對象在任何時候都可以被正確地刪除。但它有更嚴格的所有權&#xff0c;并且不能轉讓&#xff0c;一旦獲取了對象的管理權&#x…

TensorFlow基礎之理解計算圖

Tensor Flow TensorFlow 本章介紹TensorFlow的基礎。特別地&#xff0c;你將學習如何用TensorFlow進行基礎計算。在開始使用 TensorFlow之前,你必須理解它背后的哲學。 這個庫基于計算圖的概念&#xff0c;如果你不理解計算圖是如何工作的&#xff0c;你就不能理解如何使用這…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十五) -> 配置構建(二)

目錄 1 -> 定制HAP多目標構建產物 1.1 -> 定義產物的HAP包名 1.2 -> 定義產物的deviceType 1.3 -> 定義產物的distributionFilter 1.4 -> 定義產物preloads的分包 1.5 -> 定義產物的source源碼集-pages 1.6 -> 定義產物的source源碼集-sourceRoots…

[muduo] ThreadPool | TcpClient | 異步任務 | 通信測試

第九章&#xff1a;線程池&#xff08;ThreadPool&#xff09; 在第八章《TcpServer》中&#xff0c;我們了解到muduo::net::TcpServer通過EventLoop線程池處理入站連接。 這些EventLoop線程主要負責網絡I/O&#xff1a;套接字讀寫和定時器處理&#xff0c;由Poller和Channel…

【筆記】解決部署國產AI Agent 開源項目 MiniMax-M1時 Hugging Face 模型下載報錯解決方案

MiniMax-AI/MiniMax-M1&#xff1a;MiniMax-M1&#xff0c;世界上第一個開放權重、大規模的混合注意力推理模型。 一、問題背景 【筆記】解決部署國產AI Agent 開源項目 MiniMax-M1時 Hugging Face 模型下載緩存占滿 C 盤問題&#xff1a;更改緩存位置全流程-CSDN博客 在執行hu…

新手如何利用AI助手Cursor生成復雜項目

新手如何利用AI助手Cursor生成復雜項目 在編程學習的道路上&#xff0c;AI工具正成為新手開發者的得力助手。本文將介紹如何借助Cursor這一強大的AI代碼助手&#xff0c;從零開始構建復雜項目。 一、基礎準備工作 作為編程新手&#xff0c;面對復雜項目時常常不知從何下手。利…

【Fargo】x264的intra refresh 3: 采集、編碼到 RTP打包

實際調試默認并么有打開b_intra_refresh D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\echo\codec\x264\echo_h264_encoder.cpp 即使打開了b_intra_refresh,也不影響RTP打包: 但是有一些要注意的地方: RFC 6184(“RTP Payload Format for H.264 Video”) intra …

Vue3 的生命周期:從 Composition API 視角看

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

面向互聯網大廠Java崗位面試:Spring Boot與微服務架構的深入探討

面向互聯網大廠Java崗位面試&#xff1a;Spring Boot與微服務架構的深入探討 問題1&#xff1a;什么是Spring Boot&#xff0c;它如何簡化Spring應用程序的開發&#xff1f; 簡潔回答&#xff1a; Spring Boot是一個基于Spring框架的開源Java平臺&#xff0c;旨在簡化新Sprin…