【開源項目】Excel手撕AI算法深入理解(三):時序(RNN、mamba)

項目源碼地址:https://github.com/ImagineAILab/ai-by-hand-excel.git

一、RNN

1.?RNN 的核心思想

RNN 的設計初衷是處理序列數據(如時間序列、文本、語音),其核心特點是:

  • 隱藏狀態(Hidden State):保留歷史信息,充當“記憶”。

  • 參數共享:同一組權重在時間步間重復使用,減少參數量。

2.?RNN 的數學表達

對于一個時間步?t:

  • 輸入:xt?(當前時間步的輸入向量)。

  • 隱藏狀態:ht?(當前狀態),ht?1?(上一狀態)。

  • 輸出:yt?(預測或特征表示)。

  • 參數:權重矩陣?和偏置 ?。

  • 激活函數:σ(通常為?tanh?或?ReLU)。

更新隱藏狀態的核心操作

數學本質:非線性變換

  • At??是當前時間步的“未激活狀態”,即隱藏狀態的線性變換結果(上一狀態?ht?1??和當前輸入?xt??的加權和)。

  • ?tanh?是雙曲正切激活函數,將?At??映射到?[-1, 1]?的范圍內:

  • 作用:引入非線性,使RNN能夠學習復雜的序列模式。如果沒有非線性,堆疊的RNN層會退化為單層線性變換。

梯度穩定性

  • tanh?tanh?的導數為:

  • 梯度值始終小于等于1,能緩解梯度爆炸(但可能加劇梯度消失)。

  • 相比Sigmoid(導數最大0.25),tanh?tanh?的梯度更大,訓練更穩定。

3.?RNN 的工作流程

前向傳播
  1. 初始化隱藏狀態??0h0?(通常為零向量)。

  2. 按時間步迭代計算:

    • 結合當前輸入?xt??和上一狀態?ht?1??更新狀態?ht?。

    • 根據ht??生成輸出?yt?。

反向傳播(BPTT)

通過時間反向傳播(Backpropagation Through Time, BPTT)計算梯度:

  • 沿時間軸展開RNN,類似多層前饋網絡。

  • 梯度需跨時間步傳遞,易導致梯度消失/爆炸

4.?RNN 的典型結構

(1) 單向RNN(Vanilla RNN)
  • 信息單向流動(過去→未來)。

  • 只能捕捉左側上下文。

(2) 雙向RNN(Bi-RNN)
  • 兩個獨立的RNN分別從左到右和從右到左處理序列。

  • 最終輸出拼接或求和,捕捉雙向依賴。

(3) 深度RNN(Stacked RNN)
  • 多個RNN層堆疊,高層處理低層的輸出序列。

  • 增強模型表達能力。

5.?RNN 的局限性

(1) 梯度消失/爆炸
  • 長序列中,梯度連乘導致指數級衰減或增長。

  • 后果:難以學習長期依賴(如文本中相距很遠的詞關系)。

(2) 記憶容量有限
  • 隱藏狀態維度固定,可能丟失早期信息。

(3) 計算效率低
  • 無法并行處理序列(必須逐時間步計算)。

6.?RNN 的代碼實現(PyTorch)

import torch.nn as nnclass VanillaRNN(nn.Module):def __init__(self, input_size, hidden_size, output_size):super().__init__()self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):# x: [batch_size, seq_len, input_size]out, h_n = self.rnn(x)  # out: 所有時間步的輸出y = self.fc(out[:, -1, :])  # 取最后一個時間步return y

7.?RNN vs. 其他序列模型

特性RNN/LSTMTransformerMamba
長序列處理中等(依賴門控)差(O(N2))優(O(N))
并行化不可并行完全并行部分并行
記憶機制隱藏狀態全局注意力選擇性狀態

8.?RNN 的應用場景

  • 文本生成:字符級或詞級預測。

  • 時間序列預測:股票價格、天氣數據。

  • 語音識別:音頻幀序列轉文本。

二、mamba

1.?Mamba 的誕生背景

