查看全课大纲(第 26 / 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

人工神经网络的架构

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

从本节开始,我们将正式迈入深度学习的大门。在之前的课程中,我们学习了如何用传统的图像处理技术(如SIFT、HOG等)来提取特征并解决问题。然而,现代计算机视觉的绝大多数突破,无论是图像分类、目标检测还是图像分割,都建立在深度学习的基础之上。而深度学习的理论基石,正是人工神经网络。本节我们将从最基础的神经元模型讲起,剖析神经网络的核心架构和工作原理,理解这个看似复杂的“黑盒”是如何通过简单的单元组合,实现强大的信息映射能力的。

💡 核心导读

  • 神经网络是什么:大量结构简单、功能接近的神经元,按照特定架构连接成的网状结构,旨在模拟大脑的工作方式。
  • 神经元的核心机制:接收多个输入,进行加权求和,再通过一个非线性激活函数(如Sigmoid、Tanh)产生输出,模拟生物神经元的“阈值激发”特性。
  • 从神经元到网络:单个神经元能力有限,但将大量神经元分层组织成前馈网络,就能逐层提取和组合特征,实现从输入到输出的复杂映射。
  • 前馈网络的特点:信息单向流动,从输入层经隐藏层到输出层,构成一个有向无环图,是后续深度学习模型的基础架构。

从生物神经元到人工模型

要理解人工神经网络,不妨先看看它的灵感来源——我们大脑中的生物神经元。

一个典型的生物神经元主要由三部分构成:

  1. 树突:负责接收来自其他神经元的信号(刺激)。
  2. 细胞体:对接收到的信号进行整合处理。
  3. 轴突:将处理后的信号(电脉冲)传递给其他神经元。

信息传递的过程是:树突接收刺激,在细胞体处进行累积,当累积的刺激超过某个阈值时,神经元被“激活”,通过轴突向外输出一个信号;否则,神经元保持静默。

人工神经元正是对这一生物过程的高度简化与数学抽象。它只保留了最核心的三个部分:模拟树突的输入与权重连接、模拟细胞体整合功能的求和与阈值判断、以及模拟轴突传递的输出。其他复杂的生物细节(如离子通道、突触可塑性等)在最初的模型中被忽略,以构建一个可计算的数学单元。

人工神经元:构建智能的基石

人工神经元是神经网络的基本组成单元,其早期最著名的具体实现是感知机(Perceptron)。它的数学模型清晰而优美:

一个神经元接收 dd 个输入 x1,x2,...,xdx_1, x_2, ..., x_d,每个输入对应一个权重 w1,w2,...,wdw_1, w_2, ..., w_d。神经元的输出 yy 由以下公式决定:

y=f(∑i=1dwixi+b)y = f\left( \sum_{i=1}^{d} w_i x_i + b \right)

让我们拆解这个公式的每个部分:

  • 加权求和:∑i=1dwixi\sum_{i=1}^{d} w_i x_i。这模拟了树突接收不同强度刺激的过程。权重 wiw_i 代表了第 ii 个输入连接的重要性,正权重表示兴奋性连接,负权重表示抑制性连接。
  • 偏置:bb。这是一个常数项,起的是生物神经元阈值的作用。若把阈值记为 θ\theta,则“加权和超过阈值才激活”可写作 ∑i=1dwixi≥θ\sum_{i=1}^{d} w_i x_i \ge \theta,移项后为 ∑i=1dwixi−θ≥0\sum_{i=1}^{d} w_i x_i - \theta \ge 0;令 b=−θb = -\theta,就得到公式中“加 bb”的形式。这样写只是为了让偏置能和权重一起被优化。
  • 激活函数:f(⋅)f(\cdot)。这是一个非线性函数,是神经元具备非线性表达能力的关键。它决定了最终输出的形式。

这里需要特别强调:神经网络的输入和输出都是数字。无论是图像像素、文本向量还是传感器读数,都必须转化为数值形式,才能输入网络进行计算。

激活函数:引入非线性的魔法

为什么需要非线性激活函数?如果只有线性变换(加权求和),那么无论叠加多少层,整个网络的表达能力依然等价于一个单层线性模型,无法学习复杂模式。激活函数引入了非线性,使得神经网络能够拟合任意复杂的函数。

早期神经网络最常用的两种激活函数是 Sigmoid 和 Tanh。

  1. Sigmoid 函数 σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}} 它将输入 xx(范围 (−∞,+∞)(-\infty, +\infty))“挤压”到 (0,1)(0, 1) 区间。其形状呈“S”型,在 x=0x=0 附近变化显著,而当 ∣x∣|x| 很大时,曲线趋于平坦,梯度接近于0。这个函数很好地模拟了生物神经元的“激活”(接近1)与“抑制”(接近0)状态。

  2. Tanh 函数 tanh⁡(x)=ex−e−xex+e−x\tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} 它是双曲正切函数,将输入映射到 (−1,1)(-1, 1) 区间。与 Sigmoid 相比,Tanh 函数的输出是零均值的(以0为中心),这在某些情况下能使后续层的计算更稳定。从图像上看,在 x=0x=0 附近,Tanh 的曲线比 Sigmoid 更陡峭,意味着梯度更大。

