RNN循環網絡:給AI裝上“記憶“(superior哥AI系列第5期)

🔄 RNN循環網絡:給AI裝上"記憶"(superior哥AI系列第5期)

嘿!小伙伴們,又見面啦!👋 上期我們學會了讓AI"看懂"圖片,今天要給AI裝上一個更酷的技能——記憶力!🧠

想象一下,如果你看電影時只能看到孤立的畫面,完全記不住前面的劇情,你能理解這部電影嗎?😵?💫 如果你說話時忘記上一秒說了什么,別人能聽懂你在說啥嗎?

這就是為什么我們需要RNN(循環神經網絡)!它能讓AI像人類一樣擁有"記憶",理解時間序列,掌握語言的前后文關系。今天superior哥就帶你揭開RNN的神秘面紗!🎭

🤔 為什么AI需要"記憶力"?

回憶一下我們之前學過的網絡

📊 傳統神經網絡:
  • 就像一個"瞬間反應機器"
  • 看到輸入立馬給出輸出,完全不記得之前發生了什么
  • 適合處理固定大小的數據
📸 CNN:
  • 專門處理圖像,有"空間感知能力"
  • 但仍然是"一次性"處理,沒有時間概念
  • 看完這張照片就忘了,下張照片重新開始

🚨 傳統網絡遇到序列數據就"傻眼"了

生活中很多數據都是有時間順序的:

📝 文本理解問題
  • 句子: “我昨天去北京吃了烤鴨”
  • 傳統網絡: 只能看到單個詞,不知道時間關系
  • 問題: "昨天"和"吃了"的時態關系完全丟失!
🎵 音樂識別問題
  • 音樂: do-re-mi-fa-sol…
  • 傳統網絡: 每個音符都是獨立的
  • 問題: 沒有旋律的概念,無法理解音樂!
📈 股價預測問題
  • 股價: 今天100→明天102→后天98…
  • 傳統網絡: 只看當前價格
  • 問題: 看不到趨勢,預測完全沒用!

所以,AI急需一種"記憶力"來處理這些序列問題! 💪

🧠 RNN的核心思想:帶著"記憶"去學習

RNN的設計哲學超級簡單:讓AI在處理每個新信息時,都能"回憶"起之前的經歷!

🎭 生活中的記憶例子

想象你在聽朋友講故事:

  1. 朋友說:“昨天我去商場…”
    👉 你的大腦記住:時間=昨天,地點=商場

  2. 朋友接著說:“買了一件衣服…”
    👉 你的大腦想:昨天在商場買衣服

  3. 朋友最后說:“今天穿著很帥!”
    👉 你理解了:昨天買的衣服今天穿著帥

這就是RNN的工作方式!每處理一個新詞,都會結合之前的"記憶"!

🔄 RNN的工作機制

RNN的核心創新就是引入了**“循環連接”**:

傳統網絡:失憶癥患者
輸入 → 處理 → 輸出 
(每次都是全新開始,完全不記得之前的事)
RNN:有記憶力的智者
輸入? → 處理 → 輸出? → 記憶?↓
輸入? → 處理 ← 記憶? → 輸出? → 記憶?  ↓
輸入? → 處理 ← 記憶? → 輸出? → 記憶?

🎯 RNN的三個關鍵步驟

在每個時間步,RNN都會:

  1. 📥 接收當前輸入 x_t(比如當前這個詞)
  2. 🧠 回憶過去記憶 h_{t-1}(之前理解的內容)
  3. 🔄 更新當前理解 h_t(結合新信息和舊記憶)
  4. 📤 輸出當前結果 y_t(基于完整理解的預測)

📊 RNN的數學表達(別怕,很簡單!)

h_t = tanh(W_hh × h_{t-1} + W_xh × x_t + b_h)
y_t = W_hy × h_t + b_y

翻譯成人話:

  • h_t:當前時刻的"理解狀態"(記憶)
  • tanh:激活函數(給神經元裝個"性格")
  • W_hh:記憶權重(多重視過去的經驗)
  • W_xh:輸入權重(多重視當前信息)
  • W_hy:輸出權重(如何基于理解做決策)

簡單總結:新理解 = 過去記憶 + 當前輸入 + 一點數學魔法?

🎯 RNN的典型應用:從聊天到預測

💬 語言理解與生成

文本分類(情感分析)

任務: 判斷"這部電影真的很棒,我推薦大家去看!"是正面還是負面評價

RNN處理過程:

  1. “這部” → 理解:在討論某個事物
  2. “電影” → 更新理解:在討論電影
  3. “真的很棒” → 更新理解:這是正面評價!
  4. “推薦” → 確認理解:確實是正面的
