机器学习周报-文献阅读

发布于:2025-02-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

摘要

本周阅读了一篇基于并行结构TCN-LSTM和Savitzky-Golay滤波器的混合深度学习模型在风电功率预测中的应用为题的论文,文章提出一种基于并行架构TCN - LSTM的混合深度学习模型用于风电预测,采用Savitzky - Golay滤波器处理输入风速时间序列。通过三组对比实验,验证了该模型的有效性和优越性,在减少训练参数和计算时间的同时提高了预测性能,为风电预测深度学习网络混合模型开发提供了新方法。

abstract

This week, I read a paper titled “Application of a Hybrid Deep Learning Model Based on Parallel Architecture TCN-LSTM and Savitzky-Golay Filter in Wind Power Prediction.” The article proposes a hybrid deep learning model based on the parallel architecture of TCN-LSTM for wind power prediction, utilizing the Savitzky-Golay filter to process the input wind speed time series. Through three sets of comparative experiments, the effectiveness and superiority of the model were verified. It improves prediction performance while reducing the number of training parameters and computation time, providing a new approach for the development of hybrid models in deep learning networks for wind power prediction.

1 文献内容

论文题目:A hybrid deep learning model based on parallel architecture TCN-LSTM
with Savitzky-Golay filter for wind power prediction
期刊:Energy Conversion and Management
中科院分区:工程技术1区;影响因子:9.9

目前,各种预测方法层出不穷。风力发电预测方法可以根据其基本原理和方法分为不同类型,包括物理模型,统计模型,机器学习模型和混合模型。物理模式利用数值天气预报(NWP)和计算流体动力学来模拟风场,获得气象数据(风速和风向,压力,空气密度,温度和湿度等)和环境风场信息(地形、轮廓、障碍物等),并结合风功率曲线预测风电机组出力。

文章主要创新点:

  1. 针对复杂风电时间序列的特征信息提取问题,提出了一种具有独特结构的混合深度学习神经网络模型。该混合模型基于并行架构的概念,具有低水平的复杂性,并且可以更准确和有效地估计风功率。
  2. 建立了一种混合模型并行结构,使用张量级联模块在特征维上级联TCN和LSTM网络输出矩阵。该方法能较好地保持混合模型和混合模型所获得的特征信息,提高了混合模型的特征学习能力
  3. 采用SG滤波器(SG filter)对输入的风速序列进行平滑和去噪处理,进一步提高了模型的预测性能。

1.1 具有并行架构的混合深度学习模型

TCN和LSTM都有各自的优势,适用于不同的场景。TCN使用多栈扩张因果卷积过程来关注时间序列数据中的局部特征和长期依赖性。另一方面,LSTM使用门控单元来保持整个序列的全局感知,将先前的信息存储在埋层中以传输上下文信息。通过结合这两个模型,我们可以充分利用每个模型以更完整、更有效的方式捕获本地和全球时间模式。因此,作者引入了一个具有专门架构的深度学习神经网络,混合了TCN和LSTM。架构图如图所示。

在这里插入图片描述

如图为:传统的TCN-LSTM和提出的PA-TCN-LSTM。(n表示TCN堆叠层数; m是LSTM层数; o是最后一层TCN中的过滤器数量; p是最后一层LSTM中的单元数量)

1.2 时域卷积网络(TCN)

在这论文中,作者采用TCN网络提取风电时间序列数据中特定时间步长的特征通过训练实现特征和趋势学习,以改善未来的功率输出预测

1. 因果卷积(Causal Convolutions)

TCN使用因果卷积(Causal Convolution)来确保模型不会违反时间顺序。因果卷积的输出只依赖于当前时刻及其之前的输入,而不依赖于未来的输入。在标准的卷积操作中,每个输出值都基于其周围的输入值,包括未来的时间点。但在因果卷积中,权重仅应用于当前和过去的输入值,确保了信息流的方向性,避免了未来信息泄露到当前输出中。为了实现这一点,通常会在卷积核的右侧填充零(称为因果填充),这样只有当前和过去的信息被用于计算输出。

在这里插入图片描述
图1:卷积核为2

