1. 全连接神经网络基础解析
第一次接触深度学习时,全连接神经网络(Fully Connected Neural Network)往往是最容易上手的入门模型。这种网络结构就像城市中的供水系统——输入层是水源,隐藏层是输水管网,输出层则是各家各户的水龙头。数据从输入层流向输出层的过程,实际上是在经历一系列加权计算和非线性变换。
1.1 网络结构与前向传播
一个典型的三层全连接网络包含:
- 输入层:28×28像素的MNIST手写数字图像会展开为784维向量
- 隐藏层:常用128或256个神经元,使用ReLU激活函数
- 输出层:10个神经元对应0-9分类,使用Softmax激活
前向传播的数学本质是矩阵乘法:
python复制# 以单隐藏层为例
hidden = relu(np.dot(inputs, W1) + b1)
output = softmax(np.dot(hidden, W2) + b2)
其中W1的形状为(784,128),W2为(128,10),这种设计使得网络可以学习从像素空间到类别空间的非线性映射。
1.2 反向传播与参数更新
反向传播算法是神经网络训练的引擎,其核心是链式求导法则。以交叉熵损失函数为例:
- 计算输出层梯度:∂L/∂W2 = (pred - true) × hidden.T
- 隐藏层梯度:∂L/∂W1 = (W2.T @ (pred - true)) * relu_derivative × inputs.T
- 使用SGD更新规则:W = W - lr * ∂L/∂W
实际训练时建议使用Adam优化器,其自适应学习率特性对新手更友好。典型初始学习率设为0.001,batch_size=64。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. CNN核心原理剖析
当处理图像数据时,全连接网络的参数量会变得难以承受(224×224彩色图像展开后输入层就有150,528个节点)。卷积神经网络(CNN)通过局部连接和权值共享两大特性解决了这个问题。
2.1 卷积层工作原理
卷积核就像一个小型特征探测器,以3×3或5×5的窗口在图像上滑动扫描。每个卷积核会学习提取特定特征:
- 边缘检测核:[[-1,0,1],[-1,0,1],[-1,0,1]]
- 锐化核:[[0,-1,0],[-1,5,-1],[0,-1,0]]
多通道卷积的数学表达:
python复制output[b,i,j] = sum_c sum_di sum_dj input[b,c,i+di,j+dj] * kernel[c,di,dj]
其中b是batch维度,c是通道维度,(di,dj)是卷积核偏移量。
2.2 池化与特征降维
最大池化(Max Pooling)是CNN的关键组件,以2×2窗口为例:
- 将4个像素值取最大值输出
- 使特征具有平移不变性
- 减少75%的计算量
实际工程中常用步长2的卷积替代池化,这样可以通过学习获得更好的下采样方式。
3. 经典CNN架构实现
3.1 LeNet-5实战
Yann LeCun在1998年提出的LeNet-5架构,至今仍是教学典范:
python复制model = Sequential([
Conv2D(6, (5,5), activation='relu', input_shape=(32,32,1)),
MaxPooling2D(),
Conv2D(16, (5,5), activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(120, activation='relu'),
Dense(84, activation='relu'),
Dense(10, activation='softmax')
])
这个架构在MNIST数据集上仍能达到99%以上的准确率。
3.2 现代改进技巧
- 批归一化(BatchNorm):在卷积后激活前加入,可加速训练
- 残差连接(Residual):解决深层网络梯度消失问题
- 注意力机制:使网络聚焦重要特征区域
4. 训练技巧与调参经验
4.1 数据增强策略
对于图像数据,合理的增强可以提升模型泛化能力:
python复制datagen = ImageDataGenerator(
rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.1,
zoom_range=0.1,
horizontal_flip=True)
4.2 超参数优化
通过网格搜索发现的实用配置:
- 初始学习率:0.1(带热身)到0.0001不等
- batch_size:32-256之间,GPU显存决定
- 优化器选择:Adam或SGD with momentum
- 权重初始化:He初始化配合ReLU效果最佳
5. 常见问题诊断
5.1 梯度消失/爆炸
现象:训练早期loss不下降或变为NaN
解决方案:
- 使用梯度裁剪(clipnorm=1.0)
- 添加BatchNorm层
- 改用ResNet结构
5.2 过拟合处理
当训练准确率远高于验证准确率时:
- 增加Dropout层(rate=0.5)
- 添加L2正则化(lambda=0.001)
- 提前停止(patience=5)
我在实际项目中发现,合理的数据增强比正则化更有效。对于CIFAR-10数据集,通过组合Cutout和MixUp增强,可以使ResNet18的准确率提升3-5个百分点。
