论文笔记:更适合周期性数据的 Snake 激活

311 阅读1分钟

总览

Snake 激活函数来自于论文 (2020)Neural Networks Fail to Learn Periodic Functions and How to Fix It。

论文提出了更适合周期性数据的 Snake 激活:

Snakea:=x+1asin2(ax)\text{Snake}_a := x+\frac{1}{a}\sin^2(ax)

开始

论文假设并验证了激活函数的特性会反馈到网络在拟合时所展现的性质上。例如, 对于外推结果,使用 ReLU 的 MLP 会发散到无穷,使用 tanh 的 MLP 会趋于一个稳定值。

但无论是 ReLU(及其变体)还是 tanh,含有这些激活函数的网络都无法较好地外推出周期函数。本质是这些激活函数缺乏匹配周期性数据的归纳偏置。

已经有用三角函数作为激活函数的研究,但直接用 sin\sincos\cos 激活会导致优化困难——因为不是单调函数。导致其你和效果还不如 ReLU。

解决方法在本文最开始写出了。很简单,加个 xx 项。

其他说明

至于为什么是 x+sin2(x)x+\sin^2(x) 的形式而不是 x+sin(x)x+\sin(x),是因为观察后者在 xx 逼近于 0 时的泰勒展开 会发现缺失偶数次幂项,理论上会影响拟合能力。论文在 MNIST 上的实验结果表示,x+sin(x)x+\sin(x) 激活的效果比 ReLU 好,而 x+sin2(x)x+\sin^2(x) 的效果还要更好。

论文建议将 aa 设置为可学习参数。

对于服从标准正态分布的输入 xx,经过 x+1asin2(ax)x+\frac{1}{a}\sin^2(ax) 的方差值为

σa2=1+1+e8a22e4a28a2\sigma^2_a=1+\frac{1+e^{-8a^2-2e^{4a^2}}}{8a^2}

amax0.56045a_{\max}\approx 0.56045 取最大值,大概在 1.2。当网络比较深时推荐校正这个方差。

实际训练中,通常任务(例如图片分类)下设置 0.2aamax0.2\le a\le a_{\max} 会有较好效果。所以论文设置的默认值为 0.5。当任务数据有明显的周期特征时,aa 取值从 5 到 50 才有较好的效果。

那搞个新的可学习参数 aa',使得 a=2aa=2^{a'} 岂不更好?这样一来 aa' 的初值可设为 0,也可以便捷地上升到较大的 aa 值。

碎碎念

我是在看 xcodec 代码时看到 Snake 激活的。这么说的话,有了 Snake 充当激活函数,就不需要傅里叶变换之类的处理了?但要进一步实验才能知晓更优解了。