公式: y t = ∑ i = 0 k − 1 f ( i ) X t − i y_t=\sum^{k-1}_{i=0}f(i)X_{t-i} yt=i=0k1f(i)Xti

d表示扩张率(dilation factor),k表示卷积核大小(filter size)

因果卷积存在问题: 需要一个非常深的网络或非常大的filters来增加卷积的感受野

通过使用扩张卷积来实现非常深的网络和增加卷积的感受野大小

2. 扩张卷积(Dilated Convolutions)

一个简单的因果卷积只能回顾网络深度上有限大小的历史信息,在面对较长的历史的任务时,要如何解决?

使用扩张卷积来实现指数级大的感受野,使用扩张卷积,随着网络的深度以指数方式增加d(即 d = O ( 2 i ) d=O(2^i) d=O(2i) i i i 表示网络为第几层),这使卷积核可以命中有效历史中的每个输入,同时还允许使用更深的网络来处理非常大的有效历史。

下图为:扩张因果卷积图,其中扩张因子d=1,2,4;卷积核k大小=3

在这里插入图片描述

如图所示, 每一层中一个单元要回顾上一层中(k-1)×d个有效历史信息(扩张因子决定了卷积核中元素之间的间距,例如,如果扩张因子为2,则卷积核中的元素会间隔一个输入单元)。

公式:
y t = ∑ i = 0 k − 1 f ( i ) X t − d ⋅ i y_t=\sum^{k-1}_{i=0}f(i)X_{t-d·i} yt=i=0k1f(i)Xtdi
d表示扩张率(dilation factor),k表示卷积核大小(filter size)

3. 残差连接(Residual Connections)

TCN的感受野取决于

  1. 网络深度n;
  2. 卷积核大小k;
  3. 扩张因子d;

在实际预测中,可能取决于大小为 2 12 2^{12} 212的历史和高维输入序列,就需要多达12层的网络,就是每一层由多个用于特征提取的卷积核组合。在通用TCN模型中,采用了通用残差模块代替卷积层。

如图 TCN 结构图。 一个残差块包含两层的卷积和非线性映射,在每层中还加入了 WeightNorm 和 Dropout 来正则化网络。为什么要 1×1 卷积呢?1×1 卷积是可以用来降维的 。作者直接把较下层的特征图跳层连接到上层,对应的每个 Cell 的特征图数量(也就是通道数 channel)不一致,导致不能直接做类似 Resnet 的跳层特征图加和操作,于是,为了两个层加和时特征图数量吻合,用 1×1 卷积做了一个降维的操作。

在这里插入图片描述
TCN使用残差连接来缓解梯度消失问题并促进更深层网络的训练。残差连接是残差网络(ResNets)的关键组成部分,由何凯明等人提出。它的主要目的是解决深层神经网络训练中的梯度消失/爆炸问题,以及提高网络的训练效率和性能。在残差连接中,网络的某一层的输出直接加到几层之后的另一层上,形成所谓的“跳跃连接”。

具体来说,假设有一个输入 x x x,经过几层后得 F ( x ) F(x) F(x),那么最终的输出不是 F ( x ) F(x) F(x),而是 x + F ( x ) x+F(x) x+F(x),也就是输入+输出。这种结构允许梯度在反向传播时可以直接流回更早的层,减少了梯度消失的问题,并且使得网络能够有效地训练更深的架构。残差块的输出可以表示为:

o u t p u t = A c t i v a t i o n ( x + F ( x ) ) output=Activation(x+F(x)) output=Activation(x+F(x))

其中 F F F是卷积层和激活函数的组合。
残差连接如下图所示:

在这里插入图片描述

1.3 长短期记忆神经网络(LSTM)

LSTM网络单元中三个主要的门控机制:

1. 遗忘门(Forget Gate):
决定哪些信息需要从单元状态中丢弃。
公式:
在这里插入图片描述

其中 f t f_t ft是遗忘门的激活向量, σ g \sigma_g σg是门控的激活函数, W f , U f , b f W_f,U_f,b_f Wf,Uf,bf是需要在训练过程中学习的权重矩阵和偏置向量。

2. 输入门(Input Gate):

