查看全课大纲(第 31 / 93 节)
  1. 1.计算机视觉概述
  2. 2.计算机视觉应用场景
  3. 3.困难与挑战
  4. 4.开源库介绍
  5. 5.图像显示与存储
  6. 6.CLAHE
  7. 7.腐蚀膨胀与开闭运算
  8. 8.滤波与边缘填充
  9. 9.各种滤波
  10. 10.图像金字塔
  11. 11.傅里叶变换
  12. 12.短时傅里叶变换与小波变换
  13. 13.颜色特征与颜色直方图
  14. 14.几何特征_边缘
  15. 15.几何特征-角点与斑点
  16. 16.局部特征-SIFT特征描述子
  17. 17.局部特征-SURF特征描述子
  18. 18.局部特征-ORB特征描述子
  19. 19.其他特征描述子
  20. 20.传统图像分割技术
  21. 21.GraphCut
  22. 22.GrabCut
  23. 23.人脸检测的传统方法
  24. 24.行人检测的传统方法HOG+SVM
  25. 25.行人检测DPM
  26. 26.人工神经网络的架构
  27. 27.目标函数与梯度下降
  28. 28.误差反向传播
  29. 29.可手算的神经网络
  30. 30.改进目标函数与克服梯度消散
  31. 31.神经网络之传统神经网络与深度网络的差异
  32. 32.各种梯度下降算法
  33. 33.如何选择合适的梯度下降算法
  34. 34.避免过适应
  35. 35.CNN的架构
  36. 36.CNN的误差反向传播_卷积层
  37. 37.CNN的误差反向传播_池化层
  38. 38.分类所用的数据集
  39. 39.Alexnet详解
  40. 40.VGG详解
  41. 41.GoogLeNet_v1
  42. 42.BatchNormalization
  43. 43.GoogLeNet_v3v4
  44. 44.ResNet
  45. 45.ResNeXt
  46. 46.CNN设计准则
  47. 47.图像检索与推土机距离
  48. 48.基于颜色相似性
  49. 49.基于形状相似性
  50. 50.基于纹理相似性
  51. 51.基于局部特征相似性
  52. 52.DL的二值哈希编码
  53. 53.高维空间中检索KDTree
  54. 54.高维空间中检索LSH
  55. 55.目标识别任务综述
  56. 56.RCNN
  57. 57.SPP-Net
  58. 58.Fast R-CNN
  59. 59.Faster R-CNN
  60. 60.R-CNN系列模型回顾
  61. 61.R-FCN的设计思路
  62. 62.R-FCN的实现
  63. 63.YOLOv1
  64. 64.YOLOv2_9000
  65. 65.YOLOv3
  66. 66.图像分割应用场景与数据集
  67. 67.上采样的实现方式
  68. 68.FCN网络架构的由来
  69. 69.FCN构建细节
  70. 70.DeepLabv1
  71. 71.CRF
  72. 72.DeepLabv2
  73. 73.DeepLabv3
  74. 74.特定的医学影像分割任务
  75. 75.U-Net
  76. 76.3D U-Net
  77. 77.V-Net
  78. 78.DenseNet
  79. 79.病理切片分析任务及数据集
  80. 80.病理切片分析
  81. 81.图说任务及其传统处理方法
  82. 82.深度语言模型与RNN
  83. 83.LSTM及其变种
  84. 84.NIC模型
  85. 85.SAT模型
  86. 86.图说的性能指标
  87. 87.判别模型与生成模型
  88. 88.KL散度与JS散度
  89. 89.VAE
  90. 90.GAN的基本原理
  91. 91.DCGAN与CGAN
  92. 92.Wasserstein GAN
  93. 93.SRGAN

神经网络之传统神经网络与深度网络的差异

传统神经网络与深度网络的差异

小象实战讲义 · 基于深度学习的计算机视觉

在上一讲我们学习了神经网络的基本原理与误差反向传播算法,这为我们理解更复杂的模型奠定了基础。然而,从传统的浅层神经网络到如今动辄成百上千层的深度网络,其间的差异远不止是“层数变多”这么简单。本节将系统性地剖析传统神经网络与深度网络在思想起源、网络架构、训练方法以及核心组件上的根本区别,揭示深度学习“端到端”学习范式的革命性意义。