Mamba(2023年由Albert Gu等人提出)是為了解決傳統序列模型(如RNN、Transformer)的兩大痛點:

  1. 長序列效率問題:Transformer的Self-Attention計算復雜度為?O(N2),難以處理超長序列(如DNA、音頻)。

  2. 狀態壓縮的局限性:RNN(如LSTM)雖能線性復雜度?O(N),但隱藏狀態難以有效捕捉長期依賴。

Mamba的核心創新:選擇性狀態空間模型(Selective SSM),結合了RNN的效率和Transformer的表達力。

2.?狀態空間模型(SSM)基礎

Mamba基于結構化狀態空間序列模型(S4),其核心是線性時不變(LTI)系統:

  • h(t):隱藏狀態

  • A(狀態矩陣)、B(輸入矩陣)、C(輸出矩陣)

  • 離散化(通過零階保持法):

其中

關鍵特性

  • 線性復雜度?O(N)(類似RNN)。

  • 理論上能建模無限長依賴(通過HiPPO初始化?A)。

3.?Mamba 的核心改進:選擇性(Selectivity)

傳統SSM的局限性:A,B,C?與輸入無關,導致靜態建模能力。
Mamba的解決方案:讓參數動態依賴于輸入(Input-dependent),實現“選擇性關注”重要信息。

選擇性SSM的改動:
  1. 動態參數化

    • B,?C,?ΔΔ?由輸入xt??通過線性投影生成:

  1. 這使得模型能過濾無關信息(如文本中的停用詞)。
  2. 硬件優化

    • 選擇性導致無法卷積化(傳統SSM的優勢),但Mamba設計了一種并行掃描算法,在GPU上高效計算。

4.?Mamba 的架構設計

Mamba模型由多層?Mamba Block?堆疊而成,每個Block包含:

  1. 選擇性SSM層:處理序列并捕獲長期依賴。

  2. 門控MLP(如GeLU):增強非線性。

  3. 殘差連接:穩定深層訓練。

(示意圖:輸入 → 選擇性SSM → 門控MLP → 輸出)

Time-Varying Recurrence(時變遞歸)

作用

打破傳統SSM的時不變性(Time-Invariance),使狀態轉移動態適應輸入序列。

  • 傳統SSM的離散化參數?Aˉ,Bˉ?對所有時間步相同(LTI系統)。

  • Mamba的遞歸過程是時變的(LTV系統),狀態更新依賴當前輸入。

實現方式
  • 離散化后的參數?Aˉt?,Bˉt??由?Δt??動態控制:

    • Δt??大:狀態更新慢(保留長期記憶)。

    • Δt??小:狀態更新快(捕捉局部特征)。

  • 效果:模型可以靈活調整記憶周期(例如,在文本中保留重要名詞,快速跳過介詞)。

關鍵點
  • 時變性是選擇性的直接結果,因為?Δt?,Bt?,Ct??均依賴輸入。

Discretization(離散化)

作用

將連續時間的狀態空間方程(微分方程)轉換為離散時間形式,便于計算機處理。

  • 連續SSM:

  • 離散SSM:

實現方式
  • 使用零階保持法(ZOH)離散化:

總結

  • Selection:賦予模型動態過濾能力,是Mamba的核心創新。

  • Time-Varying Recurrence:通過時變遞歸實現自適應記憶。

  • Discretization:將連續理論落地為可計算的離散操作。

5.?為什么Mamba比Transformer更高效?

特性TransformerMamba
計算復雜度O(N2)O(N)
長序列支持內存受限輕松處理百萬長度
并行化完全并行需自定義并行掃描
動態注意力顯式Self-Attention隱式通過選擇性SSM

優勢場景

  • 超長序列(基因組、音頻、視頻)

  • 資源受限設備(邊緣計算)

6.?代碼實現片段(PyTorch風格)

class MambaBlock(nn.Module):def __init__(self, dim):self.ssm = SelectiveSSM(dim)  # 選擇性SSMself.mlp = nn.Sequential(nn.Linear(dim, dim*2),nn.GELU(),nn.Linear(dim*2, dim)def forward(self, x):y = self.ssm(x) + x          # 殘差連接y = self.mlp(y) + y          # 門控MLPreturn y