这两种函数都是连续且处处可导的,这为后续使用梯度下降法训练网络提供了必要条件。Sigmoid 是对理想阶跃函数(超过阈值输出1,否则输出0)的平滑近似;Tanh 则是对输出±1的符号函数的平滑近似。阶跃/符号函数不可导,无法直接用于基于梯度的优化。

一个重要的数学技巧:在后续推导反向传播算法时,我们会发现 Sigmoid 和 Tanh 函数的导数可以用其函数值本身简洁地表示:

  • Sigmoid: 若 y=σ(x)y = \sigma(x),则 σ′(x)=y(1−y)\sigma'(x) = y(1-y)。
  • Tanh: 若 y=tanh⁡(x)y = \tanh(x),则 tanh⁡′(x)=1−y2\tanh'(x) = 1 - y^2。

这种表示在计算时非常方便,因为我们在前向传播时已经计算出了 yy,反向传播时直接拿 yy 做乘减即可,无需再为求导而重新计算复杂的原始表达式。它本质上是把“对输入求导”转换成了“对已算出的输出做算术”。

从单点到网络:层的威力

单个神经元的能力是有限的,它只能完成简单的线性分类(如用一条直线分割二维平面)。真正的力量来自于将大量神经元按照层次结构组织起来,形成人工神经网络。

一个典型的浅层神经网络包含三层:

  1. 输入层:负责接收原始数据。该层的节点数通常等于输入特征的维度。
  2. 隐藏层:位于输入和输出之间,是网络进行特征提取和变换的核心。之所以叫“隐藏层”,是因为它的输出不直接作为最终结果对外呈现。
  3. 输出层:产生网络的最终预测结果。节点数取决于任务类型(如二分类、多分类、回归)。

在传统的前馈神经网络中,层与层之间的神经元是全连接的,即某一层的每个神经元都与下一层的所有神经元相连。信息严格地单向流动:从输入层开始,逐层传递,直到输出层。网络中没有任何反馈或层内连接,因此整个网络结构可以用一个有向无环图来表示。

“层”在做什么?一个通俗的类比

我们可以用一个化学合成的类比来理解“层”的功能。

假设输入层是两个“原子”:碳原子 [C] 和氧原子 [O]。 第一层(隐藏层)有3个神经元,每个神经元就像是一个“化学反应器”,它按照不同的配方(权重)将输入的原子组合起来。

  • 配方1(权重 [1, 2]):1个C + 2个O → 二氧化碳(CO₂)。
  • 配方2(权重 [0, 3]):0个C + 3个O → 臭氧(O₃)。
  • 配方3(权重 [1, 1]):1个C + 1个O → 一氧化碳(CO)。

这样,第一层输出了三种新的“分子”(特征):CO₂, O₃, CO。这些分子比原始的原子包含了更丰富、更结构化的信息。

如果再增加一层,就可以将这些“分子”作为输入,进一步组合成更复杂的“有机化合物”(更高阶的特征)。例如,将 CO 与 O₃ 进一步组合,可以再得到 CO₂ 等更复杂的组合关系(这里只借用化学反应的“组合”意象,不追求真实的化学配平)。

因此,神经网络中的每一层,本质上都是在进行特征的提取与重组。 较低层提取局部、基础的特征(如边缘、角点),较高层则将这些基础特征组合成全局、抽象的特征(如物体部件、整体形状)。隐藏层的节点数,就代表了这一层准备提取多少种不同的新特征。

浅层网络的局限

在深度学习兴起之前,传统的神经网络通常是“浅层”的,一般只有3到5层。当时的普遍观点认为,更多的隐藏层并不会带来性能提升,反而会使模型难以训练。其根本原因在于:

  1. 梯度消失/爆炸:使用 Sigmoid 或 Tanh 这类激活函数时,在误差反向传播的过程中,梯度需要逐层连乘。当网络较深时,梯度值会指数级地减小(消失)或增大(爆炸),导致底层的权重几乎得不到有效的更新。
  2. 优化困难:对于复杂的非凸优化问题,传统的随机梯度下降算法在深网络上容易陷入局部最优解。

正是这些挑战,在很长一段时间内限制了神经网络的发展,直到一系列关键技术的出现(如ReLU激活函数、残差连接、更好的优化器等),才使得训练成百上千层的“深度”神经网络成为可能,从而引爆了深度学习革命。

前馈神经网络:经典架构

