GRU與LSTM之間的聯系和區別

前面我們談到RNN與LSTM之間的關系,而GRU也是循環神經網絡中的一種模型,那么它與LSTM有什么區別呢?

接下來我來對GRU(Gated Recurrent Unit)模型進行一次深度解析,重點關注其內部結構、參數以及與LSTM的對比。GRU是LSTM的一種流行且高效的變體,由Cho等人在2014年提出,旨在解決與LSTM相同的長期依賴問題,但通過更簡化的結構和更少的參數來實現。

核心思想:簡化LSTM,保持性能

  • LSTM的復雜性:?LSTM通過細胞狀態C_t和隱藏狀態h_t,以及三個門(遺忘門、輸入門、輸出門)來管理信息流。雖然有效,但參數較多,計算稍顯復雜。

  • GRU的解決方案:?GRU的核心創新在于:

    1. 合并狀態:?取消了獨立的細胞狀態(C_t),只保留隱藏狀態(h_t)。隱藏狀態h_t同時承擔了LSTM中細胞狀態(承載長期記憶)和隱藏狀態(作為當前輸出)的雙重角色。

    2. 減少門數量:?將LSTM的三個門合并為兩個門

      • 更新門(z_t):?融合了LSTM中遺忘門輸入門的功能。它決定了有多少舊的隱藏狀態信息需要保留,以及有多少新的候選隱藏狀態信息需要加入。

      • 重置門(r_t):?控制前一個隱藏狀態h_{t-1}對計算新的候選隱藏狀態的影響程度。它決定了在生成候選狀態時,應該“重置”或忽略多少過去的信息。

    3. 簡化計算流程:?合并狀態和門減少了計算步驟和參數數量,通常訓練更快,并且在許多任務上表現與LSTM相當甚至有時更好。

GRU單元的內部結構與計算流程(關鍵!)

想象一個GRU單元在時間步?t?的處理過程。它接收兩個輸入:

  1. 當前時間步的輸入:?x_t?(維度?input_dim)

  2. 前一時間步的隱藏狀態:?h_{t-1}?(維度?hidden_dim)

它產生一個輸出:

  1. 當前時間步的隱藏狀態:?h_t?(維度?hidden_dim)

單元內部的計算涉及以下步驟:

  1. 更新門:

    • z_t = σ(W_z · [h_{t-1}, x_t] + b_z)

    • σ?是 Sigmoid 激活函數(輸出 0 到 1)。

    • W_z?是更新門的權重矩陣 (維度?hidden_dim x (hidden_dim + input_dim))。

    • [h_{t-1}, x_t]?表示將?h_{t-1}?和?x_t?拼接成一個向量 (維度?hidden_dim + input_dim)。

    • b_z?是更新門的偏置向量 (維度?hidden_dim)。

    • z_t?的每個元素在 0 到 1 之間,值接近 1 表示傾向于保留更多舊狀態?h_{t-1},值接近 0 表示傾向于采用更多新候選狀態?h?_t

  2. 重置門:

    • r_t = σ(W_r · [h_{t-1}, x_t] + b_r)

    • W_r?是重置門的權重矩陣 (維度?hidden_dim x (hidden_dim + input_dim))。

    • b_r?是重置門的偏置向量 (維度?hidden_dim)。

    • r_t?的每個元素在 0 到 1 之間,值接近 0 表示“重置”(忽略)前一個隱藏狀態?h_{t-1},值接近 1 表示“保留”前一個隱藏狀態?h_{t-1}。它主要用于控制h_{t-1}在計算候選狀態時的貢獻。

  3. 候選隱藏狀態:

    • h?_t = tanh(W_h · [r_t * h_{t-1}, x_t] + b_h)

    • tanh?激活函數將值壓縮到 -1 到 1 之間。

    • W_h?是候選隱藏狀態的權重矩陣 (維度?hidden_dim x (hidden_dim + input_dim))。

    • b_h?是候選隱藏狀態的偏置向量 (維度?hidden_dim)。

    • [r_t * h_{t-1}, x_t]?表示將?r_t?與?h_{t-1}?逐元素相乘的結果?和?x_t?拼接起來。

      • 這是GRU的關鍵操作之一!r_t * h_{t-1}?表示根據重置門有選擇地“過濾”前一個隱藏狀態的信息。如果?r_t?接近 0,相當于在計算候選狀態時忽略了?h_{t-1},只基于當前輸入?x_t(和偏置)進行計算;如果?r_t?接近 1,則完整保留?h_{t-1}?的信息用于計算新候選狀態。

    • h?_t?表示基于當前輸入?x_t?和經過重置門篩選后的前一個狀態?r_t * h_{t-1}?計算出的新的、候選的隱藏狀態。

  4. 計算當前隱藏狀態:

    • h_t = (1 - z_t) * h?_t + z_t * h_{t-1}

    • *?表示逐元素乘法

    • 這是GRU的核心操作,也是更新門發揮作用的地方:

      • z_t * h_{t-1}: 表示保留多少舊狀態?h_{t-1}

      • (1 - z_t) * h?_t: 表示加入多少新候選狀態?h?_t

      • 新的隱藏狀態?h_t?是舊狀態?h_{t-1}?和候選新狀態?h?_t?的線性插值,由更新門?z_t?控制比例。

      • 如果?z_t?接近 1,則?h_t ≈ h_{t-1}(幾乎完全保留舊狀態,忽略當前輸入)。

      • 如果?z_t?接近 0,則?h_t ≈ h?_t(幾乎完全采用基于當前輸入和重置后狀態計算的新候選狀態)。

