当前位置: 首页 > news >正文

简谈循环神经网络(RNN)以及现代变体

一、概述

循环神经网络,Recurrent Neural Network,简称RNN。是一种专门用于处理序列数据(比如时间序列、文本、语音等)的深度学习模型。与传统的神经网络不同的是,RNN具有“记忆功能”,简单理解就是能够利用之前的信息影响它的输出。

1、核心思想

RNN的设计其实是来源于人脑的处理方式。当年凯库勒梦到了蛇咬尾巴,就此发现了“苯”分子的结构,那么据a哥推断,这个RNN提出者大抵是梦到了人脑神经系统(开个小玩笑哈)。

RNN在处理序列数据时,某个时间点的输出不仅取决于当前的输入,还取决于之前的状态(也就是上下文)。想象一个最基本的RNN单元,它在每个时间步t接收两个输入,产生一个输出。大致过程:

2、输入:

x_t:当前时间步的输入,比如一个句子中某个单词的词向量

h_{t-1}:上一个时间步的隐藏状态(这是RNN“记忆”的载体)

3、计算过程:

首先将x_t和h_{t-1}进行线性变换并相加(加权求和),然后通过一个非线性激活函数(比如tanh或ReLU),得到当前时间步的隐藏状态h_t,最后h_t会有两个流向:(1)经过一个线性层(通常加softmax)得到当前时间步的输出y_pred,这个输出也就是当前时间步的预测值.(2)作为下一个时间步的输入的一部分,即变成了下一个时间步的上一个时间步的h_t。

4、数学公式:

隐藏状态更新:h_t = tanh(W_h * h_{t-1} + W_x * x_t + b)
输出计算:y_t = Softmax(W_y * h_t + b_y)
其中,W_h, W_x, W_y 分别是隐藏状态、输入、输出的权重矩阵,b, b_y 是偏置项。

5、RNN的重要特性:

参数共享:所有时间步的权重矩阵w_h,w_x,w_y都是一样的,大大减少了参数量,并让模型能够处理任意长度的序列。

顺序处理:信息沿着时间轴串行流动,h_t必须等待h_{t-1}计算完成,这就导致训练和推理的速度慢,并且无法像transformer一样并行计算。

记忆的“容量瓶颈”:h_t是一个固定维度的向量,而这个h_t要存储从t=1到t的所有历史信息。这就导致随着时间推移,h_t一定会被存满。

二、经典RNN到现代变体

1、背景

经典RNN有一个致命伤:长距离依赖问题。由于链式法则和反复乘以 W_h 矩阵(尤其在 tanh 或 sigmoid 激活函数下),梯度在反向传播过程中会指数级地消失或爆炸。因此,RNN很难学到时间上相隔较远的信息。a哥在这里举个形象的例子:就像是我们在通讯软件里不断层级转发一张照片,这个照片的清晰度可能会下降,RNN因为自身的结构就会出现这种弊端。

为了解决这个问题,两位大牛霍赫赖特与施密德胡伯在1997年提出了长短期记忆网络(LSTM),后来又出现了门控循环单元(GRU)。

2、LSTM

LSTM比经典RNN多了一个关键的细胞状态(Cell State) C_t,它像一条传送带,信息在上面可以很少变化地流动。LSTM通过三个精心设计的“门”来控制信息的增删:

遗忘门:决定从细胞状态 C_{t-1} 中丢弃哪些旧信息(例如,句子主语已经改变,需要忘记旧主语的性别)。
输入门:决定将哪些新的候选信息 C'_t 存入细胞状态。
更新细胞状态:结合遗忘门和输入门的结果,更新细胞状态。
C_t = f_t * C_{t-1} + i_t * C'_t
输出门:决定当前细胞状态 C_t 的哪些部分需要输出为隐藏状态 h_t。

LSTM的优势:通过门控机制和独立的细胞状态,梯度可以沿着 C_t 这条“高速公路”通畅地流动,有效缓解了长距离依赖问题。

3、GRU

GRU是LSTM的简化版本,将LSTM的三个门合并为两个门,并合并了细胞状态和隐藏状态。它更高效,参数更少。

重置门(Reset Gate):决定如何结合当前输入 x_t 与上一隐藏状态 h_{t-1},以计算候选状态 h'_t。
更新门(Update Gate):决定保留多少旧隐藏状态 h_{t-1},以及引入多少新候选状态 h'_t。

长距离依赖仍然困难:虽然LSTM/GRU解决了梯度消失问题,但对于超长序列(如数千词的文档),其效果仍不理想。
信息容量有限:隐藏状态是固定维度的向量,无法像注意力机制那样让模型动态地“聚焦”于输入序列的任意位置。

结论:

