1.本发明涉及电力能源系统的负荷预测技术领域,具体涉及一种基于层次残差自注意力神经网络的长期电力负荷预测方法
背景技术:
2.电力负荷预测技术是智能电网系统组成中不可或缺的一部分业务,活跃的应用到许多场景下,如何有效去控制电能负荷达到供需平衡,已经成为现代化电力系统运行和管理中的一个重要的研究方向,电力系统的存在旨在为各类用户提供经济,可靠和高质量的电能,应随时满足客户的负荷需要,同时,未来将以新能源为新型的电力行业改革目标,这使得如何有效的保障电网的稳定运行,合理的制定发电计划成为了未来负荷预测的一大挑战。负荷预测的核心问题是如何获得预测对象的历史变化规律及其与某些影响因素的关系,预测模型实际上就是表达这种变化规律的数学函数,而负荷预测的挑战在于其会受到诸多的外部因素的影响,包括电力交易市场因素,国家政策因素,天气因素,居民用电习惯因素等等,这是待要解决的问题
3.用于负荷预测的模型本质上可以归类为用于时间序列预测的数学模型,常用的方法可以分为:传统统计学方法,基于机器学习的方法,基于深度学习的方法以及第三方工具预测方法。(1)基于传统统计学的方法,常见的包括自回归模型(auto regression,ar),自回归移动平均模型(auto regression moving average,arma)等时间序列模型,这些模型原理简单,适用于对小数量级下的平稳序列和简单非平稳序列进行分析,但是不适合解决非线性的预测场景,(2)基于机器学习的方法,机器学习是一个很大的门类,其中有许多适合解决非线性预测的模型,常见的包括支持向量机模型(support vector machines,svm),决策树模型,k近邻模型等,甚至还有预测能力更好的集成学习模型(xgboost,lightgbm)等,机器学习模型很好的解决了非线性问题,但是在大量级且高维的数据预测场景下会受制于其特征挖掘能力,构建机器学习预测模型往往需要人为手动的处理数据特征。(3)基于深度学习的方法,深度学习模型由于具备强大的拟合能力,能够自适应的挖掘并学习数据特征,非常适合解决非线性预测问题,常见的方法包括卷积神经网络(convolutional neural networks,cnn),长短期记忆网络(long short-term memory,lstm),门控循环单元(gate recurrent unit,gru)等,其中以lstm和gru为代表的循环神经网络广泛用于序列建模中,其具备很好的序列能力,但是循环神经网络由于是串行学习,在训练的过程中会逐渐失去对长距离历史特征的学习能力,且存在误差累积现象,所以往往会结合其他深度学习模型共同使用,(4)第三方工具预测法,近几年,一些大型的国内外公司也开源了其自研的时间序列预测方法,例如,facebook在2017年推出了prophet模型,该模型综合考虑了时间序列的趋势项,周期项,节假日项,模型使用简单,具备稳定的预测能力,之后,amazon在2018年推出了deepar模型,该模型使用了基于概率的自回归推理方式,减少了预测过程中的不确定性,这些工具的预测精准度显著,但是只能做到短期的预测,并不适用于实时性高,稳定性强的能源负荷场景中
技术实现要素:
4.本发明的目的旨在结合现有的技术,并针对现有的技术进行改进,优化了负荷预测模型在电力负荷预测场景下的建模效果,具体来说,本发明使用了神经网络的方式去建模,提出了一种基于层次残差自注意力机制的网络结构,用于对稳定且周期性较强的电力负荷数据进行长序列预测
5.为了达到上述发明目的,本发明采用的技术方案为:
6.一种基于层次残差自注意力神经网络的长期电力负荷预测方法,包括以下步骤:
7.步骤1.从时序数据库中获取机组负荷序列的源数据和传感器监测到的天气数据
8.步骤2.对源数据进行数据清洗,从清洗后的历史负荷数据与天气数据中进行特征提取,分别提取出负荷波动的趋势项,周期项,节假日项,天气项四大特征,将历史负荷序列数据与特征数据进行数据融合得到融合向量,用于下一步神经网络建模的输入
9.步骤3.利用本发明提出的层次残差自注意力神经网络对输入序列进行编码,提取并挖掘其中的重要特征,进行模型训练
10.步骤4.对待预测的源历史负荷数据提取出来的特征进行生成式编码,预测下一个时间步范围内的负荷序列。
11.本发明的有益效果:本发明提出的模型基于transformer神经网络,该网络结构的内部使用了自注意力机制,相比于传统循环神经网络更加具备捕捉全局特征的能力,本发明方法在其基础上,将transformer进行改进,将其作为子网络单元进行特征提取,同时加入了更多的残差连接,外部单元设计成层次结构,每一层都会对时间序列进行分解,将分解后的时间序列依次通过残差自注意力单元,最后通过底层的卷积网络重建时间序列,并进行生成式解码,预测出一整段的未来负荷数据。该方法相比于传统方法在特征挖掘能力,模型泛化能力上更加优秀和灵活,通过该方法实现负荷预测可以很好的降低中长期负荷预测的预测误差,为电力机组运行调配提供反馈指导,保证电力系统的稳定运行。
附图说明
12.图1为本发明实施例中一种基于层次残差自注意力神经网络的长期电力负荷预测方法的流程示意图;
13.图2是本发明实施例中一种基于层次残差自注意力神经网络预测模型的整体框架示意图;
14.图3是transformer神经网络模型的框架示意图;
15.图4是残差神经网络模型的框架示意图;
16.图5是本发明实施例中每一层改进的残差自注意力块的框架示意图;
17.图6是本发明实施例中使用生成式解码进行预测的框架示意图;
具体实施方式
18.以下结合附图对本发明作进一步说明,本发明的实施流程图如图1所示,
19.步骤1.确定开始时间t
start
和结束时间t
end
,使用中间件服务或者数据分析软件从存有机组负荷序列的数据库中读取指定时间范围内的负荷数据x
raw
,同理,读取出传感器搜集到的天气数据x
weather
,跳转至步骤2。
20.步骤2.从历史负荷数据和天气数据中提取序列特征数据并与源历史负荷数据进行数据融合,包括以下分步骤:
21.步骤2-1.天气数据特征的提取。
22.对传感器搜集到的天气数据进行编码,搜集到的数据中至少包括了温度数据,天气状态数据,时间戳数据等,对其数据进行分析,剔除其中偏离度过大的异常数据,对温度数据x
weather
(t)进行最大最小值归一化,其中归一化函数表示为:
[0023][0024]
同理对于其他数值型天气相关数据,都可以用上述方法进行特征归一化,有效帮助后续的特征融合,对于天气状态数据x
weather
(s)往往是类别型标签,形如[晴天,多云,小雨,暴雨,小雪,
…
],对于此类数据,采用独热编码的方法,将其转化为数值类型的数据,具体而言,每一个标签都会编码成为一个唯一的数值,独热编码的表示如下:
[0025]
状态晴天多云小雨暴雨小雪
……
编码值01234
……
[0026]
通过以上方式就可以实现对天气数据的特征处理。
[0027]
步骤2-2.历史负荷序列的趋势项特征与周期项特征的提取
[0028]
历史负荷序列特征是影响未来序列走势的主要因素,针对时间序列的非线性和时变性特征,将其通过浅层的神经网络进行特征分解,在分解之前,需要对数据进行数据清洗,对数据进行分析并且剔除其中偏移量过大的值,具体而言,定义了一个混合的序列分解层神经网络,原始输入为x
input
按照以下过程,可以生成趋势项特征和周期项特征:
[0029]
x
trend
=movingavg(x
input
)
[0030]
x
period
=x
input-x
trend
[0031]
其中movingavg是移动平均函数,在这里使用了一个一维卷积的平均池化操作得到,通过此操作就可以得到序列波动整体的趋势项,然后使用原序列减去趋势项就可以得到周期项
[0032]
步骤2-3.历史负荷序列的节假日项特征提取
[0033]
在负荷预测中,重要节假日的存在在一定程度上也影响着负荷的走势,具体而言,针对步骤1中提取的原负荷数据的时间戳x
timestamp
,使用python语言的pandas和numpy库对数据进行分析,计算出每个时间戳所在日期的扩展特征,包括所在日期的月份x
month
,日号x
day
,小时x
hour
,分钟x
minute
,星期x
weekday
,是否是工作日x
iswork
,是否是节假日x
isholiday
,是否是双休日x
isweekend
等更加细粒度的特征,此过程使用pandas的dataframe库对时间进行解析再进行分析,表示如下
[0034]
x
month
,x
day
,x
hour
,x
minute
,...=extend(x
timestamp
)
[0035]
x
timestamp
=linear(extend(x
timestamp
))
[0036]
其中extend是特征扩展函数,将扩展后的多维特征通过一个非线性转换层,转化为和源序列相同维度的数据形式,用于后续特征融合
[0037]
步骤2-4.特征嵌入融合
[0038]
通过前三个步骤,步骤2-1,2-2,2-3,就可以得到已有的特征数据集,x
weather
,
x
trend
,x
period
,x
trend
,x
timestamp
,接下来对这些特征进行融合,在这里使用加性模型进行融合,用于后续的层次残差神经网络输入,其表示为:
[0039][0040]
其中dropout是神经网络建模中常见的神经元失活率函数,目的是为了防止过拟合情况出现,relu是一种基于常见的激活函数,最后通过一个加性模型,就可以得到融合后的特征
[0041]
步骤3.利用本发明提出的层次残差自注意力神经网络对输入序列进行编码,提取并挖掘其中的重要特征,该模型整体示意图如图2所示,在本实施例中,步骤3具体包含以下分步骤:
[0042]
步骤3-1.序列特征分解。
[0043]
本发明的一大创新就是使用分层的分解序列建模过程去代替传统的线性建模过程,它通过在按照层数不断的对特征序列进行递归分解,然后使用残差自注意力网络对每一层的分解特征进行建模,最终能够更深层次的训练出更好的特征表达,具体来说,本发明提供的分解算法包括奇偶法分解和二分法分解,其中算法的伪代码表达如下:
[0044][0045]
其中,是源输入的混合特征序列,level是预设的层的数量,splitseries是序列分解函数,本发明提出的默认算法是采用二分法分解,分解出的两个特征分量x
left
,x
right
分别输入到残差块中进行更新,得到然后继续采用算法1进行递归分解,直到达到层数限制,最后使用merge函数返回合并后的序列
[0046]
步骤3-2.使用层次残差自注意力神经网络提取特征分量的信息
[0047]
本发明提出的层次残差自注意力神经网络的原型是transformer网络,其架构图如图3所示,具体来说,本发明使用了自注意力机制,相比于lstm和gru更具备挖掘时间序列之间依赖性的潜力,自注意力机制强调关注于全局,更好防止信息的损失。本发明在考虑了训练时间和预测精度上,对原有的transformer进行了改造,具体来说,将原有transformer编码器中的前馈神经网络更换为了参数量更小的卷积网络,同时针对本设计提出的层次结
构,加入了更多的跨层残差连接来平稳模型训练时的梯度变化,残差网络的基本结构如图4所示,最后,本设计对transformer解码器层进行了简化,更换为全连接层与高斯误差函数的组合,整体修改后的架构如图5所示
[0048]
在每一层,将特征分量x
input
输入到模型中,从而得到具有时序依赖性的时序特征信息x
dep
,表示为:
[0049]
x
dep
=residualattentionblock(x
input
)
[0050]
上述步骤3-2具体包括以下几个步骤:
[0051]
步骤3-2-1,将每一层划分后的单个时间特征分量x
input
输入到多头的残差自注意力块中,得到编码后的特征x
emded
,多头残差自注意力机制表示为:
[0052]
residualmultihead(h)=concat(head1,head2,...headn)wo[0053]
其中,residualmultihead表示多头残差自注意力层,h表示注意力头的数量,wo表示权重向量,即给多个头融合后的特征向量进行非线性转换,从而映射为指定的长度,head1,head2,...headn表示每一个头的自注意力层的输出,concat是张量拼接函数,每一个head的计算表示如下:
[0054][0055]
其中qi,ki,vi是每一个head中由输入数据进行编码之后通过非线性转换得到的,previ是前一层多头自注意力层计算出来的概率矩阵,将其结果传递到下一层,在很深的网络结构下依然能获得稳定而优秀的性能,通过使用多个头,获得最后的融合特征x
attn
,这些变量的表示如下:
[0056][0057][0058][0059][0060][0061]
步骤3-2-2:将多头自注意力层的输出特征输入到第一层正则化层normalization layer1,生成特征向量x
norm1
,并生成其副本x
norm2
,将x
norm1
输入到第二层一维卷积网络中得到编码向量x
conv
,将x
conv
和x
norm2
进行连接,通过第二层正则化层normalization layer2,生成接下来传递给下一层自注意力层的编码后的时间特征分量z,同时步骤3-2-1中计算出来的概率矩阵previ也传递给下一层,相关表达方式如下:
[0062]
x
norm1
=normalizationlayer1(x
attn
)
[0063]
x
norm2
=x
norm1
[0064]
x
conv
=dropout(relu(conv1d(x
norm1
)))
[0065]
z=normalizationlayer2(x
conv
x
norm2
)
[0066]
步骤3-2-3.重复步骤3-2-1和3-2-2,在层次残差块里编码器部分中每一层堆叠的残差注意力单元中都使用同样的操作。
[0067]
步骤3-2-4.将编码器最终编码的向量z输入到解码器进行解码,解码器改进于传统transformer结构,并做了适当的简化,表达如下:
[0068]
z=gelu(linear(dropout(z)))
[0069]
其中,dropout是一个超参数,代表神经网络中的神经元失活率,起到的是防止过拟合的作用,linear是简单的非线性转换函数,gelu是在序列建模中表现更好的高斯误差线性单元,在多个场景下综合表现最优异,其表达方式如下:
[0070][0071]
通过解码器解码后的时间分量特征,将具备非常好的上下文表达能力,将该时间分量z传递给下一层残差自注意力块。
[0072]
步骤3-2-5.循环步骤3-2-1,3-2-2,3-2-3,3-2-4,直到序列不能被分割(达到层数要求)
[0073]
步骤3-2-6.时间序列重建,通过3-2-1至3-2-5之间的步骤,原有的时间分量特征已经被切分为许多个同等长度的时间分量特征,按照原有的特征相对位置顺序进行还原,以下分别是采用奇偶分割策略和二分分割策略的分割和重建算法流程:
[0074]
[0075][0076]
采用如上方式对重建后的序列进行压缩,将压缩后的序列值与真实的序列值通过均方误差作为损失函数,来更新神经网络的参数,从而训练网络,设定压缩长度为embed_len,压缩后的向量用x
embed
来表达
[0077]
x
embed
=embed(x
t
,embed_len)
[0078]
最后通过均方误差(mean-square error,mse)作为损失函数来更新模型参数
[0079][0080]
其中是预测值,训练阶段用x
embed
表示,y
t
是真实值,训练阶段用x
true
表示
[0081]
步骤4设定预测步长,进行生成式解码,预测下一个时间范围内的负荷序列,具体来说,假设这一步已经获取到待要预测的重建序列特征数据,同样需要设定压缩长度embed_len,这里的压缩长度要小于重建序列的长度sequence_len,在这里默认设置重建序列的长度为96,压缩长度为48,通过此操作,重建序列将被压缩到指定长度的末尾一部分,如图6所示意,以下是整个过程的表达:
[0082]
x
embed
=embed(x
t
,embed_len)
[0083]
得到压缩序列后,本发明通过提出一种生成式解码方式来进行长序列预测,通过设定预测长度predict_len,初始化与预测长度同样维度的全零张量x
zero
,将x
embed
与x
zero
进行水平拼接,重新进行压缩,此次压缩的长度为predict_len,生成对历史序列的负荷预测x
pred
:
[0084]
x
pred
=embed(concat(x
embed
,x
zero
),predict_len)
[0085]
以上是本发明的较佳实施过程,凡依本发明技术所做的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。
转载请注明原文地址:https://tc.8miu.com/read-762.html