真实面经题目 · 原创解析
ReLU 是为了解决什么问题设计的?
ReLU 的设计目标是给神经网络引入简单高效的非线性,同时缓解 Sigmoid/Tanh 在深层网络中的梯度消失和计算饱和问题。回答要同时讲优点和死亡 ReLU 等代价。
真实面经题目 · 原创解析
ReLU 的设计目标是给神经网络引入简单高效的非线性,同时缓解 Sigmoid/Tanh 在深层网络中的梯度消失和计算饱和问题。回答要同时讲优点和死亡 ReLU 等代价。
ReLU 定义为 max(0, x)。它主要解决两个问题:第一,给网络引入非线性,否则多层线性变换仍然等价于一层线性模型;第二,相比 Sigmoid 和 Tanh,ReLU 在正区间梯度恒为 1,不容易因为激活函数饱和导致梯度消失,计算也更简单。它还会带来稀疏激活,有利于表达和效率。但负半轴梯度为 0,学习率过大或初始化不当时可能出现死亡 ReLU,所以后来有 Leaky ReLU、PReLU、ELU、GELU 等变体。
神经网络需要激活函数打破线性叠加。没有非线性,多层全连接或卷积的线性部分可以合并成一层,模型表达能力会受限。
Sigmoid 和 Tanh 在输入绝对值很大时会饱和,导数接近 0,深层反向传播时梯度容易越来越小。ReLU 正区间导数为 1,使正激活路径上的梯度传播更直接。
ReLU 只是取 max(0, x),比指数函数相关的 Sigmoid/Tanh 计算便宜,适合大规模深度网络训练和推理。
负输入输出为 0,会让一部分神经元在样本上不激活,形成稀疏表达。这可能降低冗余并带来一定正则化效果。
如果某些神经元长期落在负区间,梯度为 0,参数不再更新,就会出现死亡 ReLU。初始化、学习率和 BatchNorm 都会影响这个问题。
不会。它缓解激活函数饱和带来的梯度消失,但深层网络还会受初始化、归一化、残差结构和优化器影响。
神经元对大部分输入都落在负区间,输出为 0、梯度也为 0,参数难以继续更新,就像失活了一样。
它给负半轴保留一个很小斜率,使负区间仍有梯度,降低死亡 ReLU 风险。