神经网络基础:从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在文本中的应用)。