什么是神经网络
神经网络(Neural Network) 是一种模拟生物神经系统工作方式的计算模型,是机器学习和深度学习的核心组成部分。它的设计灵感来源于人脑中神经元之间的连接和信息传递方式。神经网络通过模拟这种结构,能够从数据中学习复杂的模式和关系,并用于解决各种任务,如分类、回归、生成等。
神经网络的一些基本概念
神经网络的基本组成
神经网络由多个层(layers)组成,每一层包含多个神经元(neurons),神经元之间通过**权重(weights)和偏置(biases)**连接。以下是神经网络的核心组件:
神经元(Neuron)
- 神经元是神经网络的基本单元,模拟生物神经元的工作方式。
- 每个神经元接收来自其他神经元的输入,对这些输入进行加权求和,然后通过一个激活函数(Activation Function)生成输出。
数学表达式:
其中:
是输入,
是权重,
是偏置,
是激活函数(如 Sigmoid、ReLU 等)。
层(Layer)
- 输入层(Input Layer):接收原始数据(如图像像素、文本向量等)。
- 隐藏层(Hidden Layer):通过非线性变换提取数据的特征。一个神经网络可以有多个隐藏层。
- 输出层(Output Layer):生成最终的预测结果(如分类概率、回归值等)。
权重和偏置(Weights and Biases)
- 权重(Weights):连接神经元之间的参数,决定输入对输出的影响程度。
- 偏置(Biases):为每个神经元添加一个额外的参数,用于调整输出的偏移。
激活函数(Activation Function)
- 激活函数引入非线性,使神经网络能够学习复杂的模式。
- 常见的激活函数包括:
-
- Sigmoid:将输入映射到 (0, 1) 区间。
- ReLU(Rectified Linear Unit):
,是目前最常用的激活函数。
- Tanh:将输入映射到 (-1, 1) 区间。
- Softmax:用于多分类任务的输出层,将输入转换为概率分布。
什么是感知机
感知机是由 Frank Rosenblatt 在 1957 年提出的一种二分类模型,是神经网络的最早形式之一。它的结构非常简单,可以看作是一个单层的神经网络。
下面我们来看一个感知机的示例(最简单的神经网络),在一个区块中有蓝橙两种颗粒,让感知机分别识别出其中的橙色和蓝色(简单的二分类)。
实验中的要素的一些解释:
数据点的颜色(蓝色和橙色)
- 含义:表示数据点的真实类别(标签)。
- 蓝色点:属于类别 A。
- 橙色点:属于类别 B。
- 分布:当前数据集是“圆形分布”(
dataset=circle
),因此数据点会围绕中心形成内外两个环形区域(内圈和外圈),不同颜色代表不同类别。背景区块的颜色(渐变区域)
- 含义:表示模型对输入空间的分类预测结果。
- 蓝色区域:模型预测该区域属于类别 A。
- 橙色区域:模型预测该区域属于类别 B。
- 分界线:颜色过渡的交界处是模型的“决策边界”。边界越清晰,说明模型对分类结果越自信;边界模糊则表示模型对某些区域的分类存在不确定性。
示例说明:其中蓝色的点和黄色的点代表其真实的颜色,正方形区域的背景色是预测的颜色,上图是初始化状态即模型还没开始预测的状态。
上图是预测后的状态,可以看到正方形的区域已经有了蓝色背景和橙色背景(效果不是很好,蓝色和橙色并没有完全的区分开),目前只有一层神经网络和一个神经元,我们尝试再增加几个神经元试试。
可以看到加了2个神经元后,橙色和蓝色的区分效果变的更好一点了(正方形区域的左侧又有一块被识别出是橙色),我们尝试再增加几层神经网络试试效果。
加了一层神经网络后,效果还是不是特别理想,我们发现模型在预测的时候,预测的区块总是竖装的去划分,可以看到我们喂的FEATURES是竖装的橙蓝亮色,我们尝试去喂更多结构的特征试试。
可以看到再加了一个新的特征输入后,模型的预测结果准确度有了明显的提升,最后我们再看看把所有的示例特征都输入看看:
完美!
什么是激活函数
激活函数的核心作用
引入非线性
- 神经网络若无激活函数,多层叠加仍等效于单层线性变换,无法拟合复杂非线性关系。
控制输出范围
- 将神经元输出限制在特定区间(如Sigmoid输出0~1,Tanh输出-1~1),避免数值爆炸。
决策阈值化
- 模拟生物神经元的“触发”机制(如ReLU过滤负值,Softmax生成概率分布)。
常用激活函数对比
以下为6种常用激活函数的特性总结:
激活函数 | 公式 | 输出范围 | 优点 | 缺点 | 适用场景 |
Sigmoid | (0, 1) | 输出平滑,适合概率解释 | 梯度消失(两端饱和)、计算成本高 | 二分类输出层、门控单元(LSTM) | |
Tanh | (-1, 1) | 中心对称,梯度更强 | 梯度消失(同Sigmoid) | 隐藏层、RNN | |
ReLU | [0, +∞) | 计算高效,缓解梯度消失 | Dead ReLU(负输入无梯度) | 隐藏层(CNN、MLP主流选择) | |
Leaky ReLU | (-∞, +∞) | 解决Dead ReLU问题 | 需调参α,效果依赖实现 | 隐藏层(ReLU改进版) | |
Softmax | (0,1)且和为1 | 输出概率分布,天然多分类适配 | 仅用于输出层,数值不稳定需优化 | 多分类输出层 | |
Swish | (-∞, +∞) | 平滑非单调,实验性能优于ReLU | 计算成本略高 | 替代ReLU的隐藏层 |
激活函数特性详解
1. Sigmoid与Tanh的梯度问题
- 梯度消失:当输入绝对值较大时,导数趋近于0(如Sigmoid导数最大仅0.25),反向传播时梯度逐层衰减,导致深层网络难以训练。
- 解决方案:深层网络中优先使用ReLU及其变体。
2. ReLU家族的核心优势
- 稀疏激活:约50%神经元在训练中被抑制(输出为0),减少参数依赖,增强泛化能力。
- 梯度保持:正区间导数为1,避免梯度衰减,加速收敛。
3. Softmax的特殊性
- 归一化竞争:通过指数放大差异,使最大值的概率显著高于其他类别,适合互斥分类任务。
- 数值稳定性:实现时需减去最大值(xi=xi−max(x)xi=xi−max(x))防止指数爆炸。
激活函数选择指南
网络层 | 推荐激活函数 | 原因 |
隐藏层 | ReLU / Leaky ReLU / Swish | 计算高效,缓解梯度消失,适合深层网络 |
二分类输出层 | Sigmoid | 输出0~1概率值,天然适配二分类决策 |
多分类输出层 | Softmax | 输出概率分布,总和为1,适配互斥分类 |
回归任务输出层 | 线性(无激活) | 直接输出连续值,无需限制范围 |
RNN/LSTM | Tanh / Sigmoid | Tanh用于状态更新(中心化),Sigmoid用于门控(0~1开关) |
激活函数实例
还是之前的二分类的例子,ReLU函数
Tanh函数
Sigmoid函数
附录
实验地址来源:A Neural Network Playground (大家感兴趣的可以直接上去做实验)