LSTM(Long Short-Term Memory)模型的深度解析

在6.28號我發了一個博客《RNN(循環神經網絡)與LSTM(長短期記憶網絡)輸出的詳細對比分析》,但是我并未詳細講解LSTM,LSTM是循環神經網絡中的一個模型,然而通過這篇博客給大家深度解析一下LSTM,重點關注其內部結構和參數。

LSTM是為了解決標準RNN在處理長序列時出現的梯度消失/爆炸問題而設計的一種特殊循環神經網絡結構。它的核心在于引入了門控機制細胞狀態,使得網絡能夠有選擇地記住或忘記信息。

核心思想:解決長期依賴問題

  • 標準RNN的問題:?RNN通過循環隱藏層處理序列。計算梯度時(如通過BPTT),梯度會隨著時間步長呈指數級衰減(消失)或增長(爆炸),導致網絡難以學習到序列中遠距離元素之間的依賴關系。

  • LSTM的解決方案:

    • 細胞狀態:?引入一條貫穿整個序列的“信息高速公路”,稱為細胞狀態。這個狀態的設計使得信息可以在其中相對無損地流動較長的距離。

    • 門控機制:?使用三個“門”(由Sigmoid神經網絡層和逐點乘法操作組成)來精細調控細胞狀態:

      • 遺忘門:?決定從細胞狀態中丟棄哪些舊信息。

      • 輸入門:?決定將哪些新信息寫入細胞狀態。

      • 輸出門:?決定基于當前的細胞狀態輸出什么信息到隱藏狀態。

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

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

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

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

  3. 前一時間步的細胞狀態:?C_{t-1}?(維度?hidden_dim)

它產生兩個輸出:

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

  2. 當前時間步的細胞狀態:?C_t?(維度?hidden_dim)

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

  1. 遺忘門:

    • 計算遺忘因子:f_t = σ(W_f · [h_{t-1}, x_t] + b_f)

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

    • W_f?是權重矩陣(維度?hidden_dim x (hidden_dim + input_dim))。

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

    • b_f?是偏置向量(維度?hidden_dim)。

    • f_t?的每個元素在 0(完全忘記)到 1(完全保留)之間,決定了?C_{t-1}?中每個對應分量被保留的程度。

  2. 輸入門 & 候選值:

    • 輸入門:?i_t = σ(W_i · [h_{t-1}, x_t] + b_i)

      • 計算哪些新值需要更新到細胞狀態。i_t?在 0(不更新)到 1(完全更新)之間。

    • 候選細胞狀態:?g_t = tanh(W_g · [h_{t-1}, x_t] + b_g)

      • 計算一個由當前輸入和前一個隱藏狀態生成的新的候選值向量,這些值是可能要加入到細胞狀態中的。

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

    • W_i,?W_g?是各自的權重矩陣(維度同上),b_i,?b_g?是偏置向量。

  3. 更新細胞狀態:

    • C_t = f_t * C_{t-1} + i_t * g_t

    • *?表示逐元素乘法

    • 這是LSTM的核心操作:

      • 首先,用遺忘門?f_t?控制性地遺忘舊細胞狀態?C_{t-1}?的一部分。

      • 然后,用輸入門?i_t?控制性地添加候選值?g_t?的一部分。

      • 結果就是新的細胞狀態?C_t。這個操作(加法和乘法)允許梯度在?C_t?上相對穩定地流動。

  4. 輸出門:

    • o_t = σ(W_o · [h_{t-1}, x_t] + b_o)

      • 計算基于細胞狀態?C_t?應該輸出哪些部分到隱藏狀態?h_to_t?在 0(不輸出)到 1(完全輸出)之間。

    • W_o?是權重矩陣,b_o?是偏置向量。

  5. 計算當前隱藏狀態:

    • h_t = o_t * tanh(C_t)

    • 首先,將新的細胞狀態?C_t?通過?tanh?激活(將其值規范到 -1 到 1 之間)。

    • 然后,用輸出門?o_t?控制性地輸出?tanh(C_t)?的一部分。這個?h_t?就是當前時間步的輸出(如果需要預測,比如?y_t,通常會對?h_t?應用一個額外的全連接層?W_y * h_t + b_y),同時也是下一個時間步的輸入之一。

可視化表示(簡化)