機器翻譯

任務: “我愛學習” → “I love learning”

RNN處理:

  1. 編碼器RNN:理解中文句子的含義
  2. 解碼器RNN:根據理解生成英文

📈 時間序列預測

股價預測

歷史數據: [100, 102, 98, 105, 103, …]
RNN學習: 股價的變化趨勢和模式
預測: 下一天可能的價格

天氣預測

歷史數據: [溫度、濕度、風速、氣壓…]
RNN學習: 天氣變化的規律
預測: 明天的天氣情況

🎵 創意生成

音樂創作

訓練: 喂給RNN大量音樂作品
學習: 音符之間的關系和音樂規律
創作: 生成新的旋律

詩歌創作

訓練: 學習古詩詞的格律和韻律
創作: 生成符合格律的新詩

😰 RNN的"阿爾茲海默癥":梯度消失問題

雖然RNN很強大,但它有個致命弱點:記憶力不持久!

🤯 梯度消失:記憶的噩夢

想象RNN是個健忘的老人:

  • 短期記憶OK: 能記住剛才說的幾句話
  • 長期記憶NG: 完全忘記了開頭說了什么

技術原因:
當序列很長時,梯度在反向傳播過程中會越來越小,最終接近于0,導致網絡無法學習長期依賴關系。

實際表現:

  • 能理解"我餓了,想吃飯"(短序列)
  • 搞不懂"我早上7點起床,刷牙洗臉,然后…(中間100個詞)…所以現在很餓"(長序列)

💡 解決方案預告

為了解決這個問題,科學家們發明了RNN的"升級版":

  • LSTM(長短期記憶網絡):專門解決遺忘問題
  • GRU(門控循環單元):LSTM的簡化版

我們下次詳細講!

🛠? 實戰時間:用RNN預測股價

讓我們用Python搭建一個簡單的RNN來預測股價:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as pltclass SimpleRNN(nn.Module):def __init__(self, input_size=1, hidden_size=32, output_size=1, num_layers=2):super(SimpleRNN, self).__init__()# RNN層self.rnn = nn.RNN(input_size=input_size,      # 輸入特征數hidden_size=hidden_size,    # 隱藏狀態大小  num_layers=num_layers,      # RNN層數batch_first=True           # 批次優先)# 輸出層self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):# x shape: (batch_size, sequence_length, input_size)# RNN前向傳播rnn_out, hidden = self.rnn(x)# rnn_out shape: (batch_size, sequence_length, hidden_size)# 只要最后一個時間步的輸出predictions = self.fc(rnn_out[:, -1, :])# predictions shape: (batch_size, output_size)return predictions# 創建模型
model = SimpleRNN(input_size=1, hidden_size=32, output_size=1)# 模擬股價數據  
def generate_stock_data(seq_length=30, num_samples=1000):"""生成模擬股價數據"""prices = []for _ in range(num_samples + seq_length):if len(prices) == 0:price = 100  # 起始價格else:# 隨機游走 + 一點趨勢change = np.random.normal(0, 1) + 0.01 * np.sin(len(prices) / 50)price = prices[-1] + changeprices.append(price)return np.array(prices)# 準備訓練數據
def create_sequences(data, seq_length):"""創建序列數據"""X, y = [], []for i in range(len(data) - seq_length):X.append(data[i:i+seq_length])y.append(data[i+seq_length])return np.array(X), np.array(y)# 生成數據
stock_prices = generate_stock_data()
X, y = create_sequences(stock_prices, seq_length=30)# 轉換為PyTorch張量
X = torch.FloatTensor(X).unsqueeze(-1)  # 添加特征維度
y = torch.FloatTensor(y)print(f"輸入形狀: {X.shape}")  # (樣本數, 序列長度, 特征數)
print(f"輸出形狀: {y.shape}")  # (樣本數,)# 簡單訓練循環示例
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 訓練幾個epoch
for epoch in range(100):optimizer.zero_grad()predictions = model(X[:800])  # 用前800個樣本訓練loss = criterion(predictions.squeeze(), y[:800])loss.backward()optimizer.step()if epoch % 20 == 0:print(f'Epoch {epoch}, Loss: {loss.item():.4f}')# 測試預測
model.eval()
with torch.no_grad():test_predictions = model(X[800:900])test_loss = criterion(test_predictions.squeeze(), y[800:900])print(f'Test Loss: {test_loss.item():.4f}')

🎉 總結:RNN開啟了AI的"時光記憶"

🏆 RNN的核心優勢

  1. 🧠 擁有記憶:能記住之前的信息,理解上下文
  2. 🔄 處理變長序列:不限制輸入長度,靈活應對
  3. ? 理解時間關系:掌握事件的先后順序
  4. 📝 自然語言友好:特別適合文本和語音處理

