激活函数
没有激活函数,叠加再多层网络也等于一层。激活函数就是"每层之间的折痕"——让网络能学会复杂的东西。
🤔 先搞明白:为什么需要激活函数?
想象你在做数学题。题目只有加减(线性运算),那不管你做多少步,结果永远是"一个数乘输入再加一个数"——永远是一条直线。
神经网络也一样。如果每层只是"乘权重加偏置"(线性),那 10 层和 1 层没区别——输出始终是输入的直线函数。
激活函数就是"弯折"。在每层之间加一个"弯折"(比如 ReLU:负数归零),让每一层都能把直线折一下。10 层 = 折 10 次,能折出任意复杂的形状。
一句话:没有激活函数 → 网络再深也只是直线一条。有了激活函数 → 网络能学会任何复杂的模式。
神经网络也一样。如果每层只是"乘权重加偏置"(线性),那 10 层和 1 层没区别——输出始终是输入的直线函数。
激活函数就是"弯折"。在每层之间加一个"弯折"(比如 ReLU:负数归零),让每一层都能把直线折一下。10 层 = 折 10 次,能折出任意复杂的形状。
一句话:没有激活函数 → 网络再深也只是直线一条。有了激活函数 → 网络能学会任何复杂的模式。
# 无激活:3 层网络 = 1 层线性变换
layer1(x) = 0.8x + 0.1
layer2(x) = 0.5×layer1(x) + 0.2
layer3(x) = 0.3×layer2(x) + 0.4 = 0.12x + 0.43
# 有激活:每层加一个 ReLU,到处是"弯折"
layer1(x) = ReLU(0.8x + 0.1)
layer2(x) = ReLU(0.5×layer1(x) + 0.2)
layer3(x) = 0.3×layer2(x) + 0.4 = 复杂的弯折线
layer1(x) = 0.8x + 0.1
layer2(x) = 0.5×layer1(x) + 0.2
layer3(x) = 0.3×layer2(x) + 0.4 = 0.12x + 0.43
# 有激活:每层加一个 ReLU,到处是"弯折"
layer1(x) = ReLU(0.8x + 0.1)
layer2(x) = ReLU(0.5×layer1(x) + 0.2)
layer3(x) = 0.3×layer2(x) + 0.4 = 复杂的弯折线
🔌 第一种"弯折":阶跃 → Sigmoid
感知机的阶跃函数太生硬了(0→直接跳1)。Sigmoid 是它的平滑版——输入从负到正,输出从 0 平滑过渡到 1。这样网络可以学到"渐变"而不是"突变"。
拖拽滑块,看输入变化时输出的反应:
输入 z = 0.0
→ 阶跃输出: 0
→ Sigmoid: 0.50
🔴 红线(阶跃):z 从负变正的瞬间,输出直接"跳"过去,没有中间地带。
🔵 蓝线(Sigmoid):z 平滑变化,输出也平滑变化。
Sigmoid 的平滑 = 网络可以学习"渐变"的判断。比如识别一个东西是猫的概率:80%像猫 → 90% → 95%,而不是直接从"不是猫"跳到"是猫"。
🔵 蓝线(Sigmoid):z 平滑变化,输出也平滑变化。
Sigmoid 的平滑 = 网络可以学习"渐变"的判断。比如识别一个东西是猫的概率:80%像猫 → 90% → 95%,而不是直接从"不是猫"跳到"是猫"。
🌊 Sigmoid:把任意数压缩到 0~1
Sigmoid 把任何输入(负无穷到正无穷)映射到 0~1 之间。就像把"全世界人的身高"映射到"矮~高"的百分比。
"温度"滑块:调高 = Sigmoid 变陡(趋近阶跃),调低 = 变缓。
"温度"滑块:调高 = Sigmoid 变陡(趋近阶跃),调低 = 变缓。
Sigmoid(0.0) = 0.50
温度 = 1 是标准 Sigmoid。
温度低 → 曲线更平缓(模糊)
温度高 → 曲线更陡峭(接近开关)
拖到 5 看看:它越来越像阶跃函数了!
温度低 → 曲线更平缓(模糊)
温度高 → 曲线更陡峭(接近开关)
拖到 5 看看:它越来越像阶跃函数了!
⚡ ReLU:最流行的"弯折"
ReLU(Rectified Linear Unit)是今天几乎所有神经网络的标配。负数 → 0,正数 → 原样通过。
它只在 0 这里"折"了一下——比 Sigmoid 更简单,但效果更好。因为简单,计算快;因为不饱和(正数部分斜率=1),深层网络的梯度不会消失。
它只在 0 这里"折"了一下——比 Sigmoid 更简单,但效果更好。因为简单,计算快;因为不饱和(正数部分斜率=1),深层网络的梯度不会消失。
ReLU(0.0) = 0.00
为什么 ReLU 比 Sigmoid 好用?
• 计算简单(就是 max(0, x),没有指数运算)
• 正数部分不会"饱和"(Sigmoid 两头太平,梯度容易"消失")
• 实际效果更好,几乎所有现代神经网络都用它
• 计算简单(就是 max(0, x),没有指数运算)
• 正数部分不会"饱和"(Sigmoid 两头太平,梯度容易"消失")
• 实际效果更好,几乎所有现代神经网络都用它
📊 三种"弯折"放一起
阶跃(最生硬)、Sigmoid(平滑)、ReLU(简单高效)在同一个坐标系里对比:
阶跃(感知机)
0 或 1
太生硬
Sigmoid
0~1 平滑
两头饱和
ReLU
max(0, x)
今日主流
🧱 动手验证:无激活 vs 有激活
下面是两个 3 层网络,参数完全一样。唯一区别:左边没有激活函数,右边每层加了 ReLU。
拖拽输入 x,看两边的输出差多少。你会发现左边的永远是直线(3 层等于 1 层),右边的可以弯折。
拖拽输入 x,看两边的输出差多少。你会发现左边的永远是直线(3 层等于 1 层),右边的可以弯折。
❌ 线性(无激活)
0.00
3层=1层
✅ 有 ReLU
0.00
多层才真正多层
你会发现:无激活的网络,不管多少层,输出始终是输入的线性变换(一条直线)。
有 ReLU 的网络,输出可以变成任意形状——这就是非线性的力量。
有 ReLU 的网络,输出可以变成任意形状——这就是非线性的力量。