查看全课大纲(第 26 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
人工神经网络的架构
小象实战讲义 · 基于深度学习的计算机视觉
从本节开始,我们将正式迈入深度学习的大门。在之前的课程中,我们学习了如何用传统的图像处理技术(如SIFT、HOG等)来提取特征并解决问题。然而,现代计算机视觉的绝大多数突破,无论是图像分类、目标检测还是图像分割,都建立在深度学习的基础之上。而深度学习的理论基石,正是人工神经网络。本节我们将从最基础的神经元模型讲起,剖析神经网络的核心架构和工作原理,理解这个看似复杂的“黑盒”是如何通过简单的单元组合,实现强大的信息映射能力的。
💡 核心导读
- 神经网络是什么:大量结构简单、功能接近的神经元,按照特定架构连接成的网状结构,旨在模拟大脑的工作方式。
- 神经元的核心机制:接收多个输入,进行加权求和,再通过一个非线性激活函数(如Sigmoid、Tanh)产生输出,模拟生物神经元的“阈值激发”特性。
- 从神经元到网络:单个神经元能力有限,但将大量神经元分层组织成前馈网络,就能逐层提取和组合特征,实现从输入到输出的复杂映射。
- 前馈网络的特点:信息单向流动,从输入层经隐藏层到输出层,构成一个有向无环图,是后续深度学习模型的基础架构。
从生物神经元到人工模型
要理解人工神经网络,不妨先看看它的灵感来源——我们大脑中的生物神经元。
一个典型的生物神经元主要由三部分构成:
- 树突:负责接收来自其他神经元的信号(刺激)。
- 细胞体:对接收到的信号进行整合处理。
- 轴突:将处理后的信号(电脉冲)传递给其他神经元。
信息传递的过程是:树突接收刺激,在细胞体处进行累积,当累积的刺激超过某个阈值时,神经元被“激活”,通过轴突向外输出一个信号;否则,神经元保持静默。
人工神经元正是对这一生物过程的高度简化与数学抽象。它只保留了最核心的三个部分:模拟树突的输入与权重连接、模拟细胞体整合功能的求和与阈值判断、以及模拟轴突传递的输出。其他复杂的生物细节(如离子通道、突触可塑性等)在最初的模型中被忽略,以构建一个可计算的数学单元。
人工神经元:构建智能的基石
人工神经元是神经网络的基本组成单元,其早期最著名的具体实现是感知机(Perceptron)。它的数学模型清晰而优美:
一个神经元接收 个输入 ,每个输入对应一个权重 。神经元的输出 由以下公式决定:
让我们拆解这个公式的每个部分:
- 加权求和:。这模拟了树突接收不同强度刺激的过程。权重 代表了第 个输入连接的重要性,正权重表示兴奋性连接,负权重表示抑制性连接。
- 偏置:。这是一个常数项,起的是生物神经元阈值的作用。若把阈值记为 ,则“加权和超过阈值才激活”可写作 ,移项后为 ;令 ,就得到公式中“加 ”的形式。这样写只是为了让偏置能和权重一起被优化。
- 激活函数:。这是一个非线性函数,是神经元具备非线性表达能力的关键。它决定了最终输出的形式。
这里需要特别强调:神经网络的输入和输出都是数字。无论是图像像素、文本向量还是传感器读数,都必须转化为数值形式,才能输入网络进行计算。
激活函数:引入非线性的魔法
为什么需要非线性激活函数?如果只有线性变换(加权求和),那么无论叠加多少层,整个网络的表达能力依然等价于一个单层线性模型,无法学习复杂模式。激活函数引入了非线性,使得神经网络能够拟合任意复杂的函数。
早期神经网络最常用的两种激活函数是 Sigmoid 和 Tanh。
Sigmoid 函数 它将输入 (范围 )“挤压”到 区间。其形状呈“S”型,在 附近变化显著,而当 很大时,曲线趋于平坦,梯度接近于0。这个函数很好地模拟了生物神经元的“激活”(接近1)与“抑制”(接近0)状态。
Tanh 函数 它是双曲正切函数,将输入映射到 区间。与 Sigmoid 相比,Tanh 函数的输出是零均值的(以0为中心),这在某些情况下能使后续层的计算更稳定。从图像上看,在 附近,Tanh 的曲线比 Sigmoid 更陡峭,意味着梯度更大。
这两种函数都是连续且处处可导的,这为后续使用梯度下降法训练网络提供了必要条件。Sigmoid 是对理想阶跃函数(超过阈值输出1,否则输出0)的平滑近似;Tanh 则是对输出±1的符号函数的平滑近似。阶跃/符号函数不可导,无法直接用于基于梯度的优化。
一个重要的数学技巧:在后续推导反向传播算法时,我们会发现 Sigmoid 和 Tanh 函数的导数可以用其函数值本身简洁地表示:
- Sigmoid: 若 ,则 。
- Tanh: 若 ,则 。
这种表示在计算时非常方便,因为我们在前向传播时已经计算出了 ,反向传播时直接拿 做乘减即可,无需再为求导而重新计算复杂的原始表达式。它本质上是把“对输入求导”转换成了“对已算出的输出做算术”。
从单点到网络:层的威力
单个神经元的能力是有限的,它只能完成简单的线性分类(如用一条直线分割二维平面)。真正的力量来自于将大量神经元按照层次结构组织起来,形成人工神经网络。
一个典型的浅层神经网络包含三层:
- 输入层:负责接收原始数据。该层的节点数通常等于输入特征的维度。
- 隐藏层:位于输入和输出之间,是网络进行特征提取和变换的核心。之所以叫“隐藏层”,是因为它的输出不直接作为最终结果对外呈现。
- 输出层:产生网络的最终预测结果。节点数取决于任务类型(如二分类、多分类、回归)。
在传统的前馈神经网络中,层与层之间的神经元是全连接的,即某一层的每个神经元都与下一层的所有神经元相连。信息严格地单向流动:从输入层开始,逐层传递,直到输出层。网络中没有任何反馈或层内连接,因此整个网络结构可以用一个有向无环图来表示。
“层”在做什么?一个通俗的类比
我们可以用一个化学合成的类比来理解“层”的功能。
假设输入层是两个“原子”:碳原子 [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层。当时的普遍观点认为,更多的隐藏层并不会带来性能提升,反而会使模型难以训练。其根本原因在于:
- 梯度消失/爆炸:使用 Sigmoid 或 Tanh 这类激活函数时,在误差反向传播的过程中,梯度需要逐层连乘。当网络较深时,梯度值会指数级地减小(消失)或增大(爆炸),导致底层的权重几乎得不到有效的更新。
- 优化困难:对于复杂的非凸优化问题,传统的随机梯度下降算法在深网络上容易陷入局部最优解。
正是这些挑战,在很长一段时间内限制了神经网络的发展,直到一系列关键技术的出现(如ReLU激活函数、残差连接、更好的优化器等),才使得训练成百上千层的“深度”神经网络成为可能,从而引爆了深度学习革命。
前馈神经网络:经典架构
前馈神经网络是我们目前讨论的这类网络的正式名称。其核心特点总结如下:
- 单向性:信息从输入层流向输出层,没有反向或侧向的连接。
- 分层结构:网络由清晰的层构成,同一层内的神经元之间没有连接。
- 全连接:相邻层之间的神经元两两相连(目前我们讨论的是这种形式,后续会看到卷积神经网络打破了这一规则)。
这种结构虽然简单,但它是理解更复杂网络(如卷积神经网络、循环神经网络)的基础。它的训练依赖于误差反向传播算法和梯度下降优化,这将是我们在下一节重点攻克的内容。
📝 动手练一练
概念辨析:生物神经元与人工神经元在哪些关键机制上是对应的?人工神经元做了哪些重要的简化?
👉 点击查看参考答案
- 对应机制:
- 树突接收信号 → 人工神经元的输入端口。
- 细胞体整合信号并判断是否超过阈值 → 人工神经元的加权求和 与加上偏置 的操作。
- 轴突输出信号 → 人工神经元的输出。
- 重要简化:
- 忽略了生物神经元复杂的时空整合特性(如脉冲频率编码、不应期等),简化为瞬时、连续的数值计算。
- 用连续可导的激活函数(如Sigmoid)替代了生物神经元离散的“全或无”的阶跃响应,以便于使用基于梯度的优化方法。
- 忽略了突触可塑性中复杂的生物化学过程,简化为一个静态的权重值 ,该值通过训练算法(如反向传播)进行调整。
- 对应机制:
手算练习:假设一个神经元有3个输入 ,对应的权重 ,偏置 ,激活函数使用 Sigmoid。 a) 计算该神经元的加权和 。 b) 计算该神经元的最终输出 。 c) 根据导数公式 ,计算在 处的梯度值。
👉 点击查看参考答案
a) 计算加权和 :
b) 计算 Sigmoid 输出 :
c) 计算梯度 :
本章小结
本节我们建立了对人工神经网络的基础认知。我们从仿生学的起源讲起,理解了单个神经元如何通过加权求和、偏置和激活函数来模拟生物神经元的“阈值激发”机制。我们认识了经典的Sigmoid和Tanh激活函数,以及它们可导的特性对于网络训练的重要性。
更重要的是,我们看到了如何将简单的神经元单元,通过分层、全连接的方式组织成前馈神经网络。每一层都像一个特征加工厂,将底层的简单特征组合成更高层、更抽象的特征,最终完成复杂的输入-输出映射任务。虽然传统的浅层网络存在梯度消失等训练难题,但它奠定了所有深度学习模型的基本架构思想。
需要说明的是,今天主流深度网络早已改用 ReLU 等分段线性激活函数,Sigmoid、Tanh 更多出现在输出层(如二分类概率)或门控结构中。本节讲的 Sigmoid/Tanh 是理解“激活函数为什么必须非线性”“梯度为什么会消失”的最佳起点,这套语言在今天的模型里依然通用。
📋 行动清单
- 默写人工神经元的数学公式,并解释其中每一项的物理意义。
- 画出Sigmoid和Tanh函数的草图,并说出它们将输入映射到了哪个区间。
- 用你自己的话,向朋友解释为什么神经网络需要很多层,以及“层”到底在做什么。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。