# 深度学习基础算法:NN、RNN、CNN

发布于:2025-04-06 ⋅ 阅读:(17) ⋅ 点赞:(0)

神经网络基础:从NN到RNN、CNN的全面解析

在人工智能领域,神经网络(Neural Networks, NN)是模仿人脑信息处理方式的核心技术。随着任务复杂度的提升,逐渐衍生出**循环神经网络(RNN)卷积神经网络(CNN)**等变体。本文将从基础概念、架构设计到代码实现,深入解析这三种经典模型。


一、基础神经网络(NN)

1. 核心概念

**神经网络(NN)**是一种由多层神经元组成的计算模型,通过非线性激活函数和权重调整实现复杂映射。其核心组成包括:

  • 输入层:接收原始数据(如图像像素、文本向量)。
  • 隐藏层:提取抽象特征(通过全连接层和激活函数)。
  • 输出层:生成预测结果(如分类概率、回归值)。
核心公式

单神经元的输出为:
y = f ( ∑ i w i x i + b ) y = f\left( \sum_{i} w_i x_i + b \right) y=f(iwixi+b)
其中, w i w_i wi为权重, b b b为偏置, f f f为激活函数(如ReLU、Sigmoid)。


2. 架构设计

  • 全连接结构:每一层的神经元与下一层全部连接。
  • 前向传播:数据从输入层逐层传递到输出层。
  • 反向传播:通过梯度下降优化权重(如交叉熵损失函数)。
示例代码(PyTorch)
import torch
import torch.nn as nn

class NeuralNetwork(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super().__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 示例:输入特征维度10,隐藏层维度20,输出类别数3
model = NeuralNetwork(10, 20, 3)

二、循环神经网络(RNN)

1. 核心概念

循环神经网络(RNN)专为序列数据设计(如文本、时间序列),通过循环结构保留历史信息。其核心特点是:

  • 时间步展开:每个时间步接收当前输入和上一步的隐藏状态。
  • 参数共享:同一权重矩阵在所有时间步复用。
核心公式

h t = f ( W x h x t + W h h h t − 1 + b h ) h_t = f(W_{xh} x_t + W_{hh} h_{t-1} + b_h) ht=f(Wxhxt+Whhht1+bh)
y t = W h y h t + b y y_t = W_{hy} h_t + b_y yt=Whyht+by
其中, h t h_t ht为当前隐藏状态, y t y_t yt为当前输出。


2. 架构设计

  • 输入序列:按时间步依次处理(如句子中的每个单词)。
  • 隐藏状态传递:跨时间步传递上下文信息。
  • 梯度问题:传统RNN存在梯度消失/爆炸,改进方案如LSTMGRU

RNN单层结构:
在这里插入图片描述
内部架构图:
在这里插入图片描述

示例代码(PyTorch)
class SimpleRNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super().__init__()
        self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        # x形状: [batch_size, seq_len, input_size]
        out, _ = self.rnn(x)  # 输出形状: [batch_size, seq_len, hidden_size]
        out = self.fc(out[:, -1, :])  # 取最后一个时间步的输出
        return out

# 示例:输入特征维度5,隐藏层维度10,输出类别数2
model = SimpleRNN(5, 10, 2)

三、卷积神经网络(CNN)

1. 核心概念

**卷积神经网络(CNN)**擅长处理网格状数据(如图像、音频),核心思想是:

  • 局部感受野:通过卷积核捕捉局部特征(如边缘、纹理)。
  • 参数共享:同一卷积核在输入的不同位置滑动提取特征。
  • 池化层:降维并保留关键信息(如最大池化)。
核心公式

卷积操作:
Feature Map ( i , j ) = ∑ m ∑ n W ( m , n ) ⋅ X ( i + m , j + n ) + b \text{Feature Map}(i,j) = \sum_{m} \sum_{n} W(m,n) \cdot X(i+m, j+n) + b Feature Map(i,j)=mnW(m,n)X(i+m,j+n)+b
其中, W W W为卷积核权重, X X X为输入局部区域。


2. 架构设计

  • 卷积层:提取局部特征(如边缘检测)。
    在这里插入图片描述

  • 池化层:降低空间维度(如2x2最大池化)。
    在这里插入图片描述

  • 全连接层:最终分类或回归。

卷积架构构建示例:
在这里插入图片描述

示例代码(PyTorch)
class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1)  # 输入通道1,输出通道16
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(16 * 13 * 13, 10)  # 假设输入图像为28x28

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))  # 输出形状: [batch, 16, 13, 13]
        x = x.view(-1, 16 * 13 * 13)
        x = self.fc1(x)
        return x

# 示例:处理MNIST手写数字(1通道,28x28图像)
model = SimpleCNN()

四、对比与适用场景

1. 模型对比

模型 核心结构 适用场景 优点 缺点
NN 全连接层 简单分类、回归 结构简单,易于实现 参数多,难以处理序列/图像
RNN 循环结构 文本、时间序列 捕捉时序依赖 梯度消失,计算效率低
CNN 卷积层、池化层 图像、视频、音频 局部特征提取,参数共享 需固定输入尺寸

2. 应用场景

  • NN:房价预测、简单二分类(如垃圾邮件检测)。
  • RNN:机器翻译、股票预测、情感分析。
  • CNN:图像分类(如ResNet)、目标检测(如YOLO)、语音识别。

五、未来发展方向

  1. 混合架构

    • CNN + RNN:处理视频描述生成(如同时分析图像和文本)。
    • Transformer + CNN:图像分类(如ViT模型)。
  2. 轻量化设计

    • 模型压缩(如MobileNet)适配移动端部署。
  3. 自监督学习

    • 利用无标签数据预训练(如BERT在文本中的应用)。

网站公告

今日签到

点亮在社区的每一天
去签到