1. 神经网络基础:从生物神经元到人工神经元
在深度学习的领域中,神经网络是最核心的构建模块。要理解多层神经网络,我们必须先从最基本的单元——神经元开始。人工神经元的设计灵感来源于我们大脑中的生物神经元工作机制。
生物神经元通过树突接收来自其他神经元的信号,这些信号在细胞体内进行整合处理,当信号强度超过某个阈值时,神经元会通过轴突将电信号传递给其他神经元。人工神经元模拟了这一过程:
- 输入信号:相当于生物神经元的树突接收,每个输入x代表一个特征或前一层神经元的输出
- 权重:模拟突触的连接强度,决定每个输入对神经元激活的影响程度
- 偏置:相当于神经元的激活阈值,控制神经元激活的难易程度
- 激活函数:模拟生物神经元的"全有或全无"响应特性,引入非线性变换
关键理解:单个神经元实际上就是一个带非线性变换的线性分类器。多个这样的神经元组合起来,就能形成强大的非线性分类能力。
1.1 神经元的数学表达
一个典型的人工神经元可以用以下数学公式表示:
code复制输出 = 激活函数(权重·输入 + 偏置)
或者用向量形式表示:
code复制y = f(w·x + b)
其中:
- w是权重向量
- x是输入向量
- b是偏置项
- f是激活函数
这个简单的公式构成了所有神经网络的基础。在实际编程实现中,我们通常使用矩阵运算来高效处理大量神经元的同时计算。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 激活函数:神经网络非线性的关键
2.1 为什么需要激活函数
如果不使用激活函数,无论神经网络有多少层,最终都等价于一个线性变换。这可以通过简单的数学推导证明:
假设我们有一个两层网络:
code复制第一层:z1 = W1·x + b1
第二层:z2 = W2·z1 + b2 = W2(W1·x + b1) + b2 = (W2W1)x + (W2b1 + b2)
可以看到,最终仍然是一个线性变换。激活函数的引入打破了这种线性关系,使神经网络能够逼近任意复杂的函数。
2.2 常用激活函数比较
| 激活函数 | 公式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| Sigmoid | 1/(1+e^-x) | 输出在(0,1),适合概率输出 | 容易梯度消失,输出非零中心 | 二分类输出层 |
| Tanh | (e^x-e^-x)/(e^x+e^-x) | 输出在(-1,1),零中心 | 同样有梯度消失问题 | 隐藏层 |
| ReLU | max(0,x) | 计算简单,缓解梯度消失 | 负区间"死亡"问题 | 最常用的隐藏层激活 |
| Leaky ReLU | max(αx,x) α≈0.01 | 解决ReLU死亡问题 | 需要调参 | 替代ReLU |
| S |