决定哪些新的信息需要添加到单元状态中。

公式:在这里插入图片描述
其中 i t i_t it是输入门的激活向量。

3. 输出门(Output Gate):
决定单元状态的哪些部分将被输出。
公式:在这里插入图片描述

其中 o t o_t ot是输出门的激活向量。

4. 单元状态更新(Cell State Update)

在这里插入图片描述

c ˇ t \check c_t cˇt是单元输入激活向量, σ c \sigma _c σc是激活函数。

5. 最终单元状态和隐藏状态:
单元状态更新:

在这里插入图片描述

隐藏状态更新:

在这里插入图片描述
其中 c t c_t ct是单元状态向量, h t h_t ht是隐藏状态向量,也是LSTM单元的输出向量,在这里插入图片描述
表示Hadamard积(元素乘积)

LSTM通过引入三个门控机制(输入门、输出门和遗忘门)来控制信息的流动,从而有效地捕捉时间序列中的长期依赖关系。

在这里插入图片描述

如图展示了LSTM网络的架构和逻辑结构。LSTM网络由多层LSTM单元组成,每层包含多个LSTM单元。每个LSTM单元接收前一层的输出作为输入,并生成当前层的输出和隐藏状态。这种层叠结构允许网络捕捉更复杂的时间序列特征。
其中:

输入层: 时间序列数据 x t − n , x t − ( n − 1 ) , x t x_{t-n},x_{t-(n-1)},x_t xtn,xt(n1),xt

隐藏层: 由多个LSTM单元组成,每个单元处理输入数据并更新其内部状态。

输出层: 根据需要,可以是单个或多个LSTM单元,用于生成最终的输出。

1.4 Tensor concatenate module

论文中提到的“张量拼接模块(Tensor concatenate module)”是PA-TCN-LSTM模型架构中的关键组成部分。这一模块的作用是将来自TCN(时间卷积网络)和LSTM(长短期记忆网络)的输出沿着特定的轴(这里是特征轴)进行拼接,以保留两个模型学习到的全面特征信息。 这种拼接操作有助于模型更全面地捕捉时间序列数据中的局部特征和长期依赖关系。

  • 输入: 模块接收来自TCN的最终堆叠层和LSTM的最后一层的输出,这两个输出都以二维张量结构表示。其中,TCN的输出用o表示,LSTM的输出用p表示。
  • 拼接操作: 模块沿着特征轴(feature axis)进行拼接。特征轴的维度对应于批量大小(batch size)。拼接操作的目的是将两个模型的输出合并,以便在后续的处理中可以同时利用这两种信息。

如图为张量连接模块的功能图
在这里插入图片描述

如图所示:
Model 1 Output(橙色框):表示来自模型1(TCN)的特征,具有o个特征。
Model 2 Output(蓝色框):表示来自模型2(LSTM)的特征,具有p个特征。
Tensor Concatenate on feature axis(绿色框):表示沿着特征轴进行的拼接操作,结果是一个包含 o + p o+p o+p个特征的新张量。

2 实验

2.1 数据处理

1. SG滤波器去噪

Savitzky-Golay(SG)滤波器由于其固有的平滑特性和对参数调整的最小需要而非常适合于数据去噪。为此,采用SG滤波器对与有功功率关联度最强的风速序列进行平滑去噪处理,然后用平滑去噪后的风速序列代替原风速序列训练深度学习网络模型。SG滤波器提供两个可调自由度:数据帧长度和多项式阶数。论文中作者采用多项式阶数为2、数据帧长度为5的SG滤波器来减轻风速数据噪声。去噪结果如图所示。可以看出,数据更加平滑,去噪效果较好.
在这里插入图片描述
如图所示:去噪效果。图(a)示出了全部数据;图(b)示出了500个连续样本数据的去噪结果。图©示出了200个连续样本数据的去噪结果。

2. 数据拆分和规范化

数据集按7:1:2的比例分为训练集、验证集和测试集。每个数据集根据公式: y n o r m = x − x m i n x m a x − x m i n y_{norm}=\frac{x-x_{min}}{x_{max-x_{min}}} ynorm=xmaxxminxxmin进行规范化。
其中 y n o r m y_{norm} ynorm是归一化值,x是原始数据, x m a x x_{max} xmax x m i n x_{min} xmin分别是最大值和最小值。

