ReLU 的分段线性:非线性来自哪里
多层线性变换连在一起仍可合并成一个线性变换。激活函数引入非线性,才让网络能表达更复杂的关系。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
But what is a neural network?
结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
多层线性变换连在一起仍可合并成一个线性变换。激活函数引入非线性,才让网络能表达更复杂的关系。
理解核心机制
ReLU 返回 max(0,x),正区间斜率为一,负区间为零。它本身很简单,但不同神经元形成不同的分段区域,组合后能得到复杂函数。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
def relu(x):
return max(0.0, x)
def triangle(x):
return relu(x) - 2 * relu(x - 1) + relu(x - 2)
values = [triangle(x) for x in (-1, 0, 0.5, 1, 1.5, 2, 3)]
assert values == [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]
print(values)适用边界与常见误区
零点处经典导数不存在,框架会采用约定的梯度。长期落在负区间的单元可能缺乏梯度,但不能只凭一次零输出判断神经元已经失效。
继续练习
改变折点位置与各项系数,构造梯形函数,并解释为什么纯线性层无法产生相同的折点。