💡 核心导读

  • 思想跃迁:从“特征工程”到“特征学习”,理解深度学习如何将特征提取过程自动化,实现端到端学习。
  • 架构演进:对比三层以内的传统神经网络与可达上千层的深度网络,分析连接方式(全连接 vs. 局部连接、权值共享)的根本变化。
  • 训练革新:认识目标函数(MSE → 交叉熵)、激活函数(Sigmoid → ReLU)、优化算法(基本梯度下降 → Adam)以及正则化技术(经验调参 → Dropout)的全面升级。
  • 历史脉络:梳理神经网络从感知机、BP算法、支持向量机冲击到深度置信网络(DBN)复兴的关键节点,理解技术发展的内在逻辑。

从特征工程到特征学习:思想的源头

在典型的机器学习流程中,我们遵循着“预处理 → 特征提取 → 特征选择 → 模型训练”的固定范式。正如讲师在课程中所强调的:

“因为在典型的机器学习的步骤当中,预处理、特征提取、特征选择全都是必不可少的,然后才能够真正进到模型里边去进行这样的一个预测或者是识别。”

这个过程高度依赖人的经验和领域知识。特征选得好,模型性能可能大幅提升;特征选得不好,甚至可能“帮倒忙”,直接干扰学习效果。讲师用一个生动的比喻指出了传统方法的困境:

“特征其实不是越选越好,越多越好……你选一些好的特征其实是非常麻烦的事,因为这是一个非常需要结合人的经验以及对于这个行业理解的这样的一个事情。”

于是,一个根本性的问题被提了出来:能否让算法自己来决定需要多少特征、选择哪些特征?

这就是深度学习最本源的思想:无监督的特征学习。注意,它本身不是无监督学习,而是一种无监督式的特征学习,再结合有多个层次的特征组合,最终形成一个端到端的学习模型。其关键突破在于“端到端”,即从原始数据(如图像像素)直接到最终任务(如图像分类),中间所有步骤的参数都通过训练共同决定。

我们可以通过对比传统目标检测方法 DPM(Deformable Parts Model)与经典卷积神经网络 AlexNet 来直观理解这一思想:

  • DPM流程:HOG 提取底层特征 → 组件模型提取中层特征 → 支持向量机(SVM)进行分类。HOG 特征由人工设计、参数固定;组件模型参数虽经隐变量 SVM(latent SVM)判别式训练得到,但特征提取与模型训练相互独立,不是端到端联合优化。
  • AlexNet流程:靠近输入图像的卷积层自动提取底层特征 → 后续卷积层自动提取中层特征 → 最后的全连接层模拟了一个分类器(可视为逻辑回归的组合)。所有层的参数均由训练数据驱动,共同优化。
传统机器学习流程:
原始图像 → [人工设计]预处理 → [人工设计]特征提取 → [人工设计]特征选择 → 机器学习模型(如SVM)

深度学习(端到端)流程:
原始图像 → 神经网络(卷积层+全连接层) → 预测结果
          ↑
      所有参数通过训练学习得到

架构与连接的深刻变革

深度网络并非简单地将传统神经网络“堆高”。两者在网络架构和层间连接方式上存在本质区别。

网络深度:从三层以内到上千层

传统神经网络受限于梯度消失/爆炸等问题,有效训练的层数通常不超过三层。而现代深度网络,如 ResNet 及其变种,可以通过残差连接等技术稳定训练上百甚至上千层。深度的增加带来了更强的表征能力和层次化的特征抽象能力。

连接方式:从全连接到多样化连接

  1. 全连接 vs. 局部连接与权值共享:

    • 传统神经网络层与层之间通常是全连接的,即当前层的每个神经元都与前一层的所有神经元相连。这会导致参数量巨大,容易过拟合,且难以捕捉图像的局部空间结构。
    • 卷积神经网络(CNN)引入了局部连接(每个神经元只感受输入的一小片区域,即感受野)和权值共享(同一个卷积核在不同位置扫描时使用相同的权重)。这极大地减少了参数量,使模型具备平移等变性(输入平移,输出特征图随之平移;再配合池化可获得一定的平移不变性),并更符合图像的局部相关性先验。
  2. 前馈 vs. 跨层连接:

    • 传统神经网络一般是严格的前馈网络,没有跨层连接。
    • 深度网络中出现了丰富的跨层连接,例如 ResNet 中的残差连接(将前面某层的输出直接加到后面某层的输入上)、DenseNet 中的密集连接等。这些连接缓解了梯度消失问题,促进了特征复用,让网络训练得更深、更高效。
