07_GRU模型

GRU模型

雙向GRU筆記:https://blog.csdn.net/weixin_44579176/article/details/146459952

概念

  • GRU(Gated Recurrent Unit)也稱為門控循環單元,是一種改進版的RNN。與LSTM一樣能夠有效捕捉長序列之間的語義關聯,通過引入兩個"門"機制(重置門和更新門)來控制信息的流動,從而避免了傳統RNN中的梯度消失問題,并減少了LSTM模型中的復雜性。

    [^ 要點]:1.GRU同樣是通過門機制來解決傳統RNN中的梯度消失問題的 2.GRU相比于LSTM更為簡潔,它只引入了兩個門 :更新門(Update Gate), 重置門(Reset Gate)

核心組件

  1. 重置門(Reset Gate)

    • 作用: 決定如何將新的輸入與之前的隱藏狀態結合。

      • 當重置門值接近0時,表示當前時刻的輸入幾乎不依賴上一時刻的隱藏狀態。
      • 當重置門值接近1時,表示當前時刻的輸入幾乎完全依賴上一時刻的隱藏狀態。
    • 公式(變體版本): r t = σ ( W r ? [ h t ? 1 , x t ] + b r ) r_t = σ(W_r·[h_{t-1},x_t] + b_r) rt?=σ(Wr??[ht?1?,xt?]+br?)

      • r t r_t rt?| 重置門值, r t ∈ ( 0 , 1 ) r_t ∈ (0,1) rt?(0,1)
      • W r W_r Wr? 和$ b_r$ | 重置門權值和偏置項
      • σ | sigmoid函數 保證 r t r_t rt?的輸出值在 0 到 1之間
  2. 更新門(Update Gate)

    • 作用: 決定多少之前的信息需要保留,多少新的信息需要更新。

      • 當更新門值接近0時,意味著網絡只記住舊的隱藏狀態,幾乎沒有新的信息。
      • 當更新門值接近1時,意味著網絡更傾向于使用新的隱藏狀態,記住當前輸入的信息。
    • 公式(變體版本): z t = σ ( W r ? [ h t ? 1 , x t ] + b z ) z_t = σ(W_r·[h_{t-1},x_t] + b_z) zt?=σ(Wr??[ht?1?,xt?]+bz?)

      • z t z_t zt?| 更新門值, z t ∈ ( 0 , 1 ) z_t ∈ (0,1) zt?(0,1)
      • W r W_r Wr? 和$ b_r$ | 重置門權值和偏置項
      • σ | sigmoid函數 保證 z t z_t zt?的輸出值在 0 到 1之間
  3. 候選隱藏狀態(Candidate Hidden State)

    • 作用: 捕捉當前時間步的信息,多少前一隱藏狀態的信息被保留。

    • 公式(變體版本): h ^ t = t a n h ( W h ? [ r t ⊙ h t ? 1 , x t ] + b h ) ?_t = tanh(W_h · [r_t \odot h_{t-1} , x_t] + b_h) h^t?=tanh(Wh??[rt?ht?1?,xt?]+bh?)

      • h ^ t ?_t h^t?| 候選隱藏狀態值, h ^ t ∈ ( ? 1 , 1 ) ?_t ∈ (-1,1) h^t?(?1,1)
      • W h W_h Wh? 和$ b_h$ | 候選隱藏狀態的權重和偏置項
      • tanh| 雙曲正切函數 保證 h t h_t ht?的輸出值在 -1 到 1之間
      • ⊙ \odot | Hadamard Product
  4. 最終隱藏狀態(Final Hidden State)

    • 作用: 控制信息更新,傳遞長期依賴。

    • 公式(變體版本): h t = ( 1 ? z t ) ⊙ h t ? 1 + z t ⊙ h ^ t h_t = (1-z_t) \odot h_{t-1} + z_t \odot ?_t ht?=(1?zt?)ht?1?+zt?h^t?

      • h t h_t ht?| 當前時間步的隱藏狀態
      • z t z_t zt? | 更新門的輸出,控制新舊信息的比例
      • ⊙ \odot | Hadamard Product

    重置門與更新的對比

    門控機制核心功能直觀理解
    重置門(Reset Gate)控制歷史信息對當前候選狀態的影響:決定是否忽略部分或全部歷史信息,從而生成新的候選隱藏狀態。“是否忘記過去,重新開始?”(例如:處理句子中的突變或新段落)
    更新門(Update Gate)控制新舊信息的融合比例:決定保留多少舊狀態的信息,同時引入多少候選狀態的新信息。“保留多少舊記憶,吸收多少新知識?”(例如:維持長期依賴關系)

    重置門作用舉例:

    ? input: [‘風’,‘可以’,‘吹起’,‘一大張’,‘白紙’,‘’,‘無法’,‘吹走’,‘一只’,‘蝴蝶’,‘因為’,‘生命’,‘的’,‘力量’,‘在于’,‘不’,‘順從’]

    • 當處理到 ‘卻’ 時,上文信息 : 風可以吹起一大張白紙

      • 重置門值 : r t = 0.3 r_t = 0.3 rt?=0.3
        • 作用:忽略部分歷史信息,弱化上文影響,為后續信息(無法吹走一只蝴蝶)騰出空間
      • 更新門值 : z t = 0.8 z_t = 0.8 zt?=0.8
        • 作用: 表示保留更多候選隱藏狀態(由于 r t r_t rt?是一個較小的值,所以候選隱藏狀態中新信息占比更大) 的信息

      [^ 注]: 此時$ h_t $接近 $ ?_t$,隱藏狀態被重置為“準備處理轉折后的新邏輯”。

    • 當處理到 ‘因為’ 時,上文信息 : 少部分的 "風可以吹起一大張白紙 " + 大部分的 “無法吹走蝴蝶”

      • 重置門值 : r t = 0.8 r_t = 0.8 rt?=0.8
        • 作用:保留更多上文信息,以便與后續原因關聯
      • 更新門值 : z t = 0.5 z_t = 0.5 zt?=0.5
        • 作用: 平衡舊狀態(上文結論) 和 新狀態(下文原因) ,逐步構建完整的邏輯鏈

內部結構

在這里插入圖片描述
在這里插入圖片描述

  • GRU的更新門和重置門結構圖

在這里插入圖片描述

Pytorch實現

nn.GRU(input_size, hidden_size, num_layers, bidirectional, batch_first, dropout)[^ input_size ]:輸入特征的維度
[^ hidden_size ]:隱藏狀態的維度
[^ num_layers ]:GRU的層數(默認值為1)
[^ batch_first ]:如果為True,輸入和輸出的形狀為 (batch_size, seq_len, input_size);否則為 (seq_len, batch_size, input_size)
[^ bidirectional ]:如果為True,使用雙向GRU;否則為單向GRU(默認False)
[^ dropout ]:在多層GRU中,是否在層之間應用dropout(默認值為0)
使用示例
# 定義GRU的參數含義: (input_size, hidden_size, num_layers)
# 定義輸入張量的參數含義: (sequence_length, batch_size, input_size)
# 定義隱藏層初始張量的參數含義: (num_layers * num_directions, batch_size, hidden_size)
import torch.nn as nn
import torchdef dm_gru():# 創建GRU層gru = nn.GRU(input_size=5, hidden_size=6, num_layers=2)# 創建輸入張量input = torch.randn(size=(1, 3, 5))# 初始化隱藏狀態h0 = torch.randn(size=(2, 3, 6))# hn輸出兩層隱藏狀態, 最后1個隱藏狀態值等于output輸出值output, hn = gru(input, h0)print('output--->', output.shape, output)print('hn--->', hn.shape, hn)

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

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

相關文章

Playwright + MCP:用AI對話重新定義瀏覽器自動化,效率提升300%!

一、引言:自動化測試的“瓶頸”與MCP的革新 傳統自動化測試依賴開發者手動編寫腳本,不僅耗時且容易因頁面動態變化失效。例如,一個簡單的登錄流程可能需要開發者手動定位元素、處理等待邏輯,甚至反復調試超時問題。而MCP&#xf…

網絡爬蟲-4:jsonpath+實戰