LSTM的內部參數詳解

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

  1. 權重矩陣 (Weights):?共有 4 組,分別對應遺忘門、輸入門、候選值、輸出門。

    • W_f: 遺忘門的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

    • W_i: 輸入門的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

    • W_g: 候選細胞狀態的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

    • W_o: 輸出門的權重矩陣 (維度:?hidden_dim x (hidden_dim + input_dim))

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

    • b_f: 遺忘門的偏置向量 (維度:?hidden_dim)

    • b_i: 輸入門的偏置向量 (維度:?hidden_dim)

    • b_g: 候選細胞狀態的偏置向量 (維度:?hidden_dim)

    • b_o: 輸出門的偏置向量 (維度:?hidden_dim)

重要說明

  • 參數共享:?同一個LSTM層中的所有時間步?t?共享同一套參數?(W_f,?W_i,?W_g,?W_o,?b_f,?b_i,?b_g,?b_o)。這是RNN/LSTM的關鍵特性,使得模型能夠處理任意長度的序列,并且大大減少了參數量(相比于為每個時間步都設置獨立參數)。

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

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

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

    • 例如:input_dim=100,?hidden_dim=256, 則參數量 =?4 * (256*256 + 256*100 + 256) = 4 * (65536 + 25600 + 256) = 4 * 91392 = 365, 568。可見,參數量主要受?hidden_dim?的平方影響。

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

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

    • 細胞狀態?C_t?和隱藏狀態?h_t?的維度。

    • 每個門(f_t,?i_t,?o_t)和候選值(g_t)向量的維度。

    • 模型的容量(表示能力)。更大的?hidden_dim?通常能學習更復雜的模式,但也需要更多計算資源和數據,更容易過擬合。

  • 激活函數:

    • 門(f, i, o):?使用?Sigmoid?(σ),因為它輸出 0-1,完美模擬“開關”或“比例控制器”的概念。

    • 候選值(g)和 細胞狀態輸出:?使用?tanh,因為它輸出 -1 到 1,有助于穩定梯度流(中心化在0附近),且能表示正負信息。

  • 細胞狀態 vs 隱藏狀態:

    • 細胞狀態 (C_t):是LSTM的“記憶體”,承載著長期信息流。它主要受門控機制調控,其內部變換(加法和乘法)是梯度穩定流動的關鍵。

    • 隱藏狀態 (h_t):是LSTM在時間步?t?的“輸出表示”。它由輸出門?o_t?基于當前的細胞狀態?C_t?過濾后得到。h_t?是傳遞給下一個時間步(作為?h_{t-1})和/或用于當前時間步預測的輸出。

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

  1. 細胞狀態作為信息高速公路:?C_t = f_t * C_{t-1} + i_t * g_t?這個設計是核心。梯度可以通過?C_t?直接流向?C_{t-1}(通過加法操作?+),而不會像標準RNN那樣在每個時間步都經過壓縮性的激活函數(如?tanh)導致指數級衰減。乘法操作?f_t *?雖然也可能導致梯度消失,但?f_t?是由網絡學習的,它可以選擇讓某些維度的遺忘因子接近1(即完全保留),使得對應維度上的梯度可以幾乎無損地流過很多時間步。

  2. 門控機制賦予選擇性:?三個門讓LSTM擁有強大的能力:

    • 有選擇地遺忘:?遺忘門?f_t?可以主動丟棄與當前任務無關的舊信息(例如,在分析一個新句子時,忘記前一個句子的主題)。

    • 有選擇地記憶:?輸入門?i_t?可以決定哪些新信息是重要的,需要加入到長期記憶中(例如,記住當前句子中的關鍵實體)。

    • 有選擇地輸出:?輸出門?o_t?可以根據當前細胞狀態和任務需求,決定輸出哪些信息給隱藏狀態(例如,在情感分析中,可能只需要輸出與情感相關的特征)。

  3. 加法更新:?新細胞狀態是通過?加法?(+) 來更新的,而不是像標準RNN那樣通過函數?變換。加法操作在反向傳播時梯度是常數1(d(C_t)/d(C_{t-1}) = f_t,且?f_t?可以通過學習接近1),這大大緩解了梯度消失問題。乘法操作(f_t *,?i_t *)雖然會導致梯度消失/爆炸,但門控信號?f_t,?i_t?本身是Sigmoid輸出且受網絡控制,網絡可以學會讓這些門在需要長期記憶的位置保持打開(值接近1)。

