共计 2120 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍
神经网络的发展经历了多次起伏,从早期的感知机模型到如今的深度学习架构,每一次突破都伴随着计算能力的提升和算法的改进。BP 神经网络(Backpropagation Neural Network)、卷积神经网络(CNN, Convolutional Neural Network)和循环神经网络(RNN, Recurrent Neural Network)是深度学习中三种最基础且广泛应用的网络结构。

- BP 神经网络:作为最基础的全连接网络,适用于简单的分类和回归任务。
- CNN:专为图像处理设计,通过局部连接和权值共享大幅减少参数数量。
- RNN:擅长处理时间序列数据,如语音识别和自然语言处理(NLP)。
核心原理
1. BP 神经网络
BP 神经网络的核心在于前向传播和反向传播(Backpropagation)。前向传播计算输出,反向传播通过梯度下降(Gradient Descent)更新权重。
数学推导:
-
前向传播:
$$
z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}
$$
$$
a^{(l)} = \sigma(z^{(l)})
$$
其中,$\sigma$ 是激活函数(如 Sigmoid 或 ReLU)。 -
反向传播:
$$
\delta^{(l)} = \frac{\partial J}{\partial z^{(l)}} = (W^{(l+1)})^T \delta^{(l+1)} \odot \sigma'(z^{(l)})
$$
$$
\frac{\partial J}{\partial W^{(l)}} = \delta^{(l)} (a^{(l-1)})^T
$$
$$
\frac{\partial J}{\partial b^{(l)}} = \delta^{(l)}
$$
2. CNN
CNN 通过卷积核(Kernel)提取局部特征,池化层(Pooling)降低维度,权值共享减少参数。
- 局部连接:每个神经元只连接输入区域的局部区域。
- 权值共享:同一卷积核在不同位置共享参数。
- 池化层:最大池化(Max Pooling)或平均池化(Average Pooling)减少计算量。
3. RNN
RNN 通过隐藏状态(Hidden State)捕捉时间序列的依赖关系,但存在梯度消失(Vanishing Gradient)问题。LSTM(Long Short-Term Memory)通过门控机制(输入门、遗忘门、输出门)解决这一问题。
代码实战
1. BP 神经网络实现
import numpy as np
class BPNetwork:
def __init__(self, layers):
self.weights = [np.random.randn(y, x) for x, y in zip(layers[:-1], layers[1:])]
self.biases = [np.random.randn(y, 1) for y in layers[1:]]
def forward(self, x):
for w, b in zip(self.weights, self.biases):
x = sigmoid(np.dot(w, x) + b)
return x
def train(self, x, y, learning_rate):
# 反向传播实现
# 省略详细代码
pass
2. CNN 处理 MNIST
import torch
import torch.nn as nn
class CNN(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3)
self.pool = nn.MaxPool2d(2)
self.fc = nn.Linear(32 * 13 * 13, 10)
def forward(self, x):
x = self.pool(nn.functional.relu(self.conv1(x)))
x = x.view(-1, 32 * 13 * 13)
x = self.fc(x)
return x
3. RNN 文本生成
import tensorflow as tf
model = tf.keras.Sequential([tf.keras.layers.Embedding(vocab_size, embedding_dim),
tf.keras.layers.LSTM(units=128, return_sequences=True),
tf.keras.layers.Dense(vocab_size, activation='softmax')
])
对比分析
| 网络类型 | 计算复杂度 | 适用场景 |
|---|---|---|
| BP | 高 | 简单分类 |
| CNN | 中等 | 图像处理 |
| RNN | 高 | 时间序列 |
避坑指南
- 梯度消失 / 爆炸:使用 Batch Normalization 或梯度裁剪(Gradient Clipping)。
- 过拟合:采用 Dropout(丢弃法)或 L2 正则化。
- 超参数调优:学习率(Learning Rate)建议从 0.001 开始调整。
延伸思考
- Transformer:注意力机制(Attention)取代 RNN 的循环结构。
- 挑战任务:尝试用 CNN 处理文本数据,或改进 LSTM 的门控机制。
结语
通过本文的学习,你应该对 BP、CNN 和 RNN 有了初步的认识。深度学习的世界广阔而深邃,希望你能在实践中不断探索和进步。
Colab 实践链接 : 点击这里