🎯 RNN的典型應用

  • 💬 聊天機器人:理解對話上下文
  • 🌐 機器翻譯:Google翻譯的核心技術
  • 📈 金融預測:股價、匯率預測
  • 🎵 藝術創作:音樂、詩歌生成
  • 🗣? 語音識別:Siri、Alexa背后的技術

?? RNN的局限性

  1. 🤕 梯度消失問題:長序列記憶力不足
  2. 🐌 訓練速度慢:無法并行計算
  3. 💾 計算資源需求大:尤其是長序列

🚀 下期預告:LSTM和GRU

下一期我們要學習RNN的"升級版":

  • 🧠 LSTM:如何解決遺忘問題?
  • ? GRU:更簡潔但同樣強大
  • 🎯 實戰項目:文本情感分析、聊天機器人

這些技術將讓AI的記憶力大大提升,能處理更長、更復雜的序列!

記得點贊收藏關注三連!我們下期見!👋


💡 superior哥的RNN記憶小貼士:RNN就像給AI裝了個"大腦記憶系統"。雖然它不完美(會健忘),但已經能讓AI理解很多有時間關系的任務了。記住:AI的進步是一步步來的,先有記憶,再有更好的記憶!繼續加油!🧠?

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

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

相關文章

DAY41 CNN

可以看到即使在深度神經網絡情況下,準確率仍舊較差,這是因為特征沒有被有效提取----真正重要的是特征的提取和加工過程。MLP把所有的像素全部展平了(這是全局的信息),無法布置到局部的信息,所以引入了卷積神…

【仿生系統】愛麗絲機器人的設想(可行性優先級較高)

非程序化、能夠根據環境和交互動態產生情感和思想,并以微妙、高級的方式表達出來的能力 我們不想要一個“假”的智能,一個僅僅通過if-else邏輯或者簡單prompt來模擬情感的機器人。您追求的是一種更深層次的、能夠學習、成長,并形成獨特“個性…

面向連接的運輸:TCP

目錄 TCP連接 TCP報文段結構 往返時間估計與超時 可靠數據傳輸 回退N步or超時重傳 超時間隔加倍 快速重傳 流量控制 TCP連接管理 三次握手 1. 客戶端 → 服務器:SYN 包 2. 服務器 → 客戶端:SYNACK 包 3. 客戶端 → 服務器:AC…

SpringAI系列 - 升級1.0.0

目錄 一、調整pom二、MessageChatMemoryAdvisor調整三、ChatMemory get方法刪除lastN參數四、QuestionAnswerAdvisor調整Spring AI發布1.0.0正式版了?? ,搞起… 一、調整pom <properties><java.version>17</java.version><spring-ai.version>

前端高頻面試題2:JavaScript/TypeScript

1.什么是類數組對象 一個擁有 length 屬性和若干索引屬性的對象就可以被稱為類數組對象&#xff0c;類數組對象和數組類似&#xff0c;但是不能調用數組的方法。常見的類數組對象有 arguments 和 DOM 方法的返回結果&#xff0c;還有一個函數也可以被看作是類數組對象&#xff…

Spring Security入門:創建第一個安全REST端點項目

項目初始化與基礎配置 創建基礎Spring Boot項目 我們首先創建一個名為ssia-ch2-ex1的空項目(該名稱與配套源碼中的示例項目保持一致)。項目需要添加以下兩個核心依賴: org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-secur…

秋招Day12 - 計算機網絡 - UDP

說說TCP和UDP的區別&#xff1f; TCP使用無邊界的字節流傳輸&#xff0c;可能發生拆包和粘包&#xff0c;接收方并不知道數據邊界&#xff1b;UDP采用數據報傳輸&#xff0c;數據報之間相互獨立&#xff0c;有邊界。 應用場景方面&#xff0c;TCP適合對數據的可靠性要求高于速…

【QQ音樂】sign簽名| data參數加密 | AES-GCM加密 | webpack (下)

1.目標 網址&#xff1a;https://y.qq.com/n/ryqq/toplist/26 我們知道了 sign P(n.data)&#xff0c;其中n.data是明文的請求參數 2.webpack生成data加密參數 那么 L(n.data)就是密文的請求參數。返回一個Promise {<pending>}&#xff0c;所以L(n.data) 是一個異步函數…

Codeforces Round 1028 (Div. 2)(A-D)

