3、深度学习基础(一):感知机与多层感知机、激活函数、损失函数、梯度下降与反向传播
各位同学,欢迎来到深度学习的第一课。说实话,每次讲到这里,我都会想起自己刚入行时踩过的坑。那时候我总觉得深度学习是个黑盒子,往里扔数据就能出结果。后来才发现,不懂底层原理,连模型为什么收敛不了都搞不清楚。
今天我们要聊的内容,是整个深度学习的基石。你想想看,不管多复杂的网络,归根结底都是这些基础模块的堆叠。所以这一章,咱们把地基打牢。
3.1 感知机:最简单的神经网络
感知机是什么?说白了,它就是模仿人脑神经元的一个数学函数。输入信号经过加权求和,再通过一个激活函数,最后输出结果。
我习惯用一个例子来理解:假设你要判断一杯咖啡好不好喝。你会考虑温度、酸度、苦度这几个因素。每个因素的重要性不同,这就是权重。最后综合判断,超过某个阈值就说“好喝”,否则就是“不好喝”。感知机干的就是这个事。
数学上,感知机的输出可以写成:
y = sign(w·x + b)
其中 w 是权重向量,x 是输入,b 是偏置,sign 是阶跃函数。
核心要点:感知机只能解决线性可分问题。我在项目中遇到过用它做简单的二分类,效果还行。但一旦数据不是线性可分的,比如异或问题,感知机就彻底歇菜了。
注意:感知机的阶跃函数不可导,这意味着它没法用梯度下降来训练。这也是后来被多层感知机取代的原因之一。
3.2 多层感知机:打破线性限制
既然单个感知机搞不定非线性问题,那多堆几层行不行?答案是肯定的。多层感知机(MLP)就是在输入层和输出层之间,加了一层或多层隐藏层。
每一层的神经元都跟上一层全连接,每个连接都有权重。数据从输入层流到隐藏层,再流到输出层。这个过程叫前向传播。
我刚开始做材料性能预测时,用的就是三层MLP。输入是成分和工艺参数,输出是弹性模量。效果比传统回归好不少。但要注意,层数不是越多越好。我曾经试过堆到10层,结果过拟合得一塌糊涂。
下面这张图展示了MLP的基本结构:
3.3 激活函数:给网络注入非线性
如果没有激活函数,多层网络就等价于单层网络。为什么?因为线性变换的叠加还是线性变换。激活函数的作用,就是引入非线性。
常用的激活函数有三种,我列个表对比一下:
| 函数 | 公式 | 输出范围 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | σ(x) = 1/(1+e⁻ˣ) | (0, 1) | 平滑,适合概率输出 | 梯度消失,输出非零中心 |
| Tanh | tanh(x) = (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ) | (-1, 1) | 零中心,比Sigmoid好 | 仍有梯度消失问题 |
| ReLU | ReLU(x) = max(0, x) | [0, ∞) | 计算快,缓解梯度消失 | 神经元可能死亡 |
我个人习惯在隐藏层用ReLU,输出层根据任务选。回归任务用线性激活,二分类用Sigmoid,多分类用Softmax。
经验之谈:我在预测合金的屈服强度时,试过Sigmoid和Tanh,训练特别慢。换成ReLU后,收敛速度快了将近一倍。但要注意学习率别设太大,否则ReLU神经元容易死掉。
3.4 损失函数:衡量预测的好坏
损失函数就是用来衡量模型预测值和真实值之间的差距。训练的目标就是让这个差距最小化。
对于回归任务,最常用的是均方误差(MSE)和平均绝对误差(MAE)。
MSE = (1/n) * Σ(yᵢ - ŷᵢ)²
MAE = (1/n) * Σ|yᵢ - ŷᵢ|
MSE对异常值更敏感,因为误差被平方了。MAE则更鲁棒。我在预测材料的断裂韧性时,数据里偶尔会有异常点,用MAE比MSE稳定得多。
分类任务常用交叉熵损失。这个后面讲到分类问题时再细说。
3.5 梯度下降:找到最优参数
有了损失函数,怎么找到让损失最小的参数?梯度下降就是干这个的。
想象你站在一座山上,想走到山谷。你看一下脚下哪个方向最陡,就往那个方向迈一步。梯度下降就是这个道理。每一步都沿着梯度的反方向更新参数。
w = w - α * ∂L/∂w
其中 α 是学习率,控制步长大小。
避坑指南:我曾经把学习率设得太大,结果损失函数直接炸了,变成NaN。后来学乖了,先用0.001试试,不行再调小。另外,数据归一化也很重要,不然梯度更新会很不稳定。
梯度下降有三种变体:
- 批量梯度下降:用全部数据计算梯度,准确但慢
- 随机梯度下降:每次用一个样本,快但不稳定
- 小批量梯度下降:取折中,用一小批样本,最常用
3.6 反向传播:让误差往回传
反向传播是训练多层网络的核心算法。它的思路很简单:从输出层开始,计算每一层的误差梯度,然后逐层往回传播。
具体来说,分三步:
- 前向传播:输入数据经过各层计算,得到预测值
- 计算损失:用损失函数比较预测值和真实值
- 反向传播:用链式法则计算每个参数的梯度,然后更新
我刚开始学反向传播时,被链式法则绕晕过。后来自己手推了一遍三层网络的梯度,才算真正理解。建议大家也试试,手推一次比看十遍代码都管用。
核心思想:反向传播本质上就是链式法则的工程实现。它高效地计算了所有参数的梯度,让梯度下降能够训练深层网络。
好了,这一章的内容就到这里。感知机、多层感知机、激活函数、损失函数、梯度下降和反向传播,这些概念是深度学习的基石。后面的课程里,我们会反复用到它们。建议大家把代码也跑一跑,光看是学不会的。
公众号:蓝海资料掘金营,微信deep3321