可視化表示(簡化)

GRU的內部參數詳解

從上面的計算過程可以看出,一個標準的GRU單元包含以下參數:

  1. 權重矩陣 (Weights):?共有 3 組,分別對應更新門、重置門、候選隱藏狀態。

    • W_z: 更新門的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

    • W_r: 重置門的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

    • W_h: 候選隱藏狀態的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

  2. 偏置向量 (Biases):?共有 3 組,與權重矩陣一一對應。

    • b_z: 更新門的偏置向量 (維度:?hidden_dim)

    • b_r: 重置門的偏置向量 (維度:?hidden_dim)

    • b_h: 候選隱藏狀態的偏置向量 (維度:?hidden_dim)

重要說明

  • 參數共享:?同一個GRU層中的所有時間步?t?共享同一套參數?(W_z,?W_r,?W_h,?b_z,?b_r,?b_h)。這是循環神經網絡的核心特性。

  • 參數總量計算:?對于一個GRU層:

    • 總參數量 =?3 * [hidden_dim * (hidden_dim + input_dim) + hidden_dim]

    • 簡化:?3 * (hidden_dim * hidden_dim + hidden_dim * input_dim + hidden_dim) = 3 * (hidden_dim^2 + hidden_dim * input_dim + hidden_dim)

    • 與LSTM對比:?GRU的參數數量是LSTM的?3/4?(75%)。例如:input_dim=100,?hidden_dim=256:

      • LSTM參數量:?4 * (256^2 + 256*100 + 256) = 4 * 91392 = 365, 568

      • GRU參數量:?3 * (256^2 + 256*100 + 256) = 3 * 91392 = 274, 176

      • 減少了?91, 392?個參數 (約25%)。

  • 輸入維度:?input_dim?是輸入數據?x_t?的特征維度。

  • 隱藏層維度:?hidden_dim?是一個超參數,決定了:

    • 隱藏狀態?h_t、更新門?z_t、重置門?r_t、候選狀態?h?_t?的維度。

    • 模型的容量。更大的?hidden_dim?通常能學習更復雜的模式,但也需要更多計算資源和數據。

  • 激活函數:

    • 更新門(z_t)和重置門(r_t):?使用?Sigmoid?(σ),輸出0-1,控制信息流比例。

    • 候選隱藏狀態(h?_t):?使用?tanh,將值規范到-1到1之間,提供非線性變換。

  • 關鍵操作解讀:

    • 重置門(r_t):?作用于計算候選狀態?h?_t?之前。它決定在生成新的候選信息時,應該考慮多少過去的狀態?h_{t-1}。如果模型發現?h_{t-1}?與預測未來無關(例如,遇到句子邊界或主題切換),它可以學習將?r_t?設置為接近0,從而在計算?h?_t?時“重置”或忽略?h_{t-1},主要依賴當前輸入?x_t

    • 更新門(z_t):?作用于生成最終隱藏狀態?h_t?時。它決定了新的?h_t?應該由多少舊狀態?h_{t-1}?和多少新候選狀態?h?_t?組成。這類似于LSTM中遺忘門(保留多少舊細胞狀態)和輸入門(添加多少新候選細胞狀態)的組合功能。一個接近1的?z_t?允許信息在隱藏狀態中長期保留(緩解梯度消失),一個接近0的?z_t?則使隱藏狀態快速更新為新的信息。