import numpy as np

# 演示全连接与局部连接参数量差异(概念性计算)
# 假设输入层有 1024 个神经元,隐藏层有 512 个神经元
input_neurons = 1024
hidden_neurons = 512

# 全连接参数量(权重 + 偏置)
fc_params = input_neurons * hidden_neurons + hidden_neurons
print(f"全连接层参数量: {fc_params}")

# 对比:一个简单的卷积层(局部连接+权值共享)
# 假设输入是 32x32x3 的图像 (3072个值),用 5x5 的卷积核,输出 6 个通道
input_h, input_w, input_c = 32, 32, 3
kernel_size = 5
output_c = 6

# 每个卷积核的参数:5*5*3个权重 + 1个偏置
params_per_kernel = kernel_size * kernel_size * input_c + 1
# 总参数量
conv_params = params_per_kernel * output_c
print(f"卷积层参数量: {conv_params}")
print(f"参数量减少比例: {(fc_params - conv_params) / fc_params * 100:.2f}%")
全连接层参数量: 524800
卷积层参数量: 456
参数量减少比例: 99.91%

训练组件与技术的全面升级

深度学习的成功,离不开一系列训练组件和技术的革新。

目标函数:从均方误差到交叉熵

传统神经网络常使用均方误差(MSE)作为目标函数。但对于分类任务,尤其是多分类,MSE 的优化地形可能较为平缓,收敛慢。交叉熵(Cross-Entropy)损失函数则提供了更陡的梯度,能更快地驱动模型参数朝着正确分类的方向更新,尤其在与 Softmax 激活函数结合时,构成了分类任务的标准配置。

交叉熵损失(对于单个样本): L=−∑i=1Cyilog⁡(y^i)L = -\sum_{i=1}^{C} y_i \log(\hat{y}_i) 其中 CC 是类别数,yiy_i 是真实标签的 one-hot 编码,y^i\hat{y}_i 是模型预测的属于第 ii 类的概率。

激活函数:从 Sigmoid/Tanh 到 ReLU

Sigmoid 和 Tanh 函数在传统神经网络中被广泛使用,但它们存在饱和区,梯度容易消失,不利于深层网络的训练。 ReLU(Rectified Linear Unit)及其变种(如 Leaky ReLU)因其简单的计算、非饱和特性,能有效缓解梯度消失问题,成为深度网络主流的激活函数。

import numpy as np

def relu(x):
    return np.maximum(0, x)

def relu_derivative(x):
    return np.where(x > 0, 1.0, 0.0)

x = np.array([-2., -0.5, 0., 0.5, 2.])
print("输入值:", x)
print("ReLU输出:", relu(x))
print("ReLU导数:", relu_derivative(x))
输入值: [-2.  -0.5  0.   0.5  2. ]
ReLU输出: [0.  0.  0.  0.5 2. ]
ReLU导数: [0. 0. 0. 1. 1.]

优化算法:从基本梯度下降到自适应算法

基本梯度下降(GD)及其随机版本(SGD)学习率难以设定,容易陷入鞍点或震荡。深度学习时代发展出了 Momentum、Nesterov 等动量类方法,以及 RMSprop、Adam 等自适应学习率算法。以 Adam 为例,它同时考虑梯度的一阶矩估计(动量)和二阶矩估计(自适应学习率),为每个参数动态调整更新步长,收敛更快、更稳定。

避免过拟合:从凭经验到结构化正则化

传统上多凭经验调参;深度学习将早停、权重衰减系统化为常规手段,并引入 Dropout 等结构化正则化方法。Dropout 在训练时随机“丢弃”一部分神经元,迫使网络不依赖于任何单个神经元,从而学习到更鲁棒的特征,是一种高效的模型平均(集成学习)方法。

历史回望:神经网络的沉浮与深度学习的崛起