變體與改進

  • Peephole Connections:?一些LSTM變體讓門 (f_t,?i_t,?o_t) 的計算不僅依賴?[h_{t-1}, x_t],也直接依賴?C_{t-1}?或?C_t(如?i_t = σ(W_i · [C_{t-1}, h_{t-1}, x_t] + b_i))。這被認為能提供更精細的時序控制。

  • GRU (Gated Recurrent Unit):?一個更流行的LSTM簡化變體。它將遺忘門和輸入門合并為一個“更新門”,并合并了細胞狀態和隱藏狀態。GRU通常參數更少,計算更快,在很多任務上與LSTM性能相當。

  • Bidirectional LSTM (BiLSTM):?同時運行前向和后向兩個LSTM層,并將它們的隱藏狀態(通常在對應時間步拼接)作為最終輸出。這允許模型利用序列的過去和未來上下文信息,對許多序列標注和理解任務非常有效。

  • Stacked LSTM:?堆疊多個LSTM層,將前一層的隱藏狀態序列作為下一層的輸入序列。這可以學習更復雜的、分層次的時序表示。

總結

LSTM通過精心設計的細胞狀態門控機制(遺忘門、輸入門、輸出門),有效地解決了標準RNN在處理長序列時的長期依賴問題。其內部參數主要包括四組權重矩陣W_f,?W_i,?W_g,?W_o)和對應的偏置向量b_f,?b_i,?b_g,?b_o),這些參數在層內所有時間步共享。關鍵的細胞狀態更新公式?C_t = f_t * C_{t-1} + i_t * g_t?通過加法操作維持了梯度的穩定流動,而Sigmoid門則賦予了模型有選擇地遺忘、記憶和輸出信息的強大能力。理解這些內部結構和參數的作用,對于有效使用、調優LSTM模型以及在實踐中診斷問題至關重要。雖然GRU等變體在某些場景下可能更受歡迎,但LSTM的設計思想和門控機制仍然是理解現代序列建模的基礎。

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

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

相關文章

WebRTC 安全性分析研究

一、概述 本文著重分析 WebRTC 的安全性,分析其安全性考慮及安全性實現,回答了以下問題: WebRTC 加密過程需要或依賴 CA (Certificate Authority)嗎? 不需要 CA, 但可能依賴 CA.DTLS-SRTP 加密機制中, DTLS 與 SRTP 的關系是什么? DTLS 實現秘鑰交換…

阿里云操作系統控制臺如何解決三大OS運維難題?

背景 操作系統運維常常遇到以下問題: 1.問題定界浪費大量人力:當業務出現問題時,客戶在不清楚是操作系統問題還是業務問題時,往往會拉上所有相關團隊一起排查,浪費人力。 2.問題定位時間長:通過操作系統…

自由學習記錄(65)

其他腳本語言也可以熱更新,但 Lua 特別適合,游戲主程序通常是 C,Lua 只是邏輯腳本,改 Lua 不影響主程序運行 語言應用場景PythonWeb 后端 / 數據處理服務JavaScript瀏覽器端熱重載 / React HMRC#Unity 的 ILRuntime / HybridCLR …

抗輻照芯片在核電廠火災探測器中的應用優勢與性能解析

一、引言 核電廠作為能源供應的關鍵設施,其安全性備受關注。火災是威脅核電廠安全運行的重要風險因素之一。在核電廠的特殊環境下,火災探測器肩負著及時發現火情、保障核電廠安全運行的重任。然而,核電廠存在高能輻射等復雜環境因素&#xf…

FastAPI+Sqlite+HTML的登錄注冊與文件上傳系統:完整實現指南

作為一名開發者,你是否曾想過親手搭建一個包含用戶注冊、登錄認證和文件上傳功能的完整 Web 系統?今天,我將帶大家一步步拆解一個基于FastAPI(后端)和原生 JavaScript(前端)的前后端分離項目&am…

【動態規劃】P11188 「KDOI-10」商店砍價|普及+

本文涉及知識點 C動態規劃 P11188 「KDOI-10」商店砍價 題目背景 English Statement. You must submit your code at the Chinese version of the statement. 您可以點擊 這里 下載本場比賽的選手文件。 You can click here to download all tasks and examples of the c…

國產LHR3040芯片是REF5040的代替品

LHR3040是一款噪聲低、漂移低、精度高的電壓基準產品系列。這些基準同時支持灌電流和拉電流,并且具有出色的線性和負載調節性能。采用專有的設計技術實現了出色的溫漂(3ppm/℃)和高精度(0.05%)。這些特性與極低噪聲相結合,使LHR30XX系列成為高精度數據采…

