本节要分享的是SelfONN, SelfONN可以看作是ONN的优化/升级, 而ONN可以看作是更一般化的CNN, 克服了CNN的一些问题。
这里先从CNN说起,
上图展示了对多通道输入的feature map进行卷积的过程, 卷积核有m个,每个卷积核实际上相当于FNN中的一个神经元, 其通道数=输入通道数, 每个卷积核对应的输出为一张feature map, 将m个卷积核的输出聚集起来即为通道数为m的feature map。
CNN存在的主要问题,
(1)不管是1d还是2d, 单个卷积核本质上还是一个线性操作, 需要结合非线性激活才能赋予其非线性能力;
(2)网络同质化严重,
(3)网络过于复杂, 参数量太大, 不利于部署 (CNN实际部署需要涉及轻量级的网络)。
ONN通过引入运算符集库大大增加了其非线性能力, 然而搜索最有的运算符集合非常耗时,并且运算符集库的选择很大程度上决定了性能上限。
SelfONN是对ONN的升级和改进,其核心思想是基于泰勒展开对函数进行近似, 这样一来就不需要预先定义运算符集库并且也避免了搜索最佳运算符集合的代价。
对于任何一个网络层,本质上是在学习一个函数f, 其泰勒展开如下:
其Q阶的泰勒展开作为f的近似如下,
上述近似只有在a的领域内采有效, 即在 [ α − λ , α + λ ] [\alpha -\lambda, \alpha+\lambda] [α−λ,α+λ]内有效, 特别的,当a=0,并且采用tanh激活函数时,该区间为[-1, 1]. 这意味着输入的范围应该位于该区间内。
下面介绍改Q阶近似如何与SelfONN layer关联起来,
如上公式所示,该近似需要用到x的1~Q阶指数变换, 将其作为Operator sets, 然后将每一项前与梯度有关的系数作为网络科学系的权重,
这样一来,第l层的第k个neuro的操作可以用如下公式表示,
其中 W l k W^{k}_{l} Wlk的尺寸为[M, N, Q],
该操作关于输入和权重的梯度计算如下,
可以看到Q实际上决定近似程度, 特别的, 当Q=1并且最终的聚合函数 ϕ = s u m \phi=sum ϕ=sum时, SelfONN layer完全退化为了CNN, 从这个角度来说, SelfONN可以看作是CNN的更加General的形式。
代码实现方面,
ONN的实现除了自行实现以外, 可以基于FastONN库[4], 例子如下,
定义一个三层的ONN model,
训练部分代码如下,
SelfONN的代码实现起来也很简单, 只需增加一个数据预处理来构造X的Q阶变换, 然后调用Torch官方的卷积算子即可. 当然也可以直接使用FastONN提供的API。 关于其自定义实现的例子参考另一篇博客https://blog.csdn.net/QKK612501/article/details/131975879?spm=1001.2014.3001.5502.
SelfONN的简介到此为止, 对其相关理论以及在各个领域/任务感兴趣的可以查找相关论文, 主要都是MONCEF GABBOUJ团队写的。
ONN ->SelfONN的奠基性论文
Neural Networks, 2021, Self-organized Operational Neural Networks with Generative Neurons
轴承早期故障诊断
IEEE Access, IEEE Access-2021-Early Bearing Fault Diagnosis of Rotating Machinery by 1D Self-Organized Operational Neural Networks;
图像恢复问题
Neural Networks, 2021-Self-organized operational neural networks for severe image
restoration problems
R-peak 检测,
IEEE TBME, 2022-Robust R-Peak Detection in Low-Quality Holter ECGs using 1D Convolutional Neural Network
IEEE TNNLS, 2022, Robust Peak Detection for Holter ECGs by Self-Organized Operational Neural Networks