神经网络的发展并非一帆风顺,经历了多次高潮与低谷:

  1. 感知机的局限(1969):Minsky 指出单层感知机无法解决异或(XOR)问题,导致第一次AI寒冬。
  2. BP算法与复兴(1986):Rumelhart、Hinton 等人系统阐述并推广了误差反向传播算法,使得训练多层神经网络成为可能,神经网络迎来复兴。
  3. 支持向量机(SVM)的挑战(1990s):SVM 具有坚实的数学理论基础和良好的泛化性能,而神经网络被视为“黑箱”,再次陷入低谷。
  4. 深度置信网络(DBN)与深度学习崛起(2006):Hinton 等人提出用逐层贪婪预训练(RBM)来初始化深度网络,打破了深度模型训练的壁垒。随后,ReLU、Dropout、更好的优化器以及大规模数据(如ImageNet)的共同作用,使深度学习在2012年(AlexNet)后爆发式发展。

正如讲师在2019年授课时提及的一个有趣观察:“照之前的这个推测的话,也许在2020年左右……神经网络……可能又会迎来一个冬天。” 这反映了当时学界对技术周期性的思考。然而,深度学习通过持续的技术创新(如Transformer架构)和应用拓展,至今仍在蓬勃发展。

📝 动手练一练

  1. 概念辨析:讲师提到深度学习是“无监督的特征学习”,但又说“它本身不是无监督学习”。请结合“端到端”的概念,解释这看似矛盾的说法。
👉 点击查看参考答案

“无监督的特征学习”指的是特征提取的过程不需要人工标注的特征标签来指导,网络能够从原始数据中自动学习到有用的特征表示。例如,卷积层通过自学习得到边缘、纹理等滤波器。 “不是无监督学习”指的是整个模型的训练目标通常是有监督的(如图像分类有类别标签)。模型利用这些最终的任务标签,通过反向传播,同时优化特征提取部分(卷积层)和分类部分(全连接层)的所有参数。 因此,整个过程是:利用有监督的最终信号,驱动一个能够进行无监督式特征学习的端到端模型。

  1. 手动计算:假设一个传统全连接神经网络,输入层3个神经元,隐藏层2个神经元,输出层1个神经元,使用Sigmoid激活函数。请计算该网络的总参数量(包括权重和偏置)。如果将其改成一个卷积层,输入为3x3x1的单通道图像,使用一个2x2的卷积核,输出1个通道,步长为1,无填充,请计算该卷积层的参数量,并对比两者。
👉 点击查看参考答案

全连接网络参数量:

  • 输入层到隐藏层权重:3 * 2 = 6
  • 隐藏层偏置:2
  • 隐藏层到输出层权重:2 * 1 = 2
  • 输出层偏置:1 总参数量 = 6 + 2 + 2 + 1 = 11

卷积层参数量:

  • 一个2x2卷积核的权重数:2 * 2 * 1 = 4
  • 一个偏置:1 总参数量 = 4 + 1 = 5

对比:即使处理相近数量级的输入(9个像素 vs 3个特征),卷积层凭借局部连接和权值共享,参数量(5)远少于全连接层(11)。当输入图像变大时,这种差距会迅速拉大:全连接层参数量随输入维度线性增长;图像拉直后输入维度极高,参数量会急剧膨胀(若隐藏层规模也随输入扩大,则接近平方增长)。而卷积核的参数量与输入尺寸无关。

本章小结

本节深入探讨了传统神经网络与深度网络之间的根本差异。我们认识到,深度学习不仅仅是在网络深度上的量变,更是一场从“特征工程”到“特征学习”的范式革命。它通过端到端的训练方式,将特征提取、选择与模型优化融为一体。在架构上,卷积神经网络通过局部连接和权值共享,极大地提升了效率并契合了图像数据的特性。在训练技术上,从ReLU、交叉熵损失到Adam优化器和Dropout正则化,一系列创新共同解决了深层网络训练中的梯度消失、收敛慢、过拟合等核心难题。理解这些差异,是掌握现代深度学习模型的基础。

📋 行动清单

  • 复述“端到端学习”的含义,并举例说明它如何改变了计算机视觉任务的开发流程。
  • 对比列出全连接层与卷积层在连接方式和参数量上的核心区别。
  • 阐述ReLU激活函数相比Sigmoid函数,在训练深度网络时的两大优势。

—— 小象教研组