摘要
在本周阅读的论文中,作者提出了一种名为TCLN的融合模型。TCLN 通过融合多核卷积、Transformer 和LSTM,实现了对时间序列的空间特征和时序特征的高效提取。模型利用多核卷积并行处理不同大小的卷积核,扩展了感受野并增强了变量之间多尺度空间关系的建模能力;通过在编码器中融入LSTM来弥补Transformer在捕捉局部时序依赖方面较弱的问题;其简洁高效的解码器通过特征融合、ReLU 激活和线性映射能够快速生成预测结果,计算效率高。此外,TCLN 通过引入自回归组件来补充线性趋势的建模,进一步提升了预测的鲁棒性和对不同数据尺度的适应性。TCLN 的设计充分利用了各组件的优势,实现了对多变量时间序列的全面特征提取和精准预测。
Abstract
In the paper read this week, the author proposed a fusion model called TCLN. TCLN achieves efficient extraction of spatial and temporal features of time series by integrating multi-core convolutional neural networks, Transformers, and LSTM. The model utilizes multi kernel convolution to parallelly process convolution kernels of different sizes, expanding the receptive field and enhancing the modeling ability of multi-scale spatial relationships between variables; Integrating LSTM into the encoder to compensate for the weak capture of local temporal dependencies in Transformers; Its concise and efficient decoder can quickly generate prediction results through feature fusion, ReLU activation, and linear mapping, with high computational efficiency. In addition, TCLN supplements the modeling of linear trends by introducing autoregressive components, further enhancing the robustness of predictions and adaptability to different data scales. The design of TCLN fully utilizes the advantages of each component, achieving comprehensive feature extraction and accurate prediction of multivariate time series.
1 文献阅读
本周阅读了一篇名为 TCLN: ATransformer-based Conv-LSTMnetworkformultivariate time series forecasting的论文。
论文地址:ATransformer-based Conv-LSTMnetworkformultivariate time series forecasting
在论文中,作者提出了名为 TCLN的融合模型,TCLN通过整合多核CNN、Transformer、LSTM和AR,充分利用各自优势,显著提升了MTSF的预测精度。通过实验证明,其在长时预测和工业场景中表现突出,优越性明显。
1.1 相关知识
1.1.1 多核卷积
在 MTSF任务中,变量之间不仅存在时序上的依赖关系,还具有复杂空间相关性。传统的CNN通常使用固定大小的卷积核,这限制了模型在不同空间尺度上捕捉特征的能力,尤其是在处理高维或复杂结构数据时,单一尺度的卷积核难以充分建模变量间的多层次空间关系。为此,论文引入了多核卷积模块,通过并行使用多个不同大小的卷积核,扩展模型的感受野,从而同时提取局部和全局的空间特征。其结构如下图所示:
其中包含多个并行的卷积层,每层使用不同大小的卷积核,例如1x1、3x3、5x5等,以捕捉不同尺度的空间特征。这种设计能够让模型在同一时间步内,从多种空间范围提取信息。为了确保不同卷积层的输出维度一致,论文通过调整核大小(K)、步幅(S)和填充(P)等参数进行优化。例如,对于输入宽度为W的数据,各卷积层的输出维度统一为(W-1, 1)。所有并行卷积层的输出通过加和操作融合,生成最终的空间特征向量。这种融合方式综合了不同尺度的特征信息,提升了模型对数据的表达能力。过程如下图所示:
对于时间序列的每个时间步,输入数据单独通过多核CNN处理,以保留时序信息。输入数据表示为X(X1,X2,…,Xt),Xt表示第t个时间步的二维数据。以下是对论文中的多核卷积的简单代码实现:
# 定义多核CNN类
class MultiKernelCNN(nn.Module):
def __init__(self, in_channels, out_channels, kernel_sizes):
super(MultiKernelCNN, self).__init__()
# 创建一个卷积层列表,每个卷积层对应一个不同的核大小
self.convs = nn.ModuleList()
for k in kernel_sizes:
padding = (k - 1) // 2 # 计算padding以保持输出维度一致
self.convs.append(nn.Conv2d(in_channels, out_channels, kernel_size=k, padding=padding))
def forward(self, x):
# 对输入分别应用每个卷积核,得到多个特征图
conv_outputs = [conv(x) for conv in self.convs]
# 将所有特征图加和融合
fused = sum(conv_outputs)
return fused
# 示例用法
in_channels = 1 # 输入通道数
out_channels = 1 # 输出通道数
kernel_sizes = [1, 3] # 卷积核大小列表
# 初始化模型
model = MultiKernelCNN(in_channels, out_channels, kernel_sizes)
# 生成随机输入数据 (batch_size=1, channels=1, height=2, width=2)
input_data = torch.tensor([[[[1, 2], [3, 4]]]], dtype=torch.float32)
# 手动设置卷积核权重,便于验证结果
with torch.no_grad():
model.convs[0].weight.fill_(1) # 1x1卷积核权重设为1
model.convs[1].weight.fill_(0.5) # 3x3卷积核权重设为0.5
# 前向传播
output = model(input_data)
print("融合特征:\n", output)
# 全局平均池化
pooled = torch.mean(output)
print("池化后的特征:", pooled.item())
其中只使用到了11和33两种卷积核,变量数为4个,时间窗口为1个时间步。输入矩阵为一个2*2的矩阵。输入数据为[1,2,3,4]。得到的输出如下:
融合特征:
tensor([[[[6.0000, 7.0000],
[8.0000, 9.0000]]]], grad_fn=<AddBackward0>)
池化后的特征: 7.5
1.1.2 编码器
模型的编码器由Transformer的编码器和LSTM相结合构成,并通过多层堆叠、跳跃连接和残差连接增强其性能。这种结构充分利用了Transformer在处理长序列依赖上的优势以及LSTM在捕捉时序依赖上的能力,以此高效的提取多变量时间序列的复杂特征。其结构如下所示:
与传统transformer相比,TCLN的编码器的主体部分还是transformer的编码器,通过融入LSTM来弥补Transformer在捕捉局部时序依赖方面较弱的问题,同时为了将输入特征的维度调整到与位置编码一致还添加了一个Dimension Transformatio。其通过线性变换(全连接层)实现维度映射。从而确保输入特征与位置编码维度匹配,便于后续计算。为提高深层网络的训练稳定性,防止性能退化,模型在多头注意力、前馈层以及LSTM后分别使用残差连接(Add)和层归一化(Norm),以稳定训练过程。
除此,编码器由多个相同的层堆叠组成,以此增强特征的深层表示能力,在多层之间添加跳跃连接从而避免信息丢失,提升模型性能。编码器的代码实现如下所示:
# 编码器(Transformer + LSTM)
class Encoder(nn.Module):
def __init__(self, input_dim, d_model, nhead, num_layers, lstm_hidden_dim, dropout=0.1):
super(Encoder, self).__init__()
self.input_proj = nn.Linear(input_dim, d_model)
self.pos_encoder = PositionalEncoding(d_model)
self.transformer_layers = nn.ModuleList([
TransformerEncoderLayer(d_model, nhead, dropout=dropout) for _ in range(num_layers)
])
self.lstm = nn.LSTM(d_model, lstm_hidden_dim, batch_first=True)
self.output_proj = nn.Linear(lstm_hidden_dim, d_model)
def forward(self, x):
x = self.input_proj(x) # (batch_size, t_w, d_model)
x = x.permute(1, 0, 2) # (t_w, batch_size, d_model)
x = self.pos_encoder(x)
for layer in self.transformer_layers:
x = layer(x)
x = x.permute(1, 0, 2) # (batch_size, t_w, d_model)
lstm_out, _ = self.lstm(x) # (batch_size, t_w, lstm_hidden_dim)
output = self.output_proj(lstm_out) # (batch_size, t_w, d_model)
return output
1.1.3 解码器
模型的解码器的结构设计简洁,仅通过加和、ReLU激活和线性层即可完成特征整合和输出映射,其结构如下所示:
其首先将多个编码器的输出与AR的输出整合为一个综合特征向量。其中编码器输出的特征包含时间序列的非线性模式,而自回归组件则提供了线性趋势的补充。通过特征融合,模型能够同时利用非线性和线性信息,从而提高预测的全面性和准确性。后使用ReLU激活函数,对该融合的特征向量进行非线性变换再经一个全连接层将特征向量映射到最终的预测值上。
1.2 总体架构
TCLN的总体架构如下图所示:
其主要整合了多核CNN、Transformer编码器、LSTM和AR组件。利用多核卷积提取变量间的空间特征,通过结合Transformer和LSTM使得编码器更容易捕获长期时序和时空相关性。利用自回归组件提供线性预测,增强模型稳定性。
为了模拟图像输入,且便于多核处理空间关系。模型首先将数据的一维向量预处理为二维矩阵。后通过多核卷积提取空间特征,再经编码器提取时序和时空特征,后将编码器的输出与自回归组件的输出经解码器生成最终预测,其代码实现如下所示:
class TCLN(nn.Module):
def __init__(self, input_dim, p, d_model, nhead, num_encoder_layers, lstm_hidden_dim, dropout=0.1):
super(TCLN, self).__init__()
self.p = p # 二维矩阵大小
self.multi_cnn = MultiKernelCNN(in_channels=1, out_channels=1)
self.encoder = Encoder(p-1, d_model, nhead, num_encoder_layers, lstm_hidden_dim, dropout)
self.ar = AR(input_dim, window_size=p*p)
self.decoder = nn.Sequential(
nn.ReLU(),
nn.Linear(d_model + 1, 1) # 融合编码器输出和AR输出
)
def forward(self, x):
# 输入 x: (batch_size, t_w, input_dim)
batch_size, t_w, input_dim = x.size()
# 数据预处理:转换为二维矩阵
x_2d = x.view(batch_size * t_w, 1, self.p, self.p) # (batch_size * t_w, 1, p, p)
# 多核CNN
cnn_out = self.multi_cnn(x_2d) # (batch_size * t_w, 1, p-1, p-1)
cnn_out = cnn_out.mean(dim=(2, 3)) # 池化:(batch_size * t_w, 1)
cnn_out = cnn_out.view(batch_size, t_w, -1) # (batch_size, t_w, 1)
# 编码器
encoder_out = self.encoder(cnn_out) # (batch_size, t_w, d_model)
encoder_out = encoder_out[:, -1, :] # 取最后一个时间步:(batch_size, d_model)
# 自回归
ar_out = self.ar(x) # (batch_size, 1)
# 解码器:融合编码器和AR输出
combined = torch.cat([encoder_out, ar_out], dim=1) # (batch_size, d_model + 1)
output = self.decoder(combined) # (batch_size, 1)
return output
1.3 实验分析
(1)数据集
NASDAQ100: 2016年7月26日至12月22日,82只股票,长度40560,每日390点(部分日期210或180点),目标为“AAL”股票价格。
SML2010: 40天内22个传感器数据,长度4137,采样间隔15分钟,目标为室内温度。
Solar Energy: 2006年Alabama州137个光伏电站数据,长度52560,采样间隔10分钟,目标为首站产量。
TIOB: 笔记本制造厂板级测试数据,8个测试项,长度9577,值域为{0,1},目标为“Test Item 1”产量(窗口大小100,步幅1计算)。
训练集:验证集:测试集 = 8:1:1,多次随机种子实验取平均值。
(2)评估标准
MAE:
RSME:
MAPE:
(2)实验结果
为测试TCLN在预测未来一个时间步时的准确性和稳定性,评估其对即时模式和变量间相关性的建模能力。作者首先进行了短时预测实验,实验结果如下所示:
从上述结果可以看出,与其他基线模型相比。TCLN在单步预测中表现出色,优于所有基准模型。模型能够有效捕捉多变量时间序列的即时模式和相关性。TCLN在不同领域的数据集上均表现良好,具有较强的泛化能力。
为了测试TCLN在较长预测范围内的性能,作者又进行了长时预测实验,实验结果如下:
从上述结果可以看出,TCLN在多步预测中保持了较好的稳定性,预测误差随时间增加但仍在可接受范围内。混合架构成功捕获了长距离依赖,提升了长时预测能力。模型在长期趋势建模上表现出较高的可靠性。
除了公共数据集外,TCLN还应用于测试项目的真实产量预测。测试项目的良率对于板级功能测试非常重要。准确的良率预测可以帮助工厂提前制定测试策略,提高工厂的经济效益。预测结果如下图所示。
虽然所有测试项的数据都是不规则的。特别是对于目标变量Test Item 1,变化趋势比其他变量更复杂。但是预测结果虽然存在一些偏差,但仍然令人满意。
为测试TCLN的混合架构是否必要,是否存在多余部分,确保设计的科学性。作者通过移除多核CNN、Transformer、LSTM和自回归(AR)组件,量化每个模块对模型性能的影响。实验结果如下:
从实验结果来看,每个组件(多核CNN、Transformer、LSTM、AR)都对模型性能有显著贡献,缺一不可。TCLN的混合架构设计合理,协同作用显著提升了预测能力。
总结
通过本次的学习,我明白融合模型其原理就是结合各模型的优势而改进模型本身存在的短板,例如这力的TCLN就是将LSTM融入到transformer中从而弥补Transformer在捕捉局部时序依赖方面较弱的问题。