7.?Mamba的局限性

  • 訓練穩定性:選擇性SSM需要謹慎的參數初始化。

  • 短序列表現:可能不如Transformer在短文本上的注意力精準。

  • 生態支持:目前庫(如mamba-ssm)不如Transformer成熟。

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

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

相關文章

pycharm已有python3.7,如何新增Run Configurations中的Python interpreter為python 3.9

在 PyCharm 中,如果你已經安裝了 Python 3.9,并且希望在 Run Configurations 中新增一個 Python 3.9 的解釋器,可以按照以下步驟操作: 步驟 1:打開 PyCharm 設置 點擊 PyCharm 左上角的 File 菜單。選擇 Settings&am…

【H橋電機驅動電路原理】-學習筆記

工作原理 電路分析 這是一個由晶體管構成的 H 橋電機驅動電路 ,以下是對其各部分的介紹: 核心器件 晶體管:電路中使用了 PNP 型的 SS8550(Q5、Q6 )和 NPN 型的 SS8050(Q9、Q10、Q13、Q14 )。…

【家政平臺開發(49)】解鎖家政平臺上線密碼:服務器選型與配置全攻略

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

驅動開發硬核特訓 · Day 10 (理論上篇):設備模型 ≈ 運行時的適配器機制

🔍 B站相應的視屏教程: 📌 內核:博文視頻 - 總線驅動模型實戰全解析 敬請關注,記得標為原始粉絲。 在 Linux 驅動開發中,設備模型(Device Model)是理解驅動架構的核心。而從軟件工程…

arm_math.h、arm_const_structs.h 和 arm_common_tables.h

在 ??FOC(Field-Oriented Control,磁場定向控制)?? 中,arm_math.h、arm_const_structs.h 和 arm_common_tables.h 是 CMSIS-DSP 庫的核心組件,用于實現高效的數學運算、預定義結構和查表操作。以下是它們在 FOC 控…

Android: gradient 使用

