一.神经网络
1. 全连接神经网络(Fully Connected Network, FCN)
核心概念:
- 输入层:接收原始数据(如数字、图片像素等) 数字矩阵 。
- 隐藏层:对数据进行计算和变换(可以有多个隐藏层)。
- 输出层:给出最终结果(如分类标签、预测值等)。
计算方式:
每个神经元的输出计算如下:
a=h(w⋅x+b)
- x:输入数据
- w:权重(决定输入的重要程度)
- b:偏置(调整输出的偏移)
- h:激活函数(如 ReLU、Sigmoid,让网络能学习复杂模式)
特点:
- 全连接:每一层的每个神经元都与下一层的所有神经元相连。
- 适合简单任务(如分类数字、预测房价),但处理图像等高维数据时效率较低。
2. 神经网络的训练与优化
核心目标:
找到最佳的 权重(w) 和 偏置(b),让模型的预测尽可能准确。
训练过程:
- 前向传播:输入数据经过网络计算,得到预测值 y。
- 计算误差:用 损失函数(Loss Function) 衡量预测值与真实值的差距。
- 反向传播:从输出层反向调整 w 和 b,让误差变小。
- 优化算法(如梯度下降):不断更新参数,使模型越来越准。
简单理解:
- 就像学习骑自行车,一开始会摔倒(误差大),但通过不断调整(优化参数),最终能骑得稳(预测准)。
3. 卷积神经网络(CNN)的引入
为什么需要 CNN?
全连接网络在处理图片时:
- 参数太多(一张 100x100 的图片,全连接层可能有上百万参数!)
- 计算太慢,且容易过拟合。
CNN 的核心:卷积核(Filter)
- 作用:像一个小窗口,在图片上滑动,提取局部特征(如边缘、纹理)。
- 优点:
- 参数更少(共享权重,减少计算量)。
- 保留空间信息(适合图像、视频等数据)。
典型结构:
- 卷积层(Convolution):提取特征
- 池化层(Pooling):降低数据量(如取最大值或平均值)
- 全连接层(FC):最终分类或回归
适用场景:
- 图像识别(如人脸检测、物体分类)
- 视频分析、医学影像处理等
总结对比
网络类型 | 适用场景 | 核心特点 |
---|---|---|
全连接网络(FCN) | 简单分类、回归(如房价预测) | 所有神经元相连,参数多 |
卷积网络(CNN) | 图像、视频等空间数据 | 用卷积核提取特征,参数更高效 |
为什么需要激活函数?
核心问题:
如果不用激活函数,多层神经网络会退化成“单层线性模型”。
- 例子:假设激活函数是线性的,比如 h(x)=2x,那么一个 3 层网络的计算过程是:y(x)=h(h(h(x)))=2×2×2×x=8x这其实等价于单层网络 y(x)=8x,多层网络没有发挥任何优势。
关键作用:
激活函数引入非线性,使得神经网络可以:
- 学习复杂模式(比如图像中的曲线、文本中的语义关系)。
- 解决线性模型无法处理的问题(如分类复杂数据)。
- 让深层网络真正发挥“深度”价值,而不是简单堆叠线性计算。
1. Sigmoid 激活函数
公式:
特点:
✅ 优点:
- 输出在 (0,1) 之间,适合做概率输出(比如二分类问题,判断“是猫”或“不是猫”)。
- 计算简单,早期神经网络常用。
❌ 缺点:
- 梯度消失:
- 当输入 z 很大或很小时,导数 y′ 接近 0,导致参数(w,b)几乎不更新,深层网络训练困难。
- 比如,z=10 时,y≈1,y′≈0,梯度几乎消失。
- 输出不对称:
- 输出恒为正(> 0),导致后续层的输入总是正数,影响参数优化效率。
- 训练慢:
- 梯度更新方向不稳定,优化过程耗时较长。
适用场景:二分类问题的输出层(现代神经网络隐藏层一般不用 Sigmoid)。
2. Tanh 激活函数
公式:
特点:
✅ 优点(相比 Sigmoid):
- 输出对称:
- 输出在 (-1, 1) 之间,以 0 为中心,缓解了 Sigmoid 的“恒正”问题,训练更稳定。
- 收敛更快:
- 梯度更新更合理,模型训练速度比 Sigmoid 快。
❌ 缺点:
- 梯度消失仍然存在:
- 当 ∣z∣ 很大时,导数 y′ 接近 0,深层网络依然可能训练困难。
- 非线性能力有限:
- 和 Sigmoid 类似,Tanh 仍然是“饱和型”激活函数,对复杂数据的拟合能力不如 ReLU 等现代激活函数。
适用场景:RNN、LSTM 等序列模型(隐藏层),二分类问题的输出层(替代 Sigmoid)。
对比
激活函数 | 输出范围 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
Sigmoid | (0, 1) | 适合概率输出,计算简单 | 梯度消失、训练慢、输出不对称 | 二分类输出层 |
Tanh | (-1, 1) | 输出对称,训练比 Sigmoid 快 | 仍有梯度消失问题 | RNN/LSTM 隐藏层 |
3. ReLU & Leaky ReLU 激活函数
一、ReLU(修正线性单元)
1. 公式与计算规则
- 直观理解:输入 > 0 时,直接输出原值;输入 ≤ 0 时,输出 0。反向传播时,正输入的梯度恒为 1,负输入的梯度为 0。
2. 核心优势 ✅
- 解决梯度消失:正区间的梯度恒为 1,深层网络训练时梯度能稳定传递(不像 Sigmoid/Tanh 会接近 0)。
- 计算极快:只需判断是否大于 0,没有指数、除法等复杂运算,适合大规模网络(如 CNN、Transformer)。
- 稀疏激活:负输入直接输出 0,让部分神经元“关闭”,提升模型效率。
3. 主要缺点 ❌
神经元死亡问题:
- 如果某个神经元的输入长期 ≤ 0(比如初始化不好或学习率太高),它的梯度永远是 0,参数无法更新,这个神经元就“死”了,失去作用。
- 影响:部分神经元失效,降低模型表达能力。
适用场景:
- 绝大多数深度学习模型(如 CNN、全连接网络)的隐藏层默认选择。
- 代表网络:ResNet、VGG、AlexNet 等。
二、Leaky ReLU(带泄漏的 ReLU)
1. 公式与计算规则
- 直观理解:输入 > 0 时和 ReLU 一样;输入 ≤ 0 时,输出一个很小的比例(如 0.01 倍),而不是直接归零。
2. 核心优势 ✅
解决神经元死亡:
- 负输入也有微小梯度(如 0.01),神经元不会完全“死掉”,保留了学习能力。
3. 主要缺点 ❌
- 需要调参:泄漏系数 a 是人工设定的(通常 0.01),不同任务可能需要调整。
- 训练可能不稳定:正负区间的处理方式不同,可能导致梯度更新波动。
适用场景:
- 担心 ReLU 神经元死亡的场景(如训练不稳定或深层网络)。
- 改进版:PReLU(Parametric ReLU),让 a 变成可学习的参数,自动优化。
三、对比
特性 | ReLU | Leaky ReLU |
---|---|---|
计算速度 | ⚡️ 极快(主流选择) | ⚡️ 快(稍慢于 ReLU) |
梯度消失 | ✅ 正区间无消失 | ✅ 正区间无消失 |
神经元死亡 | ❌ 可能死亡 | ✅ 缓解死亡问题 |
超参数 | 无 | 需设定泄漏系数 a |