正是这些局限,促使了Transformer架构的诞生。Transformer通过自注意力(Self-Attention) 机制,实现了完全并行化的计算,并且通过注意力权重直接捕捉任意位置之间的依赖关系,从而在绝大多数NLP任务上取代了RNN,成为了当前大模型(如GPT、BERT、LLaMA)的核心。

4、transformer

由 Google 在 2017 年的论文《Attention Is All You Need》中提出。它彻底摒弃了 RNN/LSTM 中的循环结构,完全基于自注意力机制(Self-Attention)来构建模型。

4.1核心思想

用全注意力机制取代循环结构,实现对序列的全局感知与并行化处理。

4.2关键组件


一个标准的 Transformer Encoder(编码器)主要由以下模块组成:
A. 输入与位置编码 (Input Embedding + Positional Encoding)
Embedding:将词汇映射为稠密向量。
PE:正弦/余弦函数生成的向量,注入位置信息。
B. 自注意力机制 (Scaled Dot-Product Attention)
这是最核心的组件。
C. 多头注意力 (Multi-Head Attention)
将 Q,K,V 分成多个子空间(头),分别进行注意力计算,最后拼接起来。
作用:让模型能从不同角度(如语法角度、语义角度、指代关系角度)同时关注不同的信息。
D. 前馈神经网络 (Feed-Forward Network, FFN)
在每个注意力层之后,接一个全连接的前馈网络(通常是两层线性层夹一个激活函数 ReLU/GELU)。
作用:对特征进行非线性变换和进一步整合。
E. 残差连接 (Residual Connection) & 层归一化 (Layer Normalization)
残差连接: 防止梯度消失,加速收敛。
Layer Norm:稳定训练过程,对每个样本的每个特征维度进行归一化。
F. 解码器 (Decoder) - 仅用于生成任务
Masked Self-Attention:强制模型在预测第 防止“作弊”看到未来。
Encoder-Decoder Attention:让解码器去“关注”编码器的输出,实现翻译或生成任务中的对齐。

5、对比

结构核心思想记忆机制关键组件优点缺点
经典RNN循环连接隐藏状态隐藏状态h_t一个非线性激活层参数共享,处理变长序列长距离梯度消失/爆炸
LSTM门控机制+细胞状态细胞状态C_t(信息高速路) + 隐藏状态h_t遗忘门、输入门、输出门、细胞状态有效缓解长距离依赖参数量大,计算复杂

GRU

简化门控机制合并后的隐藏状态h_t更新门、重置门比LSTM更高效,参数更少

表达能力可能略弱于LSTM

transformer

去循环化和自注意力机制隐形的上下文窗口输入部分、编码器、解码器、输出部分并行计算、克服长距离依赖问题计算复杂度和内存消耗高
http://www.jsqmd.com/news/1068089/

相关文章:

  • Linear自动化_linear-automation
  • 奥迪 AUDI 案例:母品牌和新业务怎么拆?
  • 山东大学软件学院项目实训:基于AI大模型的智能考研助手(五)
  • C# Binary读写流 / BufferedStream缓存流 全套笔记
  • PyTorch Tensor 完全指南:从基础概念到高级操作实战
  • 微信 iPad 协议登录认证与鉴权机制深度解析
  • 己所不欲勿施于人
  • 多源BFS最短路---矩阵 | 飞地的数量 | 地图中的最高点 | 地图分析
  • C语言学习笔记20260519—如何判断输入的自然数是否为素数
  • OpencvSharp 算子学习教案之 - Cv2.DrawContours 重载1
  • 3A分子筛乙醇脱水的实验装置设计方案
  • 2026年第一、二季度最新最全热门网站建设工具全面对比评测
  • SpringCloud Alibaba Sentinel 限流+熔断完整实战教程
  • 电阻、电容、电感,二极管、三极管、mos管
  • 江科大PWM笔记:呼吸灯、舵机控制、电机调速
  • Linux 实时优化的端到端延迟:从中断到任务执行的全链路优化
  • 2026山东大学软件学院创新项目实训(团队——6)
  • 山东大学项目实训6月20日
  • 【编号317】西安城市边缘区土地利用数据
  • 计算机毕业设计之取保候审人员管理系统设计与实现
  • (一)站稳脚:用Scikit-learn跑通第一条Pipeline
  • SQL必知必会——使用游标
  • 【Springboot毕设全套源码+文档】基于springboot蛋糕店线上预订销售系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • TAP/TUN与自定义网络协议栈
  • c#软件开发学习笔记--Winform窗体第二期
  • NAT导致视频监控平台无法拉取视频流故障一例
  • 上下文窗口、KV Cache 与长上下文问题
  • Kubernetes 之资源对象 Pod详解
  • Celery 和 Apache Airflow 都可用于定时任务调度与全量数据批量分析,但定位、架构和适用场景有显著区别
  • Java 集合 - Java集合框架详解与应用