首页
/ 从全连接层到卷积神经网络:D2L项目中的计算机视觉基础

从全连接层到卷积神经网络:D2L项目中的计算机视觉基础

2025-06-04 02:50:50作者:邓越浪Henry

引言:为什么需要卷积神经网络?

在传统机器学习中,处理表格数据时,全连接的多层感知机(MLP)是非常有效的工具。表格数据的特点是每行代表一个样本,每列代表一个特征。然而,当面对高维感知数据(如图像)时,全连接网络会面临巨大挑战。

以分辨猫狗图片为例,假设我们收集了百万像素(1MP)的图片数据集。这意味着每个输入样本有100万个维度。即使将隐藏层压缩到1000个神经元,全连接层也需要10^9个参数。这样的参数量不仅训练成本高昂,而且容易过拟合。

图像数据的结构性特征

人类和计算机能有效识别图像,是因为图像具有以下关键特性:

  1. 平移不变性:物体识别不应依赖于物体在图像中的具体位置
  2. 局部性:图像的局部区域通常包含足够的信息,不需要考虑相距很远的像素

这些特性启发我们设计更高效的网络结构——卷积神经网络(CNN)。

从全连接层到卷积层

全连接层的局限性

传统MLP处理图像时,将二维图像展平为一维向量,丢失了空间结构信息。更合理的做法是将隐藏层也保持为二维结构,使每个隐藏单元对应图像的一个空间位置。

数学上,我们可以用四阶张量W来表示权重:

[H]_{i,j} = U_{i,j} + ∑∑ W_{i,j,k,l} X_{k,l}

这种表示虽然保留了空间信息,但参数量仍然巨大。

引入卷积思想

通过施加平移不变性约束,我们要求权重不依赖于具体位置(i,j),简化为:

[H]_{i,j} = u + ∑∑ V_{a,b} X_{i+a,j+b}

这本质上就是卷积操作!我们使用相同的滤波器V在整个图像上滑动计算。

再施加局部性约束,限制感受野范围Δ:

[H]_{i,j} = u + ∑_{a=-Δ}^Δ ∑_{b=-Δ}^Δ V_{a,b} X_{i+a,j+b}

这样,参数量从O(n²)骤降至O(Δ²),实现了参数共享和局部连接。

卷积的数学本质

严格来说,上述操作在数学上称为互相关(cross-correlation),而卷积的定义是:

(f*g)(i,j) = ∑∑ f(a,b) g(i-a,j-b)

两者的区别仅在于滤波器是否翻转。在深度学习中,我们通常忽略这种区别,因为学习过程会自动适应滤波器的方向。

多通道扩展

真实图像是三维张量(高度×宽度×通道),因此需要扩展卷积操作:

  1. 输入X变为三阶张量X_{i,j,c}
  2. 滤波器V变为四阶张量V_{a,b,c,d}
  3. 输出H变为三阶张量H_{i,j,d}

完整公式为:

[H]_{i,j,d} = ∑∑∑ V_{a,b,c,d} X_{i+a,j+b,c}

每个输出通道d可以学习检测不同的特征(如边缘、纹理等)。

卷积神经网络的优势

  1. 参数效率:共享权重大幅减少参数量
  2. 平移等变性:物体移动导致特征图相应移动
  3. 局部感知:更适合图像的局部相关性
  4. 层次化特征:浅层学习简单特征,深层组合为复杂特征

总结

卷积神经网络通过巧妙利用图像的空间结构特性,解决了全连接网络在处理图像数据时的诸多问题。D2L项目中展示的从全连接层到卷积层的演变过程,揭示了深度学习模型设计中的核心思想:根据问题特性设计合适的归纳偏置,从而构建高效且强大的模型。

理解这些基础概念对于后续学习更复杂的CNN架构(如AlexNet、ResNet等)至关重要。在接下来的章节中,我们将深入探讨卷积神经网络的具体实现和优化方法。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
295
957
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
493
393
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
111
196
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
59
140
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
356
321
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
14
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
97
251
ArkAnalyzer-HapRayArkAnalyzer-HapRay
ArkAnalyzer-HapRay 是一款专门为OpenHarmony应用性能分析设计的工具。它能够提供应用程序性能的深度洞察,帮助开发者优化应用,以提升用户体验。
Python
18
6
arkanalyzerarkanalyzer
方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
33
38
CangjieMagicCangjieMagic
基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。
Cangjie
579
41