2.2 评估指标

文中采用归一化平均绝对误差(nMAE)归一化均方误差(nMSE)归一化均方根误差(nRMSE)R的平方( R 2 R^2 R2 作为评估指标来评估模型的预测性能。此外,nMSE在模型训练期间用作精度测量。其中 y i y_i yi是实际值, y i ^ \hat{y_i} yi^是预测值,N是样本总数.

n M A E = 1 N ∑ i = 1 N ∣ y i − y i ^ ∣ nMAE=\frac{1}{N}\sum^N_{i=1}|y_i-\hat{y_i}| nMAE=N1i=1Nyiyi^

n M S E = 1 N ∑ i = 1 N ( y i − y i ^ ) 2 nMSE=\frac{1}{N}\sum^N_{i=1}(y_i-\hat{y_i})^2 nMSE=N1i=1N(yiyi^)2

n R M S E = 1 N ∑ i = 1 N ( y i − y i ^ ) 2 nRMSE=\sqrt{\frac{1}{N}\sum^N_{i=1}(y_i-\hat{y_i})^2} nRMSE=N1i=1N(yiyi^)2

R 2 = 1 − ∑ i = 1 N ( y i − y i ^ ) 2 ∑ i = 1 N ( y i − y i ˉ ) 2 R^2=1-\frac{\sum^N_{i=1}(y_i-\hat{y_i})^2}{\sum^N_{i=1}(y_i-\bar{y_i})^2} R2=1i=1N(yiyiˉ)2i=1N(yiyi^)2

2.3 实验结果

  1. SG滤波器的影响
    使用SG滤波器对风速时间序列数据进行去噪和平滑处理,显著提高了模型的预测性能。与使用原始数据相比,使用经过滤波的数据作为模型输入,TCN模型的nMAE、nMSE和nRMSE分别降低了29.09%、51.18%和30.69%,R²增加了1.55%。对于LSTM模型,相应的指标分别降低了12.56%、23.65%和12.71%,R²增加了0.72%。对于CNN-LSTM模型,nMAE、nMSE和nRMSE分别降低了35.92%、59.15%和36.19%,R²增加了1.85%。对于PA-TCN-LSTM模型,nMAE、nMSE和nRMSE分别降低了31.51%、57.70%和34.98%,R²增加了1.67%。

在这里插入图片描述

  1. 超参数优化
    通过调整多个参数(如TCN滤波器数量、LSTM单元数量、TCN滤波器大小、LSTM激活函数、训练批量大小和训练优化器),找到了模型的最佳配置。
    最佳配置为:TCN滤波器和LSTM单元数量均为64,TCN滤波器大小为3,LSTM激活函数为’Tanh’,训练批量大小为32,使用’Adam’优化器。

在这里插入图片描述

  1. 模型性能比较
    PA-TCN-LSTM模型在预测性能上优于九种单一模型(KNN、SVR、XGBoost、RandomForest、MLP、RNN、LSTM、CNN和TCN)。
    与KNN相比,nMAE的最大降低为58.26%,最小降低为4.82%(TCN)。
    nMSE的最大降低为80.71%(KNN),最小降低为6.90%(TCN)。
    nRMSE的最大降低为56.10%(KNN),最小降低为3.51%(TCN)。
    R²的最大增加为3.50%(KNN),最小增加为0.06%(TCN)。
    在这里插入图片描述
    与常用的CNN-LSTM混合模型相比,PA-TCN-LSTM模型的nMAE、nMSE和nRMSE分别降低了22.70%、26.37%和14.09%
    与具有相同超参数设置的TCN-LSTM混合模型相比,训练参数减少了6.59%,计算时间减少了25.82%,nMAE降低了2.00%,nMSE降低了9.21%,nRMSE降低了4.74%。

3 Savitzky-Golay滤波器(SG filter)

Savitzky-Golay滤波器的核心思想是在数据的局部邻域内进行多项式拟合,然后使用拟合的多项式来估计该邻域中心点的值。这种方法可以有效地保留数据的高频特征(如峰值),同时减少随机噪声。

具体步骤:

  1. 选择窗口大小(Frame Length)
    窗口大小决定了用于拟合的点的数量。窗口越大,平滑效果越明显,但可能会导致信号细节的丢失。
  2. 选择多项式的阶数(Polynomial Order)
    多项式的阶数决定了拟合的复杂度。阶数越高,拟合曲线越能适应数据的变化,但也可能引入过拟合。
  3. 多项式拟合
    在每个窗口内,使用最小二乘法对选定的多项式进行拟合,得到拟合曲线。
  4. 估计中心点
    使用拟合的多项式估计窗口中心点的值。
  5. 滑动窗口
    将窗口滑动到下一个位置,重复步骤3和4,直到处理完整个数据序列。

SG filter优点:
1. 保留波形特征: 与其他平滑方法相比,SG滤波器能够更好地保留数据的波形特征,如峰值、宽度和面积。
2. 参数可调: 通过调整窗口大小和多项式阶数,可以灵活控制平滑效果和特征保留程度。

在该论文中,作者使用SG滤波器对风速时间序列数据进行去噪和平滑处理。风速数据通常包含噪声,这些噪声可能来自传感器误差、数据传输错误等。通过应用SG滤波器,可以减少这些噪声,提高数据质量,从而降低模型特征学习的复杂度,并可能提高预测性能

使用Python和SciPy库实现SG滤波器的简单示例:

import numpy as np
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt

# 生成示例数据:正弦波加上高斯噪声
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x) + np.random.normal(0, 0.2, 100)

