4、深度学习基础(上):感知机与多层感知机(MLP)、激活函数、损失函数

各位同学,欢迎来到深度学习降噪课程的理论基石部分。今天我们要聊的,是深度学习大厦最底层的砖块——感知机、多层感知机,以及那些让网络“活”起来的激活函数和“评判标准”损失函数。

说实话,很多做音频的人一上来就扎进各种花哨的网络结构里,结果调参调到怀疑人生。我个人习惯是,先把这些最基础的东西吃透。你想想看,如果连砖块的性质都不了解,怎么能盖好摩天大楼呢?

深度学习基础(上)知识体系 感知机 (Perceptron) 多层感知机 (MLP) / 前馈神经网络 激活函数 损失函数 训练算法 (反向传播) Sigmoid Tanh ReLU MSE (均方误差) MAE (平均误差) 核心逻辑:从单层感知机的线性分类 → MLP的非线性拟合 激活函数引入非线性,损失函数提供优化目标,反向传播更新权重

4.1 感知机:一切开始的地方

感知机是1957年由Frank Rosenblatt提出的。说白了,它就是模仿生物神经元的一个简化数学模型。输入信号乘以权重,加上偏置,然后通过一个阶跃函数输出结果。

数学上,一个感知机可以表示为:

output = step( w1*x1 + w2*x2 + ... + wn*xn + b )

其中 step 函数通常是:如果输入大于0,输出1;否则输出0。

我在项目中遇到过一位同事,试图用单层感知机做音频事件检测,结果效果很差。为什么?因为感知机只能解决线性可分问题。像异或(XOR)这种简单的非线性问题,单层感知机就无能为力了。这是它的致命伤。

注意: 单层感知机只能处理线性可分的数据。如果你的数据分布像“螺旋线”或者“环形”,单层感知机基本没戏。这也是为什么我们需要多层感知机。

4.2 多层感知机(MLP):打破线性枷锁

多层感知机,也叫前馈神经网络,就是在输入层和输出层之间,加入了若干“隐藏层”。每一层都由多个神经元组成,层与层之间全连接。

MLP 的核心能力在于:通过多层非线性变换,它可以逼近任意复杂的函数。这就是所谓的“万能逼近定理”。

一个典型的 MLP 结构如下:

输入层 (n个特征) → 隐藏层1 (m个神经元) → 隐藏层2 (k个神经元) → 输出层 (p个输出)

每一层的计算可以写成:

z = W * a_prev + b
a = activation(z)

其中 W 是权重矩阵,b 是偏置向量,activation 是激活函数。

我记得刚开始做语音降噪时,用的就是一个3层的MLP。输入是带噪语音的频谱特征,输出是干净语音的频谱估计。虽然效果不如现在的Transformer,但在当时已经是很大的突破了。

经验之谈: 隐藏层的数量和每层的神经元数量是超参数。我个人习惯从2-3层开始尝试,每层128-256个神经元。对于音频降噪任务,层数太深反而容易过拟合,尤其是数据量不大的时候。

4.3 激活函数:给网络注入灵魂

如果没有激活函数,多层线性变换叠加起来还是线性变换。那MLP和单层感知机就没区别了。激活函数的作用,就是引入非线性。

下面我们聊聊三种最经典的激活函数。

4.3.1 Sigmoid 函数

Sigmoid 将输入映射到 (0, 1) 区间,公式是:

σ(x) = 1 / (1 + exp(-x))

它的优点是输出可以解释为概率。但缺点也很明显:

  • 梯度饱和: 当输入很大或很小时,梯度接近于0,导致梯度消失,网络几乎学不动。
  • 输出非零中心: 输出恒为正,这会导致下一层神经元的输入全部为正,影响梯度更新效率。

我曾经在早期的降噪模型里用过Sigmoid,训练到后面loss几乎不动了。后来换成ReLU,收敛速度快了好几倍。

4.3.2 Tanh 函数

