AutoPNPNet论文阅读
模型速览
PNPNet(Periodic-Non-Periodic Network)和AutoPNPNet是作者提出的深度学习模型,用于挖掘数据内部的周期性来增强预测准确率。作者提出了FourierNet:一种基于Fourier的神经编码器来捕捉周期性特征;ChebyshevNet:使用Chebyshev神经编码器来建模非周期性特征。作者将这两种架构结合构成PNPNet和AutoPNPNet。模型效果优于SOTA(会有论文不是SOTA的吗?而且这里的SOTA是FT-Transformer(2021, Yury Gorishniy))。
PNPNet detects periodic and non-periodic features a priori, feeding them into separate branches, while AutoPNPNet automatically selects features through a learned mechanism.
Q1:PNPNet如何使用滤波器与傅里叶变换获取periodic and non-periodic特征并将其转化为什么样的先验?
Q2:如何传入不同分支?
Q3:这里的分支是什么?
Q4:AutoPNPNet如何自动选择特征?
要点速递
这篇文章创新性并不是那么强。而且在评价指标上有些”特别”。
- ChebyshevNet:切比雪夫多项式,高阶切比雪夫多项式可以拟合非线性关系,近年提出的网络架构KAN也是对于Chebyshev多项式有所运用。
- FourierNet:类似于傅里叶变换的思路,主要是通过神经网络初始化多个频率,然后对于频率优化,其实并没有使用实际的傅里叶变换。
- Cross-head attention:交叉头注意力机制,这种机制会在每两个注意力头之间计算“交叉注意力”,然后归一化。可以有效提取不同注意力头之间的交互作用。
- 评价指标:作者使用的评价指标是“相对于SOTA的提升率”,但是并没有给出具体的绝对数值和计算方法(80%提高10%是90%还是88%?);在评价指标中,相同数据集的Precision和Accuracy居然显示的是不同模型。
模型架构
FourierNet
FourierNet主要用于捕捉周期性的信息,基于Fourier变换的神经编码器将输入的特征转化为频域表示,让网络可以高效学习周期性的部分。
输入向量$X \in \mathbb{R}^d$,在进行傅里叶变换前将会进行多种处理,如果使用缩放,则所有的输入特征都将会进行一次可学习($s\in \mathbb{R}^d为可学习参数$)的缩放(即对进行一次逐元素相乘)
$$\tilde{x}=s\odot x$$
可选择进行一次1维的卷积操作,用于捕捉局部的特征信息
$$\tilde{x}=\mathrm{Conv1D}(\tilde{x})$$
傅里叶编码器的核心在于:将输入特征使用正弦函数映射至一个高维度的空间,对于每个输入特征$x_{i}$,我们将其与m个频率组件相关联,构成一个频率矩阵$\mathbf{F}\in \mathbb{R}^{d\times m}$,频率$f_{ij}$可以通过多种方式初始化(uniform, normal, logarithmic initialization),如果使用RFF(random fourier features),则将按照以下分布,其中$\sigma$代表带宽参数。
$$f_{ij} \sim \mathcal{N}\left( 0, \frac{1}{\sigma^2} \right)$$
编码器也有对于每个特征和频率可选择的可学习的参数振幅$\alpha_{ij}$和相移$\phi_{ij}$。输入向量将会哦那个过以下方式映射:
$$z_{ij}=2\pi x_{i}f_{ij}+\phi_{ij}$$
编码器支持多种激活函数,其中sin_cos激活函数如下所示:
$$F_{ij}^{\sin}=\alpha_{ij}\sin(z_{ij}), F_{ij}^{\cos}=\alpha_{ij}\cos(z_{ij})$$
这些输出在特征维度上堆叠,在激活后,一个可选择的可学习缩放参数$\gamma_{ij}$被用于缩放特征
$$F_{ij}=\gamma_{ij}F_{ij}$$
编码后的特征被展平来形成最终的编码向量$\mathbf{F}(x)$,该向量维度为$d\times m\times k$,其中k依赖于激活函数的类型,如果是”sin_cos”则k=2。
$$\mathbf{F}(x)=\mathrm{Flatten}(F_{ij})$$
完整的FourierNet结合了MLP,Fourier编码器将输入特征转化为一个高维度的表示$\mathbf{F}(x)$,通过正弦转化捕捉到了周期信息、振幅和相位,这些编码后的表示将通过L层的MLP:
$$
\begin{aligned}
\mathbf{h}_{0} &= \mathbf{F}(x) \\
\mathbf{h}_{l} &= \sigma(\mathbf{W}_{l}\mathbf{h}_{l-1}+\mathbf{b}_{l}), \quad \text{for } l=1,2,\ldots,L \\
\hat{y} &= f_{\text{out}}(\mathbf{h}_{L})
\end{aligned}
$$
将所有的组件组合起来,对于输入特征 $x_{i}$ 和频率j的编码可以概括为以下式子:
$$
\begin{aligned}
F_{ij}=\gamma_{ij}\alpha_{ij}\sin(2\pi x_{i}f_{ij}+\phi_{ij})\\
F_{ij}=\gamma_{ij}\alpha_{ij}\cos(2\pi x_{i}f_{ij}+\phi_{ij})
\end{aligned}
$$
ChebyshevNet
ChebyshevNet用于捕捉复杂的、非周期、非线性的关系。ChebyshevNet使用了第一类切比雪夫多项式,对于每个输入特征$x_{i}$,切比雪夫多项式$T_{n}(x_{i})$通过如下方式递归定义:
$$\begin{aligned}
&T_{0}(x_{i})=1,\\
&T_{1}(x_{i})=x_{i},\\
&T_{n}(x_{i})=2x_{i}T_{n-1}(x_{i})-T_{n-2}(x_{i}), \text{for } n\geq 2 .
\end{aligned}
$$
这里我附上一个first kind chebyshev的绘图代码
1 | def chebyshev(x, n = 10): |
一个对于训练趋势的初步分析显示:loss有显著的波动,而这阻碍了训练的过程,尤其是对于高阶的多项式。为了解决这个问题,我们探索了特征限制(feature clamping)来增强训练稳定性。输入特征被限制到区间[-1,1].
$$x_{i} \leftarrow \mathrm{clip}(x_{i},-1,1).$$
这样的限制让高阶的多项式训练过程更加稳定。
Chebyshev编码器$\mathbf{C}(x)$通过计算对每个输入特征的N(及$\leq N$)阶多项式,产生特征编码张量,编码张量形状为[d, N+1],d为输入的特征数量:
$$\mathbf{C}(x)=[T_{0}(x_{i}), T_{1}(x_{i}),\dots,T_{N}(x_{i})]_{i=1}^d$$
一个多头编码机制被用于增强编码器的表示能力。设共有H个头,每个头独立处理输入特征,包括学习参数$\mathbf{s}^{(h)}\in \mathbb{R}^d,\mathbf{W}^{(h)}\in \mathbb{R}^{d\times(N+1)}, \mathbf{K}^{(h)}\in \mathbb{R}^{d\times(N+1)\times k}$。其中s为可选的缩放参数、$\mathbf{K}$为交互核,k为核大小。对头h,输入特征如下处理:
$$\tilde{x}_i^{(h)} = s_{i}^{(h)}x_{i}$$
计算特征编码矩阵:
$$P_{i,n}^{(h)}=W_{i,n}^{(h)}T_{n}(\hat{x}_{i}^{(h)})$$
多项式的交互依赖于交互核:
$$S_{i,j}^{(h)}=\sum_{n=0}^NP_{i,n}^{(h)}K_{i,n,j}^{(h)},\text{ for }j=1,2,\dots,k $$
使用激活函数:
$$S_{i,j}^{(h)}=\sigma(S_{i,j}^{(h)})$$
如果使用残差连接:
$$S_{i,j}^{(h)}=S_{i,j}^{(h)}+\tilde{x}_{i}^{(h)}$$
每个头输出张量$\mathbf{S}^{(h)}\in \mathbb{R}^{d\times k}$。然后会输入交叉头注意力模块中。cross-head attention中多头的权重通过指数加权求得:
$$s^{(h)}=\mathrm{Flatten}(\mathbf{S}^{(h)}),\mathbf{s}^{(h)}\in \mathbb{R}^{dk}$$
$$\alpha^{(h,h’)}=\frac{(q^{(h)})^Tk^{(h’)}}{\sqrt{ d_{a} }}$$
$$a^{(h,h’)}=\frac{\exp(\alpha^{(h,h’)})}{\sum_{h’’=1}^H\exp(\alpha^{(h,h’’)})}$$
$$\mathbf{o}^{(h)}=\sum_{h’=1}^Ha^{(h,h’)}\mathbf{v}^{(h’)}$$
$$\mathbf{C}(x)=\mathrm{Concat}(\mathbf{o}^{(1)},\mathbf{o}^{(2)},\dots,\mathbf{o}^{(H)})$$
一个可选的归一化层在这里可以用于处理$\mathbf{C}(x)$来保证训练稳定性。最后$\mathbf{C}(x)$将被输入到MLP中
PNPNet
PNPNet需要将输入的特征分为周期性变量$x_{p}\in \mathbb{R}^{d_{p}}$和非周期性变量$x_{np}\in \mathbb{R}^{d_{np}}$,其中$d_{p}+d_{np}=d$。PNPNet分为两个并行的分支,分别处理周期变量和非周期变量,FourierNet产生的结果$\mathbf{F}(x_{p})$和ChebyshevNet产生的结果$\mathbf{C}(x_{np})$均经过MLP,最终将得到的特征堆叠:
$$
\mathbf{h}_{fusion}=\begin{bmatrix} \mathbf{h}_{p,L_{p}}\
\mathbf{h}_{np,L_{np}}
\end{bmatrix}
$$
最终将融合的表征传入最终的MLP产生最终的结果:
$$
\begin{aligned}
\mathbf{h}_{\mathrm{fusion}}&=\sigma(\mathbf{W}_{f}\mathbf{h}_{\mathrm{fusion}}+\mathbf{b}_{f})\\
\hat{y}&=f_{out}(\mathbf{h}_{\mathrm{final}})
\end{aligned}
$$
AutoPNPNet
PNPNet处理数据前需要进行手动分类,为了避免手动分类的麻烦,我们直接将所有数据均传入两种编码器内部,得到同时具有周期与非周期数据处理后的结果$\mathbf{F}(x)\in \mathbb{R}^{d_{F}}$和$\mathbf{C}(x)\in \mathbb{R}^{d_{C}}$后经过MLP处理,一个注意力机制被使用来优化两个分支上的权重,注意力权重如下计算:
$$
\begin{aligned}
\alpha&=\mathrm{softmax}\left(\mathbf{W}_{att}\begin{bmatrix}
\mathbf{h}_{F,L_{F}}\
\mathbf{h}_{C,L_{C}}
\end{bmatrix}+\mathbf{b}_{att}\right)\\
\alpha&=\begin{bmatrix}
\alpha_{F}\ \alpha_{C}
\end{bmatrix}
\end{aligned}
$$
其中$\mathbf{W}_{att}\in \mathbb{R}^{2\times(h_{F}+h_{C})}$,$\mathbf{b}_{att}\in \mathbb{R}^2$均为可学习的参数,$\alpha_{F}+\alpha_{C}=1$。
随后通过权重计算合成的表征:
$$
\mathbf{h}_{\mathrm{fusion}}=\alpha_{F}\mathbf{h}_{F,L_{F}}+\alpha_{C}\mathbf{h}_{C,L_{C}}
$$
最后输入到MLP中产生预测结果。当然也可以将权重替换为交叉注意力机制,然后使用线性层、激活函数、层归一化、池化操作。
Training Objective
回归使用均方差(MSE)损失、分类使用交叉熵(CE)损失
周期性检验
对于PNPNet,我们需要确定周期性,所以我们使用ACF和波峰检测算法检测周期性。作者在文中提到了一种周期性的检测算法Periodicity Detection using ACF Peaks: