Swish 和 SiLU 在本质上是同一个函数,只是在表达方式上有点历史原因,导致很多文章或回答把它们写得“好像不一样”。
区别来源
-
Swish (论文原版)
Swish(x)=x⋅σ(βx)\text{Swish}(x) = x \cdot \sigma(\beta x)Swish(x)=x⋅σ(βx)
Google 在 Searching for Activation Functions (2017) 提出:其中 β\betaβ 是一个可调超参数,可以是固定常数,也可以学习得到。
-
SiLU (框架实现)
SiLU(x)=x⋅σ(x)\text{SiLU}(x) = x \cdot \sigma(x)SiLU(x)=x⋅σ(x)
在 PyTorch、TensorFlow 等框架里,直接实现的是 β=1\beta = 1β=1 的情况:所以框架中的 SiLU 就是 Swish 的特殊情况(β=1\beta=1β=1)。
为什么有人说它们“不一样”
-
有些资料严格区分:
-
Swish = 一族函数(带超参数 β\betaβ);
-
SiLU = 特殊情况(β=1\beta=1β=1)。
-
-
但在大部分论文和实现里,β\betaβ 通常取 1(因为实验发现效果最好),所以 Swish 和 SiLU 在实际使用上就是同一个函数。
总结
-
数学上:SiLU = Swish(β=1\beta=1β=1)。
-
历史上:Swish 是 Google 提出并命名的,SiLU 是后来框架标准化的名字。
-
使用上:几乎所有深度学习框架实现的 SiLU = Swish(1)。
8302

被折叠的 条评论
为什么被折叠?



