说明一下分工:灵感、猜想都是我的;代码和实验是 AI 写的,我只负责动嘴和动念头和训练。
前几天三角函数复习累了,在 Desmos 上拖曲线玩,把 arctan 和 tanh 画到一张图里,越看越觉得它俩长得像——都是 S 形,都是两边饱和。区别无非是 值域是 , 是 ,横竖缩放一下就能重合。
那一刻冒出个念头:arctan 缩一缩能不能直接当激活函数?
但这个念头只活了三秒。因为答案是显而易见的:肯定不好。tanh 和 sigmoid 当年在深网里怎么死的,arctan 就得怎么死——两边饱和,导数 往两边一滑就没了,层数一深梯度直接消失。这都不用跑实验,算一下导数上确界就知道。所以 arctan 原教旨主义当场放弃。
但 Desmos 还开着,我就多看了两眼。顺手把 sigmoid 画了一下
关于 Swish 的那个”坑”
视线移到 Swish 身上:。这条曲线的左半边有个很有名的小坑—— 处 dip 到 再爬回来。大家都说这个非单调的坑是 Swish 好用的原因之一,但我当时犯轴:如果我偏要把它掰直呢?
最顺手的办法就是加一个 x term 进去,搞成漏的(leaky):
时趋近于 , 时趋近于 ——这不就是 Leaky ReLU 被磨光滑了吗?我给它起名叫 soft leaky relu。
然后直接在 Desmos上看一下单调性。当 取 是稳单调的, 取 则还留着那个坑。算了一下单调性。,而 SiLU 导数在 处有个最小值 。令最小导数大于零,解出来 时函数严格单调。
这个 的阈值后来变得很有意思——先按下不表。
sigmoid—tanh—arctan:为什么不魔改门控?
soft leaky relu 写出来之后,我盯着它看了很久,结构是 。门控现在是 sigmoid,但我的联想链是这样的:
sigmoid 和 tanh 是亲戚(,小学二年级知识),tanh 和 arctan 长得像(Desmos 告诉我的)——那为什么不把 arctan 魔改成门控,塞进同一个模板里试试?
当时写下的原式是这样的:
把 压到 , 再搬到 ,正好是个门控。写完之后我随手把式子丢给 AI 看,它一眼就认了出来:,这不就是……标准 Cauchy 分布的 CDF 吗?,一模一样。
顺着这个提示,swish、gelu 全连起来了:
- Logistic CDF → SiLU/Swish
- Gaussian CDF → GELU
- Cauchy CDF → ???空着呢
三位一体,缺的那块拼图长这样。名字是写代码的 AI 起的:CaLU(Cauchy Linear Unit),完整版叫 Leaky CaLU——跟 SiLU、GELU 正好一家人,我拍板用了。门控零点斜率也排得整整齐齐:Gaussian > Cauchy > Logistic ,Cauchy 恰好卡在中间——尾部最重、开启居中,对称得很漂亮。
名字起完去搜文献,心凉了半截又热了起来:一篇 2026 年 9 月 3 号的论文,Küçükali 等人的 RoCLU(Robust Cauchy Linear Unit),公式是 ——同一个 家族,门控是个 log 变换。
转念一想,这是好事:第一,说明 Cauchy 门这条路不是我一个人在走,方向大概率没错;第二,人家的门和我的门不一样(log 门 vs 精确 CDF 门),叙事不打架;第三,现成的文献基线,白捡的。果断把它加进对比里一起跑。
实验:跑了 45 次,只看结果
实验设计很简单,核心思想就一句话:把模型变瘦,差距自然现形。经典 LeNet 在 MNIST 上闭眼 99%,什么激活函数都一个样——所以故意把网络阉割到 参数(约为原版的 ),无 BN、无 Dropout、只训 个 epoch。模型长这样( 输入):
| # | 层 | 配置 | 输出尺寸 | 参数量 |
|---|---|---|---|---|
| 1 | Conv1 + Act | 通道, | 104 | |
| 2 | AvgPool | 0 | ||
| 3 | Conv2 + Act | 通道, | 808 | |
| 4 | AvgPool | 0 | ||
| 5 | Flatten | — | 0 | |
| 6 | FC1 + Act | 4128 | ||
| 7 | FC2(无激活) | (logits) | 330 | |
| 合计 | 5370 |
11 个激活函数,除了 Act 里装的东西不一样,其他严格同构:同一套 Xavier 初始化、同一个优化器(Adam,,,无 scheduler)、同一个 batch size()、同一个 device(mps),每个激活跑 3 个 seed。代码是 AI 搞的,我就给了超参数和 exp 编号对照表,然后训练。
主结果(MNIST 测试集,3-seed 均值 std,单位 %)
| 激活 | seed0 | seed1 | seed2 | 均值 |
|---|---|---|---|---|
| Soft Leaky ReLU | 97.78 | 97.39 | 97.82 | |
| SiLU | 97.67 | 97.38 | 97.83 | |
| GELU | 97.58 | 97.54 | 97.71 | |
| RoCLU | 97.90 | 97.04 | 97.69 | |
| Tanh | 97.53 | 97.67 | 97.37 | |
| Leaky CaLU | 97.75 | 97.17 | 97.60 | |
| CaLU | 97.76 | 97.12 | 97.60 | |
| Arctan | 97.40 | 97.70 | 97.21 | |
| Leaky ReLU | 97.54 | 97.55 | 97.15 | |
| ReLU | 97.52 | 97.53 | 97.15 | |
| Sigmoid | 90.66 | 94.33 | 90.30 |
SiLU()> GELU()> CaLU()GELU 方差全场最小()、首 epoch 启动最快(),高斯门不愧是工业界千锤百炼的选择,稳得可怕。RoCLU 排第四,还拿了全场最高单次 ,但方差也是除 sigmoid 外最大的。sigmoid 垫底不意外:首 epoch 只有 ,梯度消失的教科书现场。
门控 leak
把四个”自己人”单独拎出来,门控(sigmoid 门 vs Cauchy 门) leak( vs )正好组成对照:
| 均值 | ||
|---|---|---|
| sigmoid 门 | SiLU 97.63 | Soft 97.66 |
| Cauchy 门 | CaLU 97.49 | LeakyCaLU 97.51 |
leak 效应两行都是 ,门控效应两列都是 sigmoid 门 ——方向完全一致,可惜幅度都在噪声带里。RoCLU(log 门)以 落在两者之间,恰好对应它的门控形状也居中(,负半轴渐近值比 Cauchy 更深: vs )。而三位一体内部 SiLU > GELU > CaLU,恰好是门控开启锐度的反序。但说实话,除 sigmoid 外大家差距都在噪声带里,显著性不够。
最有意思的:β 消融 vs 单调阈值
前面在 Desmos 上算过,soft leaky relu 的导数是
方括号里是 SiLU 的导数,最小值约 ( 处)。令它大于零:
所以 稳单调, 擦边单调(最小导数 ), 不单调(还留着坑)。而我做了四档实验,把 从 放大到 :
| 最终精度(均值std) | epoch1 均值 | 单调性(最小导数) | |
|---|---|---|---|
| 0.01 | 89.92 | 不单调(,留坑) | |
| 0.1 | 88.99 | 擦边单调() | |
| 0.2 | 88.02 | 稳单调() | |
| 0.3 | 87.30 | 稳单调() |
均值和启动速度两个维度严格单调下降,方差整体放大(,中间 档最高 )。也就是说,单调的版本反而更差。那个坑,在浅网 MNIST 上至少不是坏事。我当初”把它掰直”的执念,被自己的实验否了。科学就是这样,猜想负责貌美如花,数据负责铁面无私。
下一步:VGG
我的直觉是:Cauchy 门这种重尾、多项式拖尾的设计,在只有 3 个非线性层的简化 LeNet 里根本施展不开,因为门控的这种差异要连乘 8~10 次才会复利放大。下图是原因:sigmoid 门的 是指数衰减(半对数坐标下呈直线),三下五除二就饱和到底;而 Cauchy 门和 RoCLU 门是多项式拖尾,软得很久。层数一深,前者早早”决断”,后者还留着梯度(VGG 这种无 BN 的深网才是它的主场)。RoCLU 那篇论文也是往深了测(最深到 700 层)。
所以后面:VGG + CIFAR-10。门控三家(sigmoid / Cauchy-CDF / log)到底谁在深水区更能打,敬请期待下篇。
完整实验报告、45 次训练的原始实验结果见存档(calu-archive.zip,共 42 个实验目录:11 个激活,3 seed,33 个主实验,另 9 个为 β 消融新增;β=0.01 一档复用主实验。解包后运行 collect_results.py / beta_ablation.py 即可复现全部图表),欢迎拍砖。CaLU 的名字要是跟谁撞了也请告诉我——截至动笔那天,我只查到 RoCLU 这一个亲戚。
参考文献
[1] Küçükali Ö, Bozkurt MH, Ulutaş E, Bozkurt I. A Novel Activation Function for Enhancing Deep Neural Network Stability and Performance. Concurrency and Computation: Practice and Experience. 2026;38