郭震 AI公众号:郭震AI

19 RNN之变换机制

发布日期:

最近更新:

分类: 30个神经网络

预计阅读: 4 分钟

阅读次数: 0

系列进度

AI 30 个神经网络 · 第 19 / 62

预计阅读4 分钟
结构重点5 个
图文要点6 张
正文规模1.7k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 5 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

RNN之变换机制结构图查看大图
RNN之变换机制结构图

RNN 把序列按时间步展开,用隐藏状态保存上下文。理解它时,先把数据在每一步如何传递画清楚。这篇重点看结构。先把数据流、关键模块和输出层画清楚,再回头看公式或代码。

RNN之变换机制实操核对图查看大图
RNN之变换机制实操核对图

我会检查 batch、time step、feature 三个维度的顺序。序列模型里,维度顺序错了很常见。

在上一篇中,我们详细探讨了卷积神经网络(CNN)的应用案例,涵盖了图像分类、目标检测等各类任务的实现过程。而在这一部分中,我们将集中讨论循环神经网络(RNN)的变换机制,了解其如何处理序列数据。

RNN的基本原理

RNN(Recurrent Neural Network)是一种专门用于处理序列数据的神经网络架构。与传统的前馈神经网络不同,RNN具有隐含状态,能够利用之前的时间步的信息,进行动态的状态更新。这种特性使得RNN在处理如文本、语音、视频等时序数据时表现颇为优异。

在RNN中,某一时刻的隐状态hth_t不仅依赖于当前输入xtx_t,还与之前的隐状态ht1h_{t-1}有关。其核心递推关系可以表达为:

ht=f(Whht1+Wxxt)h_t = f(W_h h_{t-1} + W_x x_t)

其中,WhW_hWxW_x分别是隐状态和输入的权重矩阵,ff是激活函数,例如可以使用tanh或ReLU。

RNN的变换机制

在RNN的变换机制中,输入序列会逐步被传入网络,每一次的计算后,隐状态的更新不仅考虑当前的输入信息,还结合了过去的信息。这种机制使得RNN能在时间维度上进行信息的“记忆”和“遗忘”。然而,标准RNN在长序列学习时会出现梯度消失或爆炸的问题。

针对这一缺陷,Long Short-Term Memory(LSTM)和Gated Recurrent Unit(GRU)被提出。它们引入了门控机制来控制信息的存储与遗忘,从而有效解决了长序列依赖问题。

LSTM的门控机制

LSTM的变换机制利用三个门的结构(输入门、遗忘门、输出门)来精细化地调整记忆的流动。具体来说,其核心的状态更新方程如下:

  • 遗忘门:决定从记忆中丢弃的信息
ft=σ(Wf[ht1,xt])f_t = \sigma(W_f \cdot [h_{t-1}, x_t])
  • 输入门:决定当前进入记忆的信息
it=σ(Wi[ht1,xt])i_t = \sigma(W_i \cdot [h_{t-1}, x_t])
  • 输出门:决定从记忆中输出的信息
ot=σ(Wo[ht1,xt])o_t = \sigma(W_o \cdot [h_{t-1}, x_t])
  • 更新记忆单元状态
Ct~=tanh(Wc[ht1,xt])\tilde{C_t} = \tanh(W_c \cdot [h_{t-1}, x_t])
  • 最终更新记忆和隐状态
C_t = f_t \ast C_{t-1} + i_t \ast \tilde{C_t} $$

h_t = o_t \ast \tanh(C_t) $$

通过上述公式,LSTM能够有效处理长距离依赖,并在每个时间步中选择性地保留信息。

变换机制在具体案例中的应用

在实际使用中,RNN的变换机制被广泛应用于诸多领域。下面是一个基于LSTM实现文本生成的具体案例。

RNN变换机制判断卡查看大图
RNN变换机制判断卡

理解 RNN 变换机制时,先看输入序列、隐藏状态、权重共享、时间步更新、梯度传播和长期依赖问题。

文本生成示例

假设我们有一段文本,我们希望利用LSTM模型生成新的文本内容。

import numpy as np
import tensorflow as tf

# 假设我们有了分好的字典和训练数据
char_to_idx = {'a': 0, 'b': 1, 'c': 2}  # 示例字典
idx_to_char = {i: char for char, i in char_to_idx.items()}
text = "abcabcabc"

# 超参数定义
seq_length = 3
vocab_size = len(char_to_idx)
embedding_dim = 256
hidden_units = 128

# 数据预处理
inputs = []
targets = []

for i in range(len(text) - seq_length):
    inputs.append([char_to_idx[char] for char in text[i:i + seq_length]])
    targets.append(char_to_idx[text[i + seq_length]])

# 数据转换为tf.Tensor
inputs = tf.convert_to_tensor(inputs)
targets = tf.convert_to_tensor(targets)

# 定义LSTM模型
model = tf.keras.models.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim, batch_input_shape=[None, None]),
    tf.keras.layers.LSTM(hidden_units,
                          return_sequences=False,
                          recurrent_initializer='glorot_uniform'),
    tf.keras.layers.Dense(vocab_size)
])

model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer='adam')

# 训练模型
model.fit(inputs, targets, epochs=100)

# 文本生成函数
def generate_text(model, start_string, num_generate=10):
    input_eval = [char_to_idx[s] for s in start_string]
    input_eval = tf.expand_dims(input_eval, 0)

    text_generated = []

    # 低温生成
    temperature = 1.0
    model.reset_states()

    for i in range(num_generate):
        predictions = model(input_eval)
        predictions = tf.squeeze(predictions, 0) / temperature
        predicted_id = tf.random.categorical(predictions, num_samples=1)[-1, 0].numpy()

        input_eval = tf.expand_dims([predicted_id], 0)
        text_generated.append(idx_to_char[predicted_id])

    return start_string + ''.join(text_generated)

# 生成文本
print(generate_text(model, start_string="ab", num_generate=10))

在这个简单的例子中,通过LSTM学习到的变换机制使得模型能够从“ab”这个前缀开始生成新的字符序列。

RNN之变换机制应用复盘卡查看大图
RNN之变换机制应用复盘卡

如果《RNN之变换机制》还没完全消化,可以从这张卡片的四个动作重新走一遍。

RNN之变换机制应用检查卡查看大图
RNN之变换机制应用检查卡

回看《RNN之变换机制》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

总结

在本篇中,我们深入分析了RNN及其变换机制,特别是LSTM的构成与应用。RNN的独特之处在于它对序列信息的处理能力,使得它在序列生成、情感分析等任务中都取得了良好的效果。在下一篇中,我们将探讨RNN在实际应用中的具体场景,进一步揭示其在现代深度学习中的重要地位。 神经网络阅读地图卡

阅读《RNN之变换机制》前,可以先用配图确认主线;读完后再检查哪些步骤能直接操作,哪些还需要补资料。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

RNN之变换机制适合谁读?

这是 AI 30 个神经网络 系列第 19 / 62 篇,适合正在学习AI 30 个神经网络,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇AI 30 个神经网络教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...