卷积神经网络概述

卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理具有网格结构数据(如图像、音频)的深度学习模型。其核心思想是通过局部感受野、权值共享和池化操作,高效提取数据的空间层次特征。

核心组件

卷积层(Convolutional Layer)
通过卷积核(滤波器)在输入数据上滑动计算局部特征。数学表达为:
$$(f * g)(x, y) = \sum_{i=-\infty}^{\infty} \sum_{j=-\infty}^{\infty} f(i, j) \cdot g(x-i, y-j)$$
其中 $f$ 为输入,$g$ 为卷积核。

池化层(Pooling Layer)
用于降维和特征不变性提取,常见形式包括最大池化(Max Pooling)和平均池化(Average Pooling)。

激活函数
通常使用ReLU(Rectified Linear Unit):
$$f(x) = \max(0, x)$$

全连接层(Fully Connected Layer)
在网络的末端将特征图展开为一维向量,用于分类或回归任务。

经典架构

LeNet-5
早期用于手写数字识别的CNN,包含2个卷积层和3个全连接层。

AlexNet
2012年ImageNet竞赛冠军,首次在CNN中引入ReLU和Dropout。

VGGNet
通过堆叠多个3×3卷积核替代大尺寸卷积核,提升网络深度。

ResNet
提出残差连接(Residual Block)解决深层网络梯度消失问题:
$$H(x) = F(x) + x$$

代码实现示例(PyTorch)

import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(16 * 16 * 16, 10)  # 假设输入为32x32图像

    def forward(self, x):
        x = self.pool(nn.ReLU()(self.conv1(x)))
        x = x.view(-1, 16 * 16 * 16)
        x = self.fc1(x)
        return x

应用领域

  • 图像分类(如ResNet、EfficientNet)
  • 目标检测(如YOLO、Faster R-CNN)
  • 语义分割(如U-Net、DeepLab)
  • 医学影像分析
  • 视频行为识别

优化技巧

数据增强
通过旋转、裁剪、颜色变换扩充数据集。

批量归一化(BatchNorm)
加速训练并提升模型稳定性。

迁移学习
利用预训练模型(如ImageNet)进行微调,适用于小数据集任务。

注意力机制
引入通道注意力(如SE模块)或空间注意力提升特征选择能力。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