激活函数就是给神经网络 **“注入灵魂”** 的东西,让网络能学会复杂的模式。
- 让网络变 “聪明”:没有激活函数,不管多少层线性层(
nn.Linear),都只能做简单的 “数字变形”(线性变换),学不会复杂规律(比如区分猫和狗)。激活函数加了非线性,让网络能捕捉复杂关系(像曲线、分类边界)。
- 控制输出范围:比如
Sigmoid 把输出压到 0~1,能当概率用;ReLU 让负数直接变 0,简化计算还能避免 “梯度消失”(训练时学不动的问题)。
- 传递有效信号:像
ReLU 保留正数、干掉负数,让有用的信号往前传,没用的直接 “掐断”,让训练更高效。
nn.Linear 负责 **“数字变形”(y = x×权重 + 偏置 ),但变形后的结果是“呆板” 的线性输出 **,学不会复杂模式。
激活函数要 **“接在 nn.Linear 后面”,给线性输出 “加把火”,让它变成“灵活” 的非线性结果 **,这样网络才能学习复杂任务(比如图像分类、预测天气)。
举个栗子:
- 线性层
nn.Linear 像 “把食材切好”(数字变形),激活函数像 “下锅炒”(加非线性,让菜有味道)。没激活函数,“炒出来的菜” 永远是生的(只能学线性关系);加了激活函数,才能 “炒出好菜”(学会复杂规律)。
代码里的常见搭配:
这样,线性层的输出会先经过 nn.Linear 变形,再被激活函数 “激活”,变得更有 “表达力”~