循环神经网络(RNN)

循环神经网络(RNN)基本原理

一、RNN核心思想

目标 :处理序列数据(如文本、时间序列),通过循环连接 传递隐藏状态,捕捉序列的动态依赖关系。
核心特性:

  • 参数共享:所有时间步共享同一组权重。
  • 记忆能力:隐藏状态 h t h_t ht 编码历史信息。

二、网络结构与数学公式

1. RNN展开结构

  • 输入 :时间步 t t t 的输入 x t x_t xt(如词向量)。
  • 隐藏状态 : h t h_t ht 融合当前输入与历史信息。
  • 输出 : y t y_t yt 基于 h t h_t ht 生成预测。

2. 数学公式

  • 隐藏状态更新 :
    h t = tanh ⁡ ( W h h h t − 1 + W x h x t + b h ) h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h) ht=tanh(Whhht−1+Wxhxt+bh)

    • W h h ∈ R d h × d h W_{hh} \in \mathbb{R}^{d_h \times d_h} Whh∈Rdh×dh: 隐藏状态权重
    • W x h ∈ R d x × d h W_{xh} \in \mathbb{R}^{d_x \times d_h} Wxh∈Rdx×dh: 输入权重
    • tanh ⁡ \tanh tanh: 激活函数(压缩到-1,1)
  • 输出计算 :
    y t = W h y h t + b y y_t = W_{hy} h_t + b_y yt=Whyht+by

    • W h y ∈ R d h × d y W_{hy} \in \mathbb{R}^{d_h \times d_y} Why∈Rdh×dy: 输出权重

三、PyTorch代码实现

1. RNN模型定义

python 复制代码
import torch
import torch.nn as nn

class SimpleRNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleRNN, self).__init__()
        self.hidden_size = hidden_size
        
        # 定义权重参数
        self.W_hh = nn.Parameter(torch.randn(hidden_size, hidden_size))
        self.W_xh = nn.Parameter(torch.randn(input_size, hidden_size))
        self.W_hy = nn.Parameter(torch.randn(hidden_size, output_size))
        self.b_h = nn.Parameter(torch.zeros(hidden_size))
        self.b_y = nn.Parameter(torch.zeros(output_size))

    def forward(self, x_seq):
        # x_seq形状: (seq_length, batch_size, input_size)
        batch_size = x_seq.size(1)
        h = torch.zeros(batch_size, self.hidden_size)  # 初始隐藏状态
        
        outputs = []
        for x_t in x_seq:  # 按时间步迭代
            # 更新隐藏状态
            h = torch.tanh(
                torch.mm(h, self.W_hh) + 
                torch.mm(x_t, self.W_xh) + 
                self.b_h
            )
            # 计算输出
            y_t = torch.mm(h, self.W_hy) + self.b_y
            outputs.append(y_t)
        
        return torch.stack(outputs), h
相关推荐
做萤石二次开发的哈哈9 小时前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
老金带你玩AI9 小时前
全程拿着手机,我让dot准备了一场AI分享
人工智能
nvd119 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
snhna10 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏10 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
点云-激光雷达-Slam-三维牙齿10 小时前
100,000 Records CSV File - India Traffic Accident Analysis Dataset.7z
人工智能·数据集
TechWayfarer10 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
七十二时95610 小时前
视频掉帧怎么用AI补帧
人工智能
可达智灵10 小时前
信创适配|织灵 Coda Loom 2.0 完成银河麒麟服务器操作系统 V10、V11 适配认证
人工智能·可达智灵
Wx-bishekaifayuan11 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游