GRU如何解決長期依賴問題?

  1. 更新門是關鍵:?公式?h_t = (1 - z_t) * h?_t + z_t * h_{t-1}?是核心。這個加法操作 (+)?允許梯度在?h_t?直接流向?h_{t-1}?時相對穩定地流動(類似于LSTM細胞狀態中的加法)。反向傳播時,梯度??h_t / ?h_{t-1}?包含?z_t?項(可能接近1)。只要網絡能夠學習到在需要長期記憶的位置讓?z_t?接近1,梯度就可以幾乎無損地流過許多時間步。

  2. 門控機制賦予選擇性:

    • 選擇性重置:?重置門?r_t?允許模型在計算新的候選信息時,有選擇地丟棄與當前計算無關的過去信息

    • 選擇性更新:?更新門?z_t?允許模型有選擇地將新的相關信息(來自?h?_t)融合進隱藏狀態,同時保留相關的長期信息(來自?h_{t-1})。

  3. 參數效率:?更少的參數意味著模型更容易訓練(尤其是在數據量有限時),收斂可能更快,且計算開銷更低,同時通常能達到與LSTM相當的性能。

GRU vs LSTM:主要區別總結

特性LSTMGRU
狀態數量兩個:細胞狀態?C_t?+ 隱藏狀態?h_t一個:隱藏狀態?h_t
門數量三個:遺忘門?f_t, 輸入門?i_t, 輸出門?o_t兩個:更新門?z_t, 重置門?r_t
核心操作C_t = f_t * C_{t-1} + i_t * g_t
h_t = o_t * tanh(C_t)
h_t = (1 - z_t) * h?_t + z_t * h_{t-1}
h?_t = tanh(W·[r_t * h_{t-1}, x_t] + b)
參數數量4組權重矩陣 + 4組偏置 (≈4h(h+d+h))3組權重矩陣 + 3組偏置 (≈3h(h+d+h))?(比LSTM少25%)
計算效率相對較高相對較低?(更少的參數和計算步驟)
性能在大多數任務上非常強大,尤其超長序列大多數任務上與LSTM性能相當或接近,有時略優或略劣,在中小型數據集上有時表現更好
輸出h_t?(可能用于預測)h_t?(直接作為輸出和下一時間步的輸入)

選擇建議:

  • 計算資源/時間敏感:?優先考慮GRU(更快,更少參數)。

  • 任務性能至上(尤其是超長序列):?兩種都試試,LSTM有時在極端長序列任務中更魯棒(得益于獨立的細胞狀態),但差異通常不大。

  • 數據集較小:?GRU可能更有優勢(更少參數,降低過擬合風險)。

  • 實踐:?在很多現代應用中(如Transformer之前的RNN時代),GRU因其效率成為LSTM的有力競爭者。最佳選擇通常需要通過實驗在具體任務和數據集上驗證。

總結

GRU通過合并細胞狀態與隱藏狀態以及將三個門簡化為兩個門(更新門和重置門),創造了一種比LSTM更簡潔高效的循環神經網絡結構。其核心在于:

  1. 更新門(z_t):?控制新隱藏狀態?h_t?由多少舊狀態?h_{t-1}?和多少新候選狀態?h?_t?組成,是維持長期依賴的關鍵。

  2. 重置門(r_t):?控制前一個狀態?h_{t-1}?在計算新候選狀態?h?_t?時的影響程度,實現有選擇的信息重置。

  3. 候選狀態(h?_t):?基于當前輸入?x_t?和經過重置門篩選的前狀態?r_t * h_{t-1}?計算得出的潛在新狀態。

GRU的參數包括三組權重矩陣(W_z,?W_r,?W_h)和對應的偏置向量(b_z,?b_r,?b_h),其總參數量約為LSTM的75%。這種結構上的簡化使得GRU通常訓練更快、計算開銷更小,并且在廣泛的序列建模任務中展現出與LSTM相當甚至有時更優的性能,成為處理長期依賴問題的一種強大而實用的工具。理解GRU的門控機制和參數作用,對于有效使用和調優模型至關重要。

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

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