前馈神经网络是我们目前讨论的这类网络的正式名称。其核心特点总结如下:

  • 单向性:信息从输入层流向输出层,没有反向或侧向的连接。
  • 分层结构:网络由清晰的层构成,同一层内的神经元之间没有连接。
  • 全连接:相邻层之间的神经元两两相连(目前我们讨论的是这种形式,后续会看到卷积神经网络打破了这一规则)。

这种结构虽然简单,但它是理解更复杂网络(如卷积神经网络、循环神经网络)的基础。它的训练依赖于误差反向传播算法和梯度下降优化,这将是我们在下一节重点攻克的内容。

📝 动手练一练

  1. 概念辨析:生物神经元与人工神经元在哪些关键机制上是对应的?人工神经元做了哪些重要的简化?

    👉 点击查看参考答案
    • 对应机制:
      • 树突接收信号 → 人工神经元的输入端口。
      • 细胞体整合信号并判断是否超过阈值 → 人工神经元的加权求和 ∑wixi\sum w_i x_i 与加上偏置 bb 的操作。
      • 轴突输出信号 → 人工神经元的输出。
    • 重要简化:
      • 忽略了生物神经元复杂的时空整合特性(如脉冲频率编码、不应期等),简化为瞬时、连续的数值计算。
      • 用连续可导的激活函数(如Sigmoid)替代了生物神经元离散的“全或无”的阶跃响应,以便于使用基于梯度的优化方法。
      • 忽略了突触可塑性中复杂的生物化学过程,简化为一个静态的权重值 wiw_i,该值通过训练算法(如反向传播)进行调整。
  2. 手算练习:假设一个神经元有3个输入 x=[0.5,−1.2,0.8]x = [0.5, -1.2, 0.8],对应的权重 w=[0.1,−0.5,0.3]w = [0.1, -0.5, 0.3],偏置 b=0.2b = 0.2,激活函数使用 Sigmoid。 a) 计算该神经元的加权和 z=∑i=13wixi+bz = \sum_{i=1}^{3} w_i x_i + b。 b) 计算该神经元的最终输出 y=σ(z)y = \sigma(z)。 c) 根据导数公式 σ′(z)=y(1−y)\sigma'(z) = y(1-y),计算在 zz 处的梯度值。

    👉 点击查看参考答案

    a) 计算加权和 zz: z=(0.1×0.5)+(−0.5×−1.2)+(0.3×0.8)+0.2=0.05+0.6+0.24+0.2=1.09\begin{aligned} z &= (0.1 \times 0.5) + (-0.5 \times -1.2) + (0.3 \times 0.8) + 0.2 \\ &= 0.05 + 0.6 + 0.24 + 0.2 \\ &= 1.09 \end{aligned}

    b) 计算 Sigmoid 输出 yy: y=σ(1.09)=11+e−1.09≈11+0.3365≈11.3365≈0.748y = \sigma(1.09) = \frac{1}{1 + e^{-1.09}} \approx \frac{1}{1 + 0.3365} \approx \frac{1}{1.3365} \approx 0.748

    c) 计算梯度 σ′(z)\sigma'(z): σ′(1.09)≈y(1−y)=0.748×(1−0.748)=0.748×0.252≈0.188\sigma'(1.09) \approx y(1-y) = 0.748 \times (1 - 0.748) = 0.748 \times 0.252 \approx 0.188

本章小结

本节我们建立了对人工神经网络的基础认知。我们从仿生学的起源讲起,理解了单个神经元如何通过加权求和、偏置和激活函数来模拟生物神经元的“阈值激发”机制。我们认识了经典的Sigmoid和Tanh激活函数,以及它们可导的特性对于网络训练的重要性。

更重要的是,我们看到了如何将简单的神经元单元,通过分层、全连接的方式组织成前馈神经网络。每一层都像一个特征加工厂,将底层的简单特征组合成更高层、更抽象的特征,最终完成复杂的输入-输出映射任务。虽然传统的浅层网络存在梯度消失等训练难题,但它奠定了所有深度学习模型的基本架构思想。

需要说明的是,今天主流深度网络早已改用 ReLU 等分段线性激活函数,Sigmoid、Tanh 更多出现在输出层(如二分类概率)或门控结构中。本节讲的 Sigmoid/Tanh 是理解“激活函数为什么必须非线性”“梯度为什么会消失”的最佳起点,这套语言在今天的模型里依然通用。

📋 行动清单

  • 默写人工神经元的数学公式,并解释其中每一项的物理意义。
  • 画出Sigmoid和Tanh函数的草图,并说出它们将输入映射到了哪个区间。
  • 用你自己的话,向朋友解释为什么神经网络需要很多层,以及“层”到底在做什么。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第5章《神经网络与BP算法》配套课件(PDF)
    PDF · 2.1MB · 原课教辅
    下载
  • 第5章《神经网络与BP算法》配套代码包
    ZIP · 0.2MB · 原课教辅
    下载