1.jsonpath 2.通過jsonpath實戰 一.Jasonpath核心符號 1)$: 含義:表示 JSON 文檔的根節點。 用法:所有 JSONPath 表達式都以 $ 開頭,表示從根節點開始查詢。 {"store": {"book": [{"title": "Book 1&…

GD32 ARM單片機開發規范檢查清單 GD32嵌入式C代碼檢查清單

GD32 ARM單片機開發規范檢查清單 以下檢查清單基于您的編程規范制定,可用于代碼審查和自檢過程。通過逐項檢查,確保代碼符合項目規范要求。 #mermaid-svg-Ye0FEIS4ZoXDXqaH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:…

求職招聘網站源碼,找工作招工系統,支持H5和各種小程序

招聘找活招工平臺系統源碼 招聘求職找工作軟件 發布信息積分充值招聘系統,里面帶纖細教程 功能介紹: 招工小程序主要針對工地招工工人找工作,工地可以發布招工信息,工人可以發布找活信息,招工信息可以置頂,置頂需要積分,積分可以通過簽到、分享邀請好友、充值獲取,后…

《Oracle DBA入門實戰:十大高頻問題詳解與避坑指南》

Oracle DBA 入門作業十問十答 本文為 Oracle DBA 入門作業整理,涵蓋工具使用、配置管理及權限控制等核心知識點,適合新手快速上手。 如有疑問或補充,歡迎評論區交流! 1. DBA 常用工具有哪些? Oracle Universal Instal…

解決用戶同時登錄輪詢獲取用戶信息錯亂,使用WebSocket和Server-Sent Events (SSE)

為什么更推薦WebSocket Server-Sent Events (SSE) 是一種服務器向客戶端推送數據的單向通信協議,適合某些場景,在解決用戶同時登錄和實時獲取用戶信息的問題上,WebSocket 是更好的選擇。 1. SSE 的局限性 單向通信 SSE 是單向的&#xff0…

發票查驗/發票驗真如何用Java實現接口調用

一、什么是發票查驗?發票驗真接口? 輸入發票基本信息發票代碼、發票號碼、開票日期、校驗碼后6位、不含稅金額、含稅金額,核驗發票真偽。 該接口也適用于機動車、二手車銷售發票、航空運輸電子客票、鐵路電子客票等。 二、如何用Java實現接口…

html5-qrcode前端打開攝像頭掃描二維碼功能

實現的效果如圖所示,全屏打開并且掃描到二維碼后彈窗提醒,主要就是使用html5-qrcode這個依賴庫,html5-qrcode開源地址:GitHub - mebjas/html5-qrcode: A cross platform HTML5 QR code reader. See end to end implementation at:…

cpp-友元

理解 C 中的友元(Friend) 在 C 語言中,封裝(Encapsulation) 是面向對象編程的重要特性之一。它允許類將數據隱藏在私有(private)或受保護(protected)成員中,…

JavaWeb基礎-HTTP協議、請求協議、響應協議

一. HTTP協議 1. HTTP協議:Hyper Text Transfer Protocol,超文本傳輸協議,規定了瀏覽器和服務器之間數據傳輸的規則 2. HTTP協議特點: ① 基于TCP協議:面向鏈接,安全 ② 基于請求-響應模型的:一…

search_fields與filterset_fields的使用

在Django中,search_fields 和 filterset_fields 可以在視圖類中使用,尤其是在 Django REST Framework (DRF) 中。它們分別用于實現搜索和過濾功能。以下是它們在視圖類中的具體使用方法。 1. search_fields 在視圖類中的使用 search_fields 是 DRF 中 S…

數據建模流程: 概念模型>>邏輯模型>>物理模型

數據建模流程 概念模型 概念模型是一種高層次的數據模型,用于描述系統中的關鍵業務概念及其之間的關系。它主要關注業務需求和數據需求,而不涉及具體的技術實現細節。概念模型通常用于在項目初期幫助業務人員和技術人員達成共識,確保對業務需…

在 Ubuntu 中用 Docker 安裝 RAGFlow

一、安裝 1.前提條件 CPU > 4 核 RAM > 16 GB Disk > 50 GB Docker > 24.0.0 & Docker Compose > v2.26.1 安裝docker:在Ubuntu中安裝Docker并配置國內鏡像 2.設置 vm.max_map_count #設置 vm.max_map_count 不小于 262144# 查看 sysctl vm.…

Java隨機生成n位驗證碼

Java學習筆記 今天寫一個隨機生成n位的驗證碼,包含字母大小寫和數字,直接見代碼。 package com.itheima.hello;// 生成一個隨機位數的驗證碼 public class ScannerDemo1 {public static void main(String[] args){System.out.println(getCode(4));Syst…

go復習目錄

全部都是博主的學習筆記,放著鏈接用的,自己收藏,包含基礎內容、go三方包、vue、數據結構、web框架、設計模式、docker、go連接kafka、redis、grpc、中間件 文章目錄 基礎內容go三方包vue數據結構web框架設計模式dockergo連接kafkaredisgrpc中…

23種設計模式-創建型模式-抽象工廠

文章目錄 簡介場景問題1. 風格一致性失控2. 對象創建硬編碼3. 產品族管理失效 解決總結 簡介 抽象工廠是一種創建型設計模式,可以生成相關對象系列,而無需指定它們的具體類。 場景 假設你正在寫一個家具店模擬器。 你的代碼這些類組成: 相…

案例:網絡命名空間模擬隔離主機場景

場景描述 假設我們需要在同一臺物理機上模擬兩臺獨立的主機(Host A 和 Host B),它們分別位于不同的網絡命名空間中,并通過虛擬以太網對(veth pair)進行通信。目標是展示網絡命名空間的隔離性和跨命名空間的…

新聞發布時間抽取(二)

1. 再論抽取方法 在前一期實驗中,對gne組件進行分析和完善,對三種時間抽取的方法進行了實驗對比。 在對抽取結果進行個例分析的過程中,我發現此前實驗存在幾個問題: 抽取的1000篇新聞存在一定的重復,經過ID去重大約減…

算法基礎——棧

一、棧的概念 棧是?種只允許在?端進?數據插?和刪除操作的線性表。 進?數據插?或刪除的?端稱為棧頂,另?端稱為棧底。不含元素的棧稱為空棧。進棧就是往棧中放?元素,出棧就是將元素彈出棧頂。 二、棧的模擬實現 1. 創建 本質還是線性表&#…

Android11至15系統定制篇

Android 11至15系統定制核心要點解析 一、Android 11關鍵定制特性 ?分區存儲強制化? 公共目錄(如Downloads、Pictures)與應用專屬目錄分離,應用更新后無法通過requestLegacyExternalStorage繞過限制?1。需申請MANAGE_EXTERNAL_STORAGE權限…