Tanh 是 Sigmoid 的改进版,输出范围是 (-1, 1),公式是:

tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))

它解决了输出非零中心的问题,但梯度饱和问题依然存在。在RNN和LSTM中,Tanh 仍然很常用,但在前馈网络中,ReLU 已经成了主流。

4.3.3 ReLU 函数

ReLU(Rectified Linear Unit)是目前最常用的激活函数,公式简单到令人发指:

ReLU(x) = max(0, x)

它的优点是:

  • 计算简单: 就是取最大值,没有指数运算。
  • 缓解梯度消失: 在正区间梯度恒为1,不会饱和。
  • 稀疏激活: 一部分神经元输出为0,增加了网络的稀疏性。

但 ReLU 也有个问题——神经元“死亡”。如果某个神经元的输入一直为负,它的梯度就是0,权重再也无法更新。我在做音频降噪时遇到过这种情况,后来用 Leaky ReLU 或者 PReLU 解决了。

总结一下:
激活函数 输出范围 优点 缺点
Sigmoid (0, 1) 可解释为概率 梯度饱和,非零中心
Tanh (-1, 1) 零中心输出 梯度饱和
ReLU [0, +∞) 计算快,缓解梯度消失 神经元死亡

4.4 损失函数:衡量预测的好坏

损失函数量化了模型预测值与真实值之间的差距。训练的过程,就是最小化这个损失函数。

在音频降噪任务中,我们最常用的是以下两种。

4.4.1 均方误差(MSE)

MSE 计算预测值与真实值之差的平方的平均值:

MSE = (1/n) * Σ(y_true - y_pred)²

它的特点是:

  • 对大误差惩罚更重: 因为误差被平方了。
  • 数学性质好: 处处可导,优化方便。
  • 对异常值敏感: 一个离群点就可能把loss拉得很高。

我在做语音增强时,MSE 是最常用的损失函数。但它有个问题——MSE 最小化并不直接等于感知上的音质最好。有时候 MSE 很低,但听起来还是有明显的背景噪声。

4.4.2 平均误差(MAE)

MAE 计算预测值与真实值之差的值的平均值:

MAE = (1/n) * Σ|y_true - y_pred|

它的特点是:

  • 对异常值更鲁棒: 不像 MSE 那样被平方放大。
  • 梯度恒定: 在误差不为0时,梯度始终是 ±1,不会像 MSE 那样梯度随误差减小而变小。

但 MAE 在误差接近0时梯度不连续,这会影响优化效率。在实际项目中,我经常把 MSE 和 MAE 结合起来用,比如在训练初期用 MSE 快速收敛,后期用 MAE 微调。

对比一下:
特性 MSE MAE
对异常值敏感度 高 低
梯度特性 随误差减小而减小 恒定(除0点外)
收敛速度 初期快,后期慢 全程较稳定
音频降噪适用性 常用,但需配合其他指标 对突发噪声更鲁棒

4.5 反向传播:让网络学会“纠错”

有了损失函数,我们怎么更新网络的权重呢?答案就是反向传播算法。

核心思想很简单:计算损失函数对每个权重的梯度,然后沿着梯度下降的方向更新权重。用链式法则从输出层一层一层往回传。

更新公式:

w_new = w_old - learning_rate * ∂L/∂w

其中 learning_rate 是学习率,控制每次更新的步长。

我曾经犯过一个错误:学习率设得太大,结果loss直接炸了,变成了NaN。后来我学乖了,一般从 0.001 开始试,配合学习率衰减策略。

避坑指南: 学习率是训练中最敏感的超参数之一。我建议你使用学习率调度器,比如 StepLR 或 ReduceLROnPlateau,让学习率在训练过程中自适应调整。

好了,这一章的内容就到这里。感知机、MLP、激活函数、损失函数,这些是深度学习最基础的组件。别看它们简单,但理解透彻了,后面学CNN、RNN、Transformer都会轻松很多。