一句话定义
免查表激活函数指不依赖查找表(LUT)与插值、只用少量基本算术就能算出数值的激活函数。它针对的是单片机(MCU)这类设备:没有快速超越函数指令、单精度浮点很弱甚至没有、flash 只有几百 KB。
它与「用一个更简单的近似式换掉 tanh」不是一回事。查表法的做法是预先算好一张表放进 flash,运行时按输入索引取值再插值;免查表法把这个「先存后取」的过程整个去掉。
它解决什么问题
在卷积网络里,激活函数的开销通常可以忽略:一层卷积几十万次乘加,tanh 求值几百次,占比很小。
储备池计算(reservoir computing,RC)不是这个结构。储备池是一个固定的、稀疏连接的循环网络,只训练最后的线性读出层。环形储备池是其中一种代表性的稀疏拓扑,每次状态更新只做很少的乘加,剩下的时间全花在非线性求值上。
arXiv 上 2026 年 10 月的一篇论文给了一个具体数字:在 Cortex-M4 上,求值 tanh 占了状态更新时间的 75%。也就是说,这类模型在单片机上跑得慢,慢的不是乘法,是那一个非线性函数。
常规解法是查表。代价有三项:表要占 flash(表项数 × 位宽),取表要访存(MCU 上访存比算术慢),插值还要再算一遍。表越大越准、越占空间,精度和体积直接对冲。
关键做法
论文提出的函数叫 MulClip,构造方式有两点值得记住:
一、只用四类运算造曲率。 比较、取绝对值、乘法、减法。没有除法、没有指数、没有查表。曲率来自乘法和折线的组合,阶数提高就多叠一层。
二、截断阈值不放在极值点,放在「过极值之后回到零」的位置。 常规的 clip 类激活在极值处截断,函数到此为止,永远单调。MulClip 把截断点后移到响应回落至零的地方,于是一个函数同时拥有两段行为:单调段(输入在极值之前)和折叠段(越过极值后回落到零,成为非单调)。用哪一段,由输入尺度这个常规超参数在搜索中自然决定,不需要为每个任务单独调阈值。
论文报告的结果:
- 硬件上状态更新时间是 tanh 的 0.34 倍,比它评测的 11 种 tanh 近似都快;
- PC 上,三阶 MulClip 在 NARMA-20 任务上 NMSE 比 tanh 低 22%(该任务的预激活值一直落在单调段);
- 8 位奇偶校验任务上,只有单调段的截断变体准确率 0.76–0.78,带折叠段的版本升到 0.97–0.98;
- 两个任务上,片上推理结果与 PC 结果基本一致。
最后一条比前三条更有工程意义:数字路径可复现,说明换到真板子上算出来的不是另一回事。
用不上的时候
- 模型里卷积或矩阵乘占大头。 那时激活函数的占比本来就低,换它省下来的时间在端到端里看不见。先测一遍各算子耗时占比,再决定动哪里。
- 设备有 NPU 或带快速超越函数的硬件。 专用指令一条就出结果,解析近似反而是退步。
- 储备池之外的场景要重新验证。 论文的收益来自「乘加极少、非线性占比极高」这个结构,搬到普通 CNN 上没有同样的杠杆。
- 换单片机要重测。 有没有 FPU、单精度还是双精度、编译器怎么折叠常量,都会影响实测值。论文的 0.34 倍是在一颗具体芯片上测的。
- 精度不能只看论文的两个任务。 NARMA-20 和奇偶校验是储备池的经典基准,跟你的业务信号不是一回事。
参考
arXiv:2610.39343,MulClip: A table-free activation function with monotonic and folding regimes for reservoir computing on microcontrollers(2026-10-29)。要点:环形储备池中乘加很少,Cortex-M4 上 tanh 求值占状态更新时间 75%;MulClip 仅用比较、绝对值、乘法、减法引入曲率,截断阈值置于响应过极值后归零处,使单函数兼具单调段与折叠段,由输入尺度超参决定用哪段;硬件状态更新时间为 tanh 的 0.34 倍,快于评测的 11 种 tanh 近似;三阶版本在 NARMA-20 上 NMSE 低 22%,8 位奇偶校验上由 0.76–0.78 提升至 0.97–0.98;片上推理与 PC 结果接近。
延伸阅读
- 价签、秤、门磁:门店里真正海量的设备是单片机 —— 这篇讲的是这件事对门店意味着什么。
相关词条
火眼识别提供端侧视觉引擎与设备管理平台,相关方案见 火眼识别官网。