ORIGIN

LSTM和CNN和RNN

本文简单介绍了CNN,RNN和LSTM相关内容。Transformer在序列任务中逐渐取代RNN(因并行计算优势),但RNN/LSTM在资源受限场景仍有价值。

CNN和RNN

二者对比

CNN ——人类的视觉总是会关注视线内特征最明显的点。

  • 卷积神经网络:通常用于计算机视觉中,可以用来图像识别图像分类。CNN 用于提取图像的空间特征,通过不断的卷积和池化操作实现特征提取和降维。

RNN 的假设——事物的发展是按照时间序列展开的(前一刻发生的事物会对未来的事情的发展产生影响)。

  • 循环神经网络:通常用于自然语言处理语音识别中,可以用来处理时间序列数据。RNN 的主要思想是把前面的信息传递到后面,这样网络就可以利用之前的信息做出预测,能够处理序列中每个时间步的数据
组件 CNN RNN
核心操作 卷积(空间局部连接 + 权值共享) 循环(时间步间连接 + 隐藏状态传递)
参数规模 与输入尺寸无关(权值共享减少参数) 参数量随隐藏层维度平方增长(易参数爆炸)
输入输出 固定尺寸输入(如图像) 可变长度序列(如文本、时间序列)

CNN vs RNN的本质区别

维度 CNN RNN
数据特性 空间局部相关性(如图像像素) 时间/顺序相关性(如句子中的词语)
信息流动 前馈传播(无记忆) 循环传播(隐藏状态记忆历史信息)
并行性 高度并行(卷积核独立计算) 串行计算(依赖前一时刻结果)

CNN

基本介绍

  • CNN,全称为 Convolutional Neural Network。它是深度学习中用于模式识别的一种神经网络模型,特别适用于处理图像数据。它通过模拟大脑神经元对图像的识别过程来进行训练。
  • CNN 的结构包括卷积层(Convolutional Layer)、池化层(Pooling Layer)、全连接层(Fully Connected Layer)等。卷积层通过卷积核(kernel)对输入数据进行滑动卷积操作,提取局部特征。池化层则用于降低特征维度,保留主要特征。全连接层将卷积和池化后的特征进行整合,用于分类或其他输出。

CNN工作原理

  • 输入一个图像数据时,卷积层中的卷积核在图像上逐个像素进行卷积运算,生成特征图(feature map)。例如,使用多个不同卷积核可以提取不同纹理、边缘等特征。
  • 池化层对特征图进行下采样操作,常用的池化方法有最大值池化、平均值池化等。
  • 多个卷积层和池化层的组合使用可以提取图像的深层特征。经过卷积和池化后的特征图会被展平并输入到全连接层,全连接层通过激活函数和权重调整,输出对应于图像分类的概率分布。

pytorch实现

import torch.nn as nn

class CNNModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc = nn.Linear(16 * 16 * 16, 10)  # 假设输入为32x32图像
    def forward(self, x):
        x = self.pool(nn.ReLU()(self.conv1(x)))
        x = x.view(x.size(0), -1)
        x = self.fc(x)
        return x
```

应用场景

  • 图像分类是 CNN 最典型的应用场景,如识别图片中的动物、物体种类等。在交通标志识别、医学影像诊断等方面也有广泛应用,能够准确识别和分类图像中的关键目标。

RNN

基本介绍

  • RNN,全称为 Recurrent Neural Network。它是一种处理序列数据的神经网络,能够捕捉数据中的时间依赖关系。在处理语言、语音等序列数据时,能够理解上下文信息。
  • RNN 的基本结构是一个包含循环的网络结构,在每个时间步,网络都会接收当前的输入以及上一个时间步的输出。这样循环连接使得网络具有 “记忆” 的能力,可以利用先前的信息来影响当前的输出。

RNN工作原理

  • RNN 中的隐藏层在处理序列数据时,会将当前输入与隐藏状态结合。在每个时间步 t,输入为 xt,隐藏状态为 ht,输出为 yt。隐藏状态 ht 由当前输入 xt 和前一个隐藏状态 ht-1(即上一时间步的输出)共同决定。
  • 反向传播通过时间反向传播(BPTT)进行训练,但 RNN 容易出现梯度消失或梯度爆炸的问题,特别是在处理长序列数据时。这是因为当时间步过长时,梯度可能会在反向传播过程中变得非常小或非常大,使得网络难以训练。

pytorch实现

class RNNModel(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super().__init__()
        self.rnn = nn.RNN(input_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        out, h_n = self.rnn(x)  # out: (batch, seq_len, hidden_dim)
        out = self.fc(out[:, -1, :])  # 取最后一个时间步输出
        return out
```

应用场景

文本生成是 RNN 的一个重要应用,能够根据前面的字或词来预测后面的字或词,从而生成连贯的文本。在语音识别中,RNN 可以处理语音信号,将其转化为文字。同时在自然语言处理中的情感分析、语言翻译等任务也广泛应用 RNN。

LSTM

基本概念

LSTM,全称为 Long Short-Term Memory。它旨在解决传统RNN的两大核心问题:

  • 梯度消失/爆炸:在长序列训练中,梯度可能指数级衰减或增长,导致模型无法学习长期依赖。
  • 短时记忆限制:传统RNN的隐藏状态难以长期保存信息,对长距离依赖建模能力弱。

LSTM通过引入门控机制细胞状态(Cell State),实现了对信息的长期记忆和选择性遗忘。LSTM 的基本单元包括输入门、输出门、遗忘门以及细胞状态。输入门控制新信息是否进入细胞状态;输出门控制细胞状态中的信息是否输出;遗忘门则控制遗忘细胞状态中的旧信息。

yuxi:选择性遗忘是否可以改进?遗忘无效信息会更好。

工作原理

  • 在每个时间步,LSTM 首先通过遗忘门确定要抛弃的细胞状态信息,这由 sigmoid 函数决定保留程度。然后输入门用于决定哪些新的信息会被添加到细胞状态中,同时通过 tanh 函数创建一个新的候选值向量。
  • 细胞状态的更新是通过将遗忘门的输出与当前细胞状态相乘,再将输入门和候选值向量的乘积与之相加。输出门决定了最终的输出值,它由 sigmoid 函数生成输出门的值,并与经过 tanh 激活的细胞状态相乘得到。

应用领域

  • LSTM 在处理序列数据时表现出色,特别是在需要记忆较长时间依赖关系的情况下。它在机器翻译中可以记住源语言的语句结构,从而更准确地生成目标语言的翻译结果。此外,在时间序列预测(如股票预测)、情感分析、语音识别等领域,LSTM 的应用都可以有效提升性能。
TOP
COMMENT
made with ❤️ by o_oyao
©Yuxi undefined-2025

|