相關文章

2025年數字信號、計算機通信與軟件工程國際會議(DSCCSE 2025)

2025年數字信號、計算機通信與軟件工程國際會議(DSCCSE 2025) 2025 International Conference on Digital Signal, Computer Communication, and Software Engineering 一、大會信息 會議簡稱:DSCCSE 2025 大會地點:中國北京 審稿…

北峰智能SDC混合組網通信方案,助力無網絡場景高效作業

在自然災害、公共安全事件或大規模活動應急響應中,專用無線對講通信因其不受外部網絡限制、免去通話費用、無需撥號便可實現即時語音調度的特點,展現出其不可替代的價值。尤其在許多無基礎設施的地區,對智能化調度管理的需求并不亞于城市地區…

HarmonyOS應用開發高級認證知識點梳理 (二) 組件交互

以下是 HarmonyOS 應用開發中 ?組件交互? 的核心知識點梳理(高級認證備考重點),涵蓋事件傳遞、狀態管理、通信機制及生命周期協同: 一、事件處理機制 基礎交互類型? (1)點擊事件(onClick) 核心要點?…

【SQL優化案例】索引創建不合理導致SQL消耗大量CPU資源

#隱式轉換 第一章 適用環境 oracle 11glinux 6.9 第二章 Top SQL概況 下面列出我們發現的特定模塊中Top SQL的相關情況: SQL_ID 模塊 SQL類型 主要問題 fnc58puaqkd1n 無 select 索引創建不合理,導致全索引掃描,產生了大量邏輯讀 …

autoas/as 工程的RTE靜態消息總線實現與端口數據交換機制詳解

0. 概述 autoas/as 工程的RTE(Runtime Environment)通過自動生成C代碼,將各SWC(軟件組件)之間的數據通信全部靜態化、結構化,實現了類似“靜態消息總線”的通信模型。所有端口的數據交換都必須經過RTE接口…

【機器學習第四期(Python)】LightGBM 方法原理詳解

LightGBM 概述 一、LightGBM 簡介二、LightGBM 原理詳解?? 核心原理🧠 LightGBM 的主要特點 三、LightGBM 實現步驟(Python)🧪 可調參數推薦完整案例代碼(回歸任務 可視化) 參考 LightGBM 是由微軟開源的…

時序數據庫IoTDB監控指標采集與可視化指南

一、概述 本文以時序數據庫IoTDB V1.0.1版本為例,介紹如何通過Prometheus采集Apache IoTDB的監控指標,并使用Grafana進行可視化。 二、Prometheus聚合運算符 Prometheus支持多種聚合運算符,用于在時間序列數據上進行聚合操作。以下是一些常…

React安裝使用教程

一、React 簡介 React 是由 Facebook 開發和維護的一個用于構建用戶界面的 JavaScript 庫,適用于構建復雜的單頁應用(SPA)。它采用組件化、虛擬 DOM 和聲明式編程等理念,已成為前端開發的主流選擇。 二、React 安裝方式 2.1 使用…

.NET MAUI跨平臺串口通訊方案

文章目錄 MAUI項目架構設計平臺特定實現接口定義Windows平臺實現Android平臺實現 MAUI主界面實現依賴注入配置相關學習資源.NET MAUI開發移動端開發平臺特定實現依賴注入與架構移動應用發布跨平臺開發最佳實踐性能優化測試與調試開源項目參考 MAUI項目架構設計 #mermaid-svg-OG…

BUUCTF在線評測-練習場-WebCTF習題[MRCTF2020]你傳你[特殊字符]呢1-flag獲取、解析

解題思路 打開靶場&#xff0c;左邊是艾克&#xff0c;右邊是詩人&#xff0c;下面有個文件上傳按鈕 結合題目&#xff0c;是一個文件上傳漏洞&#xff0c;一鍵去世看源碼可知是提交按鈕&#xff0c;先上傳個一句話木馬.php試試 <?php eval($_POST[shell]); ?> 被過…

【容器】容器平臺初探 - k8s整體架構

目錄 K8s總攬 K8s主要組件 組件說明 一、Master組件 二、WokerNode組件 K8s是Kubernetes的簡稱&#xff0c;它是Google的開源容器集群管理系統&#xff0c;其提供應用部署、維護、擴展機制等功能&#xff0c;利用k8s能很方便地管理跨機器運行容器化的應用。 K8s總攬 K8s主…