# 使用SG滤波器进行平滑处理
y_smooth = savgol_filter(y, window_length=51, polyorder=3)

# 绘制原始数据和平滑后的数据
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='Original data')
plt.plot(x, y_smooth, label='Smoothed data', color='red')
plt.legend()
plt.show()

在这里插入图片描述

4 代码

PyTorch中实现张量拼接模块(Tensor concatenate module),使用torch.cat函数来沿着指定的维度拼接张量。

import torch
import torch.nn as nn

# 假设我们有两个2D张量,分别来自TCN和LSTM的输出
# 张量的形状为 (batch_size, features)
tensor_tcn = torch.randn(32, 10)  # 假设batch_size为32,TCN输出的特征数为10
tensor_lstm = torch.randn(32, 20)  # 假设LSTM输出的特征数为20

# 使用torch.cat沿着特征轴(dim=1)拼接这两个张量
concatenated_tensor = torch.cat((tensor_tcn, tensor_lstm), dim=1)

print(concatenated_tensor.shape)  # 输出: torch.Size([32, 30])
print(concatenated_tensor)  

class TensorConcatenateModule(nn.Module):
    def __init__(self):
        super(TensorConcatenateModule, self).__init__()

    def forward(self, tensor_tcn, tensor_lstm):
        # 沿着特征轴拼接张量
        return torch.cat((tensor_tcn, tensor_lstm), dim=1)

# 创建模型实例
model = TensorConcatenateModule()

# 假设我们有TCN和LSTM的输出
output_tcn = torch.randn(32, 10)
output_lstm = torch.randn(32, 20)

# 通过模型传递输出并拼接
output = model(output_tcn, output_lstm)

print(output.shape)  # 输出: torch.Size([32, 30])
print(output)  

在这里插入图片描述

在这里插入图片描述

总结

文章提出了一种基于带SG滤波器的TCN-LSTM并行架构的新型混合深度学习模型。TCN采用多栈扩张因果卷积过程来关注时间序列数据中的局部特征和长期依赖关系,而LSTM使用门控单元来保持对整个序列的全局感知。张量连接模块用于创建并行架构,以连接学习到的特征信息,并更彻底地提取数据的时间相关性。在模型训练阶段,采用SG滤波器对输入的风速时间序列进行降噪和平滑处理,使数据的时间特性更加明显,降低了模型特征学习的复杂度。同时我学习了Savitzky-Golay滤波器相关内容和论文中张量拼接模块的实现代码.