專題:2025AI營銷市場發展研究報告|附400+份報告PDF匯總下載

原文鏈接:https://tecdat.cn/?p42800 在數字化浪潮席卷全球的當下,AI營銷正成為驅動企業增長的核心動力。 從市場規模來看,AI營銷正經歷著爆發式增長,生成式AI的出現更是為其注入了強大活力。在應用層面,AI已滲透到營…

深入對比 Python 中的 `__repr__` 與 `__str__`:選擇正確的對象表示方法

文章目錄 核心概念對比1. 根本目的差異2. 調用場景對比深入解析:何時使用哪種方法場景 1:開發者調試 vs 用戶展示場景 2:技術表示 vs 簡化視圖高級對比:特殊場景處理1. 容器中的對象表示2. 日志記錄的最佳實踐3. 異常信息展示最佳實踐指南1. 何時實現哪個方法?2. 實現原則…

萬能公式基分析重構補丁復分析和歐拉公式原理推導

基分析, x11 x2-1 x3i 存在加法法則 x1x20 所以x1-x2 存在鏈式基乘法法則 x1x1*x1x2*x2 x2x3*x3 x3x1*x3 -x1x2x3 將鏈式基乘法操作 二次,三次,直至n次化簡得 一次 x1 -x1 x3 矩陣 x1 x1 x2 x2 x3 …

OpenCV 4.10.0 移植

OpenCV 4.10.0 移植使用 概述移植編譯下載解壓編譯環境編譯 編譯完成OpenCV 庫文件及其作用 使用實例參考代碼 參考 概述 OpenCV(Open Source Computer Vision Library)是計算機視覺領域最廣泛使用的開源庫之一,提供了豐富的功能模塊&#xf…

Tomcat10.0以上版本編譯成功但報錯HTTP狀態 404

Tomcat正常啟動且項目已成功部署,但出現404錯誤。 HTTP狀態 404 - 未找到package org.example;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSer…

在Flask項目中用Git LFS管理大文件(PDF)的完整實踐

在Flask項目中用Git LFS高效管理大文件(以農機說明書PDF為例) 背景與需求 在農機管理系統等實際項目中,經常需要上傳和管理大量超大文件(如200MB以上的PDF說明書、圖片等)。如果直接用Git管理這些大文件,不僅會導致倉庫膨脹、clone/pull速度變慢,還可能遇到推送失敗等…

樸素貝葉斯算法案例演示及Python實現

目錄 一、基本原理二、案例演示2.1 未平滑處理2.2 Laplace平滑處理 三、Python實現 一、基本原理 樸素貝葉斯思想:依靠特征概率去預測分類,針對于代分類的樣本,會求解在該樣本出現的條件下,各個類別出現的概率,哪個類…

RAG從入門到高階(二):Retrieve-and-Rerank

在上一篇教程中,我們了解了 Naive RAG 的基本原理和實現。它就像一個剛剛學會查找資料的新手,雖然能找到一些信息,但有時候找到的并不夠精準,甚至會有一些無關的干擾。 今天,我們將介紹 Retrieve-and-Rerank RAG&…

【腳本】Linux磁盤目錄掛載腳本(不分區)

以下是一個不帶分區,直接掛載整個磁盤到指定目錄的腳本。該腳本會檢查磁盤是否已掛載,自動創建文件系統(可選),并配置開機自動掛載: #!/bin/bash# 磁盤直接掛載腳本(不分區) # 使用…

壁紙網站分享

壁紙網站鏈接: 1.Microsoft Design - Wallpapers:https://wallpapers.microsoft.design/?refwww.8kmm.com 2.哲風壁紙:https://haowallpaper.com/wallpaperForum 3.壁紙湖:https://bizihu.com/ 4.極簡壁紙:https://bz…

XILINX FPGA如何做時序分析和時序優化?

時序分析和時序優化是FPGA開發流程中關鍵步驟,確保設計在目標時鐘頻率下正確運行,避免時序違例(如建立時間或保持時間不足)。以下以Xilinx Kintex-7系列FPGA為例,詳細介紹時序分析和時序優化的方法、工具、流程及實用技…

linux screen輕松管理長時間運行的任務

以下是針對 Alpine Linux 環境下 screen 的安裝與使用指南,結合遷移數據場景的具體操作步驟: 1. 安裝 screen? 在 Alpine Linux 中需通過 apk 安裝(非默認預裝): apk add screen 驗證安裝: screen --…