C++--繼承

文章目錄 繼承1. 繼承的概念及定義1.1 繼承的概念1.2 繼承的定義1.2.1 定義格式1.2.2 繼承方式和訪問限定符1.2.3 繼承基類成員訪問方式的變化1.2.3.1 基類成員訪問方式的變化規則1.2.3.2 默認繼承方式 1.3 繼承類模版 2. 基類和派生類的轉化3. 繼承中的作用域3.1 隱藏3.2 經典…

無REPOSITORY、TAG的docker懸空鏡像究竟是什么?是否可刪除?

有時候&#xff0c;使用docker images指令我們可以發現大量的無REPOSITORY、TAG的docker鏡像&#xff0c;這些鏡像究竟是什么&#xff1f; 它們沒有REPOSITORY、TAG名稱&#xff0c;沒有辦法引用&#xff0c;那么它們還有什么用&#xff1f; [rootcdh-100 data]# docker image…

創建一個基于YOLOv8+PyQt界面的駕駛員疲勞駕駛檢測系統 實現對駕駛員疲勞狀態的打哈欠檢測,頭部下垂 疲勞眼睛檢測識別

如何使用Yolov8創建一個基于YOLOv8的駕駛員疲勞駕駛檢測系統 文章目錄 1. 數據集準備2. 安裝依賴3. 創建PyQt界面4. 模型訓練1. 數據集準備2. 模型訓練數據集配置文件 (data.yaml)訓練腳本 (train.py) 3. PyQt界面開發主程序 (MainProgram.py) 4. 運行項目5. 關鍵代碼解釋數據集…

使用FFmpeg將YUV編碼為H.264并封裝為MP4,通過api接口實現

YUV數據來源 攝像頭直接采集的原始視頻流通常為YUV格式&#xff08;如YUV420&#xff09;&#xff0c;尤其是安防攝像頭和網絡攝像頭智能手機、平板電腦的攝像頭通過硬件接口視頻會議軟件&#xff08;如Zoom、騰訊會議&#xff09;從攝像頭捕獲YUV幀&#xff0c;進行預處理&am…

tcpdump工具交叉編譯

本文默認系統已經安裝了交叉工具鏈環境。 下載相關版本源碼 涉及tcpdump源碼&#xff0c;以及tcpdump編譯過程依賴的pcap庫源碼。 網站&#xff1a;http://www.tcpdump.org/release wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz wget http://www.tcpdump.org/r…

神經網絡中torch.nn的使用

卷積層 通過卷積核&#xff08;濾波器&#xff09;在輸入數據上滑動&#xff0c;卷積層能夠自動檢測和提取局部特征&#xff0c;如邊緣、紋理、顏色等。不同的卷積核可以捕捉不同類型的特征。 nn.conv2d() in_channels:輸入的通道數&#xff0c;彩色圖片一般為3通道 out_c…

在MATLAB中使用GPU加速計算及多GPU配置

文章目錄 在MATLAB中使用GPU加速計算及多GPU配置一、基本GPU加速使用1. 檢查GPU可用性2. 將數據傳輸到GPU3. 執行GPU計算 二、多GPU配置與使用1. 選擇特定GPU設備2. 并行計算工具箱中的多GPU支持3. 數據并行處理&#xff08;適用于深度學習&#xff09; 三、高級技巧1. 異步計算…

【unitrix】 4.12 通用2D仿射變換矩陣(matrix/types.rs)

一、源碼 這段代碼定義了一個通用的2D仿射變換矩陣結構&#xff0c;可用于表示二維空間中的各種線性變換。 /// 通用2D仿射變換矩陣&#xff08;元素僅需實現Copy trait&#xff09; /// /// 該矩陣可用于表示二維空間中的任意仿射變換&#xff0c;支持以下應用場景&#xff…

android RecyclerView隱藏整個Item后,該Item還占位留白問題

前言 android RecyclerView隱藏整個Item后,該Item還占位留白問題 思考了利用隱藏和現實來控制item 結果實現不了方案 解決方案 要依據 model 的第三個參數&#xff08;布爾值&#xff09;決定是否保留數據&#xff0c;可以通過 ?filter 高階函數結合 ?空安全操作符? 實…