在 Android 中使用 gradient(漸變) 通常是通過 drawable 文件來設置背景。下面是可以直接用的幾種用法匯總,包括線性漸變、徑向漸變、掃描漸變(sweep)等: ? 1. Linear Gradient(線性漸變&#…

打造AI應用基礎設施:Milvus向量數據庫部署與運維

目錄 打造AI應用基礎設施:Milvus向量數據庫部署與運維1. Milvus介紹1.1 什么是向量數據庫?1.2 Milvus主要特點 2. Milvus部署方案對比2.1 Milvus Lite2.2 Milvus Standalone2.3 Milvus Distributed2.4 部署方案對比表 3. Milvus部署操作命令實戰3.1 Milv…

AI Agent 在醫療健康領域的深度應用剖析

引言 隨著人工智能技術的迅猛發展,AI Agent 在醫療健康領域展現出了巨大的應用潛力。它猶如一位智能助手,憑借其強大的數據處理和分析能力,滲透到醫療健康的各個環節,從疾病診斷、治療方案制定到患者康復監控,都發揮著…

樹莓派超全系列教程文檔--(28)boot文件夾內容

boot文件夾內容 boot 文件夾內容bootcode.binstart*.elffixup*.datcmdline.txtconfig.txtissue.txtinitramfs*ssh 或 ssh.txt設備樹blob文件 ( *.dtb )內核文件 ( *.img )overlays 文件夾 文章來源: http://raspberry.dns8844.cn/documentation 原文網址 boot 文件…

SvelteKit 最新中文文檔教程(20)—— 最佳實踐之性能

前言 Svelte,一個語法簡潔、入門容易,面向未來的前端框架。 從 Svelte 誕生之初,就備受開發者的喜愛,根據統計,從 2019 年到 2024 年,連續 6 年一直是開發者最感興趣的前端框架 No.1: Svelte …

【LangChain核心組件】Memory:讓大語言模型擁有持續對話記憶的工程實踐

目錄 一、Memory架構設計解析 1. 核心組件關系圖 2. 代碼中的關鍵實現 二、對話記憶的工程實現 1. 消息結構化存儲 2. 動態提示組裝機制 三、Memory類型選型指南 四、生產環境優化實踐 1. 記憶容量控制 2. 記憶分片策略 3. 記憶檢索增強 五、典型問題調試技巧 1. …

適應 AI 時代的軟件開發流程:用 AI + TDD 構建可維護項目

?? 適應 AI 時代的軟件開發流程:用 AI + TDD 構建可維護項目 本文面向有系統開發經驗的工程師,分享如何結合 Git 管理、AI 協作、YAML 驅動與 TDD 開發方式,高效構建一個可維護、可協作、可交付的嵌入式或通用工程項目。適合 BLE 模塊、協議棧組件、物聯網控制系統等項目落…

使用 chromedriver 實現網絡爬蟲【手抄】

1、引用 selenium 包 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.29.0</version> </dependency> <dependency><groupId>org.seleniumhq.seleniu…

Python項目--基于Python的自然語言處理文本摘要系統

1. 項目概述 自然語言處理(NLP)是人工智能領域中一個重要的研究方向&#xff0c;而文本摘要作為NLP的一個重要應用&#xff0c;在信息爆炸的時代具有重要意義。本項目旨在開發一個基于Python的文本摘要系統&#xff0c;能夠自動從長文本中提取關鍵信息&#xff0c;生成簡潔而全…

【Vue #3】指令補充樣式綁定

一、指令修飾符 Vue 的指令修飾符&#xff08;Directive Modifiers&#xff09;是 Vue 模板語法中的重要特性&#xff0c;它們以半角句號 . 開頭&#xff0c;用于對指令的綁定行為進行特殊處理 修飾符作用如下&#xff1a; 簡化事件處理&#xff08;如阻止默認行為、停止冒泡…

Reinforcement Learning強化學習--李宏毅機器學習筆記

個人學習筆記&#xff0c;如有錯誤歡迎指正&#xff0c;也歡迎交流&#xff0c;其他筆記見個人空間 強化學習 vs 監督學習 監督學習&#xff08;Supervised Learning&#xff09;&#xff1a;你有輸入和明確的輸出標簽&#xff0c;例如圖像分類。 強化學習&#xff08;Rein…

Windows VsCode Terminal窗口使用Linux命令

背景描述&#xff1a; 平時開發環境以Linux系統為主&#xff0c;有時又需要使用Windows系統下開發環境&#xff0c;為了能像Linux系統那樣用Windows VsCode&#xff0c;Terminal命令行是必不可少內容。 注&#xff1a;Windows11 VsCode 1.99.2 下面介紹&#xff0c;如何在V…

軟件測試之測試數據生成(Excel版)

這是Excel生成測試數據的函數使用 1.時間 1.1.時間 例生成2022-05-01之前一年內任意時間點: =TEXT("2022-05-01"-RAND()-RANDBETWEEN(1,365),"yyyy-mm-dd hh:mm:ss")1.2.年月日 yyyy-mm-dd 以當前時間生成10年的日期 =TEXT(NOW()-RAND()-RANDBETWE…

libwebsocket建立服務器需要編寫LWS_CALLBACK_ADD_HEADERS事件處理

最近在使用libwebsocket&#xff0c;感覺它搭建Http與websocket服務器比較簡單&#xff0c;不像poco庫那么龐大&#xff0c;但當我使用它建立websocket服務器后&#xff0c;發現websocket客戶端連接一直沒有連接成功&#xff0c;不知道什么原因&#xff0c;經過一天的調試&…

從 PyTorch 到 ONNX:深度學習模型導出全解析

在模型訓練完畢后&#xff0c;我們通常希望將其部署到推理平臺中&#xff0c;比如 TensorRT、ONNX Runtime 或移動端框架。而 ONNX&#xff08;Open Neural Network Exchange&#xff09;正是 PyTorch 與這些平臺之間的橋梁。 本文將以一個圖像去噪模型 SimpleDenoiser 為例&a…