題面鏈接&#xff1a;Dashboard - Codeforces Round 1028 (Div. 2) - Codeforces A. Gellyfish and Tricolor Pansy 思路 要知道騎士如果沒了那么這個人就失去了攻擊手段&#xff0c;貪心的來說我們只需要攻擊血量少的即可&#xff0c;那么取min比較一下即可 代碼 void so…

【存儲基礎】存儲設備和服務器的關系和區別

文章目錄 1. 存儲設備和服務器的區別2. 客戶端訪問數據路徑場景1&#xff1a;經過服務器處理場景2&#xff1a;客戶端直連 3. 服務器作為"中轉站"的作用 剛開始接觸存儲的時候&#xff0c;以為數據都是存放在服務器上的&#xff0c;服務器和存儲設備是一個東西&#…

macOS 安裝 Grafana + Prometheus + Node Exporter

macOS 安裝指南&#xff1a;Grafana Prometheus Node Exporter 目錄簡介&#x1f680; 快速開始 安裝 Homebrew1. 安裝 Homebrew2. 更新 Homebrew 安裝 Node Exporter使用 Homebrew 安裝驗證 Node Exporter 安裝 Prometheus使用 Homebrew 安裝驗證安裝 安裝 Grafana使用 Home…

不可變集合類型轉換異常

記錄一個異常&#xff1a;class java.util.ImmutableCollections$ListN cannot be cast to class java.util.ArrayList (java.util.ImmutableCollections$ListN and java.util.ArrayList 文章目錄 1、原因2、解決方式一3、解決方式二4、關于不可變集合的補充4.1 JDK8和9的對比4…

【DAY37】早停策略和模型權重的保存

內容來自浙大疏錦行python打卡訓練營 浙大疏錦行 知識點&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a; 對信貸數據集訓練后保存權…

【Zephyr 系列 3】多線程與調度機制:讓你的 MCU 同時干多件事

好的,下面是Zephyr 系列第 3 篇:聚焦 多線程與調度機制的實踐應用,繼續面向你這樣的 Ubuntu + 真板實戰開發者,代碼清晰、講解通俗、結構規范,符合 CSDN 高質量博客標準。 ??關鍵詞:Zephyr、線程調度、k_thread、k_sleep、RTOS、BluePill ??適合人群:想從裸機開發進…

實現RabbitMQ多節點集群搭建

目錄 引言 一、環境準備 二、利用虛擬機搭建 ? 三、鏡像集群配置 四、HAProxy實現負載均衡(主用虛擬機操作) 五、測試RabbitMQ集群搭建情況 引言 在現代分布式系統中&#xff0c;消息隊列&#xff08;Message Queue&#xff09;扮演著至關重要的角色,而 RabbitMQ 作為…

異步上傳石墨文件進度條前端展示記錄(采用Redis中String數據結構實現-蘇東坡版本)

昔者&#xff0c;有客臨門&#xff0c;亟需自石墨文庫中擷取卷帙若干。此等文冊&#xff0c;非止一卷&#xff0c;乃累牘連篇&#xff0c;亟需批量轉置。然吾輩慮及用戶體驗&#xff0c;當效東坡"腹有詩書氣自華"之雅意&#xff0c;使操作如行云流水&#xff0c;遂定…

Axure 基礎入門

目錄 認識產品經理 項目團隊* 基本概述 認識產品經理 A公司產品經理 B公司產品經理 C公司產品經理 D公司產品經理 產品經理工作范圍 產品經理工作流程* 產品經理的職責 產品經理的分類 產品經理能力要求 產品工具 產品體驗報告 原型設計介紹 原型設計概述 為…

零基礎學習計算機網絡編程----socket實現UDP協議

本章將會詳細的介紹如何使用 socket 實現 UDP 協議的傳送數據。有了前面基礎知識的鋪墊。對于本章的理解將會變得簡單。將會從基礎的 Serve 的初始化&#xff0c;進階到 Client 的初始化&#xff0c;以及 run。最后實現一個簡陋的小型的網絡聊天室。 目錄 1.UdpSever.h 1.1 構造…

普中STM32F103ZET6開發攻略(二)

接上文&#xff1a;普中STM32F103ZET6開發攻略&#xff08;一&#xff09;-CSDN博客 各位看官老爺們&#xff0c;點擊關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 目錄 接上文&#xff1a;普中…

用提示詞寫程序(3),VSCODE+Claude3.5+deepseek開發edge擴展插件V2

edge擴展插件;篩選書簽,跳轉搜索,設置背景 鏈接: https://pan.baidu.com/s/1nfnwQXCkePRnRh5ltFyfag?pwd86se 提取碼: 86se 導入解壓的擴展文件夾: 導入擴展成功: edge擴展插件;篩選書簽,跳轉搜索,設置背景