CONCEPT / neural-networks
激活函数:表达能力、梯度传播与输出语义
从线性层复合的退化出发,比较 sigmoid、tanh、ReLU、GELU 与 SiLU 的函数形状、导数、数值行为和输出层适用范围。
本页目标
- 证明缺少非线性时,多层仿射网络会退化为单个仿射映射。
- 计算 sigmoid、tanh、ReLU 等函数及其导数,并识别饱和区。
- 比较分段线性、平滑性、输出范围和死亡单元等工程权衡。
- 依据回归、二分类、多标签和多分类目标选择输出层变换。
本页目录
学习目标
激活函数位于神经网络的仿射层之间,把每个预激活值转换为新的表示。它既决定网络能形成怎样的非线性函数,也参与反向传播中的局部导数乘积。完成学习后,应能从函数图像、输出范围、导数和任务语义四个角度比较候选激活,并能解释隐藏层选择与输出层选择为何遵循不同标准。
先修知识与记号
需要掌握函数图像、分段函数、导数和多层感知机的前向计算。用 表示仿射层输出的预激活,用 表示激活值。向量输入时,隐藏层通常逐分量应用同一函数:
逐元素操作不会混合坐标;跨特征的信息混合由前后的权重矩阵完成。讨论导数时先看标量函数,再把各分量导数组成对角的局部 Jacobian。
非线性为何不可缺少
考虑两个不带激活的仿射层:
代入可得
右侧仍是一个仿射映射。继续堆叠只会得到更多矩阵乘积和偏置组合,决策边界仍是超平面。把非线性函数放在层间后,输入空间可被不同激活模式划分为多个区域,后续层再组合这些区域响应,因而能够表达弯曲边界与复杂函数。
非线性也不能任意选择。常数函数会丢失全部输入信息;处处导数为零的阶跃函数无法直接用普通梯度训练前序权重;数值范围过大可能造成溢出,长期饱和又会使梯度很小。合适选择依赖深度、初始化、归一化、数值精度和任务输出约束。
比较激活函数的四个维度
第一,输出范围决定表示是否有界、是否以零为中心以及均值可能向哪一侧偏移。第二,导数范围决定局部梯度会被衰减、放大还是截断。第三,平滑性影响高阶优化、数值近似和边界附近行为。第四,计算与存储成本影响大规模训练,但只有在同一硬件与实现下才可比较实际速度。
还要区分隐藏层与输出层。隐藏层负责构造表示,通常追求稳定梯度和足够表达能力;输出层把数值映射到任务所需的支持集,例如实数、正数、概率单纯形。一个函数适合隐藏层,不代表它适合任何输出目标。
Sigmoid 与 tanh
Sigmoid 定义为
输出位于 ,导数最大值为 。当 很大时,输出接近零或一,导数接近零。深链若反复乘上这些小导数,前层梯度可能快速衰减。Sigmoid 仍适合表示二分类概率或门控比例,但数值实现常直接接收 logits 计算交叉熵,以避免先取极端概率再求对数。
双曲正切为
输出位于 且关于原点对称,零附近导数接近一。它在循环状态和小型网络中仍有用途,但两端同样饱和。所谓“零中心”只描述函数输出的对称范围,实际激活均值还取决于输入分布和偏置。
例题一:饱和区如何缩小梯度
设预激活 ,激活 ,上游梯度 。局部导数为
因此
若 ,sigmoid 导数约为 ,相同上游梯度传回的绝对值约为 。梯度变小来自当前预激活进入饱和区;不能仅凭使用 sigmoid 就断言整个网络一定无法训练,还要检查偏置、输入尺度、深度和其他梯度路径。
ReLU 与分段线性网络
修正线性单元定义为
在 时导数为零,在 时导数为一, 处不可导。自动微分实现会在零点选定一个约定值,常见选择是零。单个点的选择通常不改变连续分布下的整体训练,但在离散输入、精确零初始化或梯度检查中必须知道具体约定。
ReLU 的正半轴没有饱和上界,计算简单,并能产生精确零激活。多个 ReLU 层组成的函数在有限区域内是分段仿射的,区域边界由预激活等于零的位置决定。网络整体可连续且具有复杂折线结构,但在分区边界处可能不可微。
若一个单元对所有训练样本长期满足 ,其 ReLU 导数为零,前序权重收不到来自该单元的梯度,这称为死亡单元。过大的负偏置、过高学习率或不合适初始化都可能造成该现象。Leaky ReLU 使用 且 ,在负半轴保留小斜率;它缓解零梯度通路,却不保证训练结果更优。
例题二:两个 ReLU 精确表示绝对值
令两个隐藏单元为
输出层取 。当 时,;当 时,。因此
单个仿射函数无法同时拥有左右两侧相反斜率,而两个 ReLU 单元在零点切换激活模式后可以精确构造折点。若输出改为 ,结果又退化为 ,说明表达能力来自参数组合,并非只要存在隐藏层就会产生复杂函数。
GELU、SiLU 与平滑门控
高斯误差线性单元写作
其中 是标准正态分布函数。SiLU 写作
二者都用随输入变化的平滑比例缩放 ,负半轴不会像 ReLU 那样全部截为零。它们并非处处单调地把较大输入映到较大输出;负区间可能出现浅小谷值。平滑导数可减少零点处的离散切换,但会增加函数计算成本,实际吞吐还受编译器融合和硬件实现影响。
选择 GELU、SiLU 或 ReLU 不能只比较单个函数图像。初始化与归一化会改变预激活分布,优化器和学习率会改变参数轨迹,残差连接会提供额外梯度路径。可靠比较应固定网络、数据切分、训练预算和随机种子,并报告多次运行的不确定性。
输出层激活由预测对象决定
实值回归通常使用恒等输出,使预测不受固定区间限制;目标必须为正时,可使用指数或 softplus 参数化正尺度,并配合对应概率模型。二分类常用单个 logit,通过 sigmoid 得到正类概率。互斥多分类用多个 logits 经 softmax 形成和为一的概率向量。多标签任务的各标签可同时成立,通常对每个标签分别使用 sigmoid,而非让所有标签竞争同一个 softmax 总和。
输出范围匹配只是第一步。概率语义还依赖损失函数、数据假设与校准表现。例如 softmax 数值和为一,不足以证明概率已校准;分布外输入可能仍产生高度集中的输出。训练时优先使用接收 logits 的稳定损失实现,避免手工计算极小概率的对数。
交互实验:激活与边界
实验开始前,固定数据集、隐藏宽度、种子和训练预算,预测三种激活将产生怎样的边界。特别记录 sigmoid 是否因饱和学习较慢、ReLU 是否出现整片不激活区域,以及更换函数后训练损失能否直接用于宣称某种函数普遍更好。
神经网络决策边界
正在加载交互实验…
依次完成以下操作:
- 只切换 tanh、sigmoid 与 ReLU,保存相同训练轮数下的损失和误分类点。
- 观察隐藏宽度较小时三种边界的形状,再逐步增加宽度。
- 对每种激活分别降低与提高学习率,检查原先差异是否来自优化尺度。
- 固定全部参数并重置,验证种子相同时状态可复现;再改变种子观察波动。
可视化呈现的是一个二维小网络的有限实验。某次 ReLU 边界更准确,只能支持该数据与配置下的观察。函数选择还需结合梯度统计、验证集表现、训练稳定性和推理成本,不能从一幅边界图推断所有架构。
常见误解与反例
平滑性只影响局部导数性质。饱和范围、输出均值、初始化、归一化和优化器同样关键;平滑 sigmoid 在大绝对值处可能传回极小梯度,分段线性的 ReLU 反而能在正区间保持单位导数。
一个训练好的网络可能包含对当前数据始终输出零的单元,而其他单元仍足以完成任务。死亡单元表示该参数通路没有贡献,不等于整个网络输出必定错误。诊断时应同时查看死亡比例、容量需求与验证表现。
最大概率是单个输入上的模型输出,正确率是数据集上预测是否正确的频率。二者统计对象不同。即使最大项为 ,模型也可能预测错误或整体校准不佳。
数值稳定实现
export function sigmoidStable(value: number): number {
if (value >= 0) {
const exponent = Math.exp(-value);
return 1 / (1 + exponent);
}
const exponent = Math.exp(value);
return exponent / (1 + exponent);
}
export function softmaxStable(values: readonly number[]): number[] {
if (values.length === 0) throw new Error("Softmax requires at least one logit.");
const maximum = Math.max(...values);
const exponentials = values.map((value) => Math.exp(value - maximum));
const denominator = exponentials.reduce((sum, value) => sum + value, 0);
return exponentials.map((value) => value / denominator);
}
Sigmoid 按符号改写,避免直接计算极大正指数;softmax 先减去最大 logit,这个平移不改变归一化结果,却降低溢出风险。若输入含非有限数或低精度下全部指数下溢,还需显式错误处理。训练交叉熵时,使用成熟库的 logits 接口通常比先输出概率更可靠。
练习
证明 sigmoid 导数最大值为 ,并说明最大值在哪个输入处取得。
查看解答
令 ,导数为 ,最大值是 ,在 时取得。Sigmoid 单调且 ,所以对应输入为 。
设 。分别写出 、、 三个区间上的线性表达式。
查看解答
当 时两项都为零,。当 时只有第二项激活,。当 时两项都激活, 。函数在两个折点连续,但导数发生变化。
一个任务的每个样本可同时具有“室内”“人物”“夜晚”多个标签。应选择单个三类 softmax,还是三个独立 sigmoid?说明输出与损失的含义。
查看解答
标签不互斥,应使用三个独立 logits 与 sigmoid,每个分量表示对应标签的条件概率估计,并逐标签计算二元交叉熵。单个 softmax 强制三项和为一,会错误地让标签彼此竞争。阈值仍需依据验证数据和业务代价选择。
与其他概念的关系
- 感知机与多层感知机 提供激活函数所在的前向层结构。
- 导数与微分 给出局部线性近似和分段可导分析。
- 反向传播 将激活导数与其他局部导数组合成参数梯度。
- 参数初始化与梯度流 研究预激活分布和梯度方差如何跨层演化。
- 损失函数 决定输出层变换如何与目标数据配对。
- Transformer 的位置前馈层提供 GELU、ReLU 等激活的具体应用场景。
延伸阅读
Deep Learning
Ian Goodfellow, Yoshua Bengio, Aaron Courville
适合作为反向传播和优化章节的完整参考。
打开官方来源《Deep Learning》从前馈网络、反向传播和优化角度讨论 sigmoid、tanh、ReLU 等激活,可用于继续分析饱和、梯度传播与输出单元。具体实现仍应核对所用框架的零点导数和稳定损失接口。
Attention Is All You Need
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin
阅读注意力机制文章时用于核对原始模型定义和实验边界。
打开官方来源《Attention Is All You Need》的位置前馈子层使用 ReLU,展示逐元素非线性如何嵌入注意力架构。它可支持该具体架构事实,但不构成 GELU、SiLU 或所有激活函数性能排序的证据。
后续学习
继续阅读 反向传播,把激活函数导数放入完整计算图;随后阅读 参数初始化与梯度流,分析预激活尺度如何决定饱和比例和跨层梯度。若重点是概率输出,应回顾 损失函数。