# 深度学习基础算法:NN、RNN、CNN
神经网络基础:从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(i∑wixi+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+Whhht−1+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存在梯度消失/爆炸,改进方案如LSTM和GRU。
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)=m∑n∑W(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)、语音识别。
五、未来发展方向
-  混合架构: - CNN + RNN:处理视频描述生成(如同时分析图像和文本)。
- Transformer + CNN:图像分类(如ViT模型)。
 
-  轻量化设计: - 模型压缩(如MobileNet)适配移动端部署。
 
-  自监督学习: - 利用无标签数据预训练(如BERT在文本中的应用)。
 
