为什么添加激活函数会降低CNN模型的时间性能,ELU比ReLU更耗时?
耗时差异原因说明
你观察到的耗时差异确实主要由ELU激活函数本身的特性导致,核心原因可以分为两点:
- 计算复杂度差异
ReLU的计算逻辑是max(x, 0),属于极低开销的逐元素比较+赋值操作,CPU、GPU都可以在单指令周期内完成;而ELU的计算逻辑是x if x ≥ 0 else α*(exp(x)-1),包含了高开销的指数运算exp(),单步计算耗时是ReLU的几十至上百倍,本身就会带来明显的推理延迟上升。 - 算子融合支持差异
目前主流深度学习框架(PyTorch、TensorRT等)都默认支持卷积层和ReLU的算子融合:可以把ReLU的计算逻辑直接合并到相邻卷积算子的输出阶段,不需要单独分配内核、也不需要额外做特征图的读写操作,因此加ReLU后的速度和不加激活层几乎没有差异。但ELU因为包含指数运算,几乎没有框架支持它和卷积层的算子融合,需要单独生成计算内核、还要额外做一次完整特征图的读写,访存+计算的双重开销叠加后,耗时就会明显上升。
如果你想要验证这个结论,可以用torch.profiler工具抓取单算子运行耗时,直接查看ELU层的独立开销;也可以把ELU的α参数设为0,此时ELU的计算逻辑会退化为和ReLU一致,再测试速度就会和ReLU无明显差异。
内容的提问来源于stack exchange,提问作者Anvar Ganiev
相关产品推荐
相关产品推荐

