一种基于Transformer序列到序列模型的径流预测方法

文档序号:31721212发布日期:2022-10-04 23:20阅读:78来源:国知局
一种基于Transformer序列到序列模型的径流预测方法
一种基于transformer序列到序列模型的径流预测方法
技术领域
1.本发明属于机器学习技术领域,具体涉及一种径流预测方法。


背景技术:

2.降雨-径流建模是水文科学中非常重要的一项任务,它利用降雨量等气象数据和静态属性来预测径流值,由于流域水文特征、流域边界条件、人类活动、降雨的时空分布等复杂因素的影响,导致了异常复杂的水文过程。径流预测模型有许多方法,主要可以分为包括物理模型和数据驱动模型,物理模型基于实际的物理过程但受限于简化的假设,难以模拟非线性的水文过程。近年来,基于数据驱动的径流预测方法受到了广泛的关注,特别地,基于长短时记忆网络(lstm)等改进版循环神经网络(rnn)展现了多步超前预测的良好性能,能够胜任很多序列到序列建模任务。然而,无论何种改进版的循环神经网络都无法从根本上解决梯度消失的问题,从而无法真正捕获与生成长时间序列;此外,由于循环神经网络自身结构具有关于顺序性和时间局部性的偏置假设,因此难以胜任超大规模数据集上的任务。


技术实现要素:

3.为了克服现有技术的不足,本发明提供了一种基于transformer序列到序列模型的径流预测方法,首先准备好数据集,读入数据并进行预处理,得到可用的序列数据;其次将经过预处理的数据集划分成训练集、验证集、测试集三个互斥的子集;然后构建transformer序列到序列模型;接着定义损失函数和优化器,并训练模型;最后对训练完成的模型进行测试。数据集上的实验结果表明,相对于已有的基于数据驱动的序列到序列模型比较,本发明获得的径流预测结果具有较高的预测精度。
4.本发明解决其技术问题所采用的技术方案包括如下步骤:
5.步骤1:准备数据集并进行预处理;
6.收集研究流域内的气象数据以及水文站点的径流数据,构成原始数据集;然后对原始数据集进行预处理,预处理过程包括空值处理、数据选择、标准化和数据序列化;
7.步骤2:将预处理过的数据集划分出训练集、验证集、测试集三个互斥的集合;
8.步骤3:构建transformer序列到序列模型;
9.transformer序列到序列模型的架构包括:输入变换层、位置编码层、编码器、解码器、输出变换层和输出选择操作,具体步骤如下:
10.步骤3-1:输入变换层对输入数据的维度进行变换,统一数据维度;
11.步骤3-2:位置编码层向输入数据注入位置信息;
12.步骤3-3:编码器由多个编码器层前后串接而成,每个编码器层包含两个子层:多头自注意力和全连接层,每个子层之后都需要接入残差连接和层归一化;
13.编码器的输入序列为:
14.(x1,x2,

,x
past_len+pred_len
)
15.其中past_len表示已知的序列长度,pred_len表示预测的序列长度;
16.步骤3-4:解码器由多个解码器层前后串接而成,每个解码器层包含三个子层:多头自注意力、多头交叉注意力和全连接层,每个子层之后都接入残差连接和层归一化;
17.解码器的输入序列为:
18.(y1,y2,

,y
past_len
,01,02,

,0
pred_len
)
19.其中past_len表示已知的序列长度,pred_len表示预测的序列长度,01,02,

表示使用0进行填充,一共有pred_len个位置需要填充0;
20.步骤3-5:多头自注意力和多头交叉注意力;
21.计算:
22.q=wqi123.k=wki224.v=wvi3[0025][0026]
其中,wq、wk、wv是可学习参数矩阵,softmax表示进行softmax操作,当输入i2和i3相同并且与输入i1不同时,attn(q,k,v)称为交叉注意力;当三个输入i1,i2,i3都相同时,attn(q,k,v)称为自注意力;q表示i1经过参数为wq的线性变换得到的结果,k表示i2经过参数为wk的线性变换后得到的结果,v表示i3经过参数为wv的线性变换后得到的结果;
[0027]
多头注意力计算公式如下:
[0028][0029]
multiheadattn(q,k,v)=concat(head1,

,headh)wo[0030]
其中,w
iq
,wo是可学习参数矩阵,h表示头数,i的取值范围从1到h;head1,

,headh表示头;
[0031]
当输入i2和i3相同并且与i1不同时,multiheadattn(q,k,v)称为多头交叉注意力;当三个输入i1,i2,i3都相同时,multiheadattn(q,k,v)称为多头自注意力;
[0032]
步骤3-6:残差连接计算公式如下:
[0033]
o=x+sublayer(x)
[0034]
其中,x表示子层的输入,sublayer(x)表示子层的输出,o表示最终输出;
[0035]
步骤3-7:层归一化,对最后的输出维度进行标准化;
[0036]
步骤3-8:输出变换层对解码器的输出维度进行变换,使输出符合最终的输出维度;
[0037]
将解码器的输出序列(o1,o2,

,o
past_len+pred_len
)放入全连接层,得到输出变换层的输出序列
[0038]
步骤3-9:输出选择操作是对输出变换层的输出序列进行选择的过程,将该序列进行切割,
被舍弃掉,只保留的部分作为最终的输出;
[0039]
步骤4:将训练集的气象数据输入输入变换层得到变换后的数据,再通过位置编码层后,送入编码器处理得到编码器输出;
[0040]
将训练集的径流数据经过输入变换层得到变换后的数据,再通过位置编码层后,与编码器输出一起送入解码器处理得到解码器输出;然后,输出变换层对解码器输出进行维度变换,使其符合最终输出的维度;最后,通过输出选择操作对输出变换层的输出序列进行选择;
[0041]
步骤5:定义损失函数和优化器,并训练模型;
[0042]
训练时的损失函数采取平滑nse损失函数,其计算公式如下:
[0043][0044]
其中,n是小批量样本数量,dn是第n个样本的预测天数,是第d天的预测值,yd是第d天的径流真实值,sb是该样本对应站点所有数据径流真实值的标准差,∈表示常数;
[0045]
模型进行多次迭代训练,在每次迭代完成后,使用测试集数据评估模型的性能,并且使用纳什效率系数nse作为指标,nse计算公式如下:
[0046][0047]
其中,是第n个样本径流真实值的均值;
[0048]
步骤6:测试模型;
[0049]
使用测试集对训练完成后的模型进行测试,得到预测结果,并根据真实数据对预测结果进行评估。
[0050]
优选地,所述对原始数据集预处理的标准化公式为:其中x表示原始数据,表示样本均值,s表示样本标准差,z表示标准化之后的数据。
[0051]
优选地,所述对原始数据集预处理的数据序列化是使用滑动窗口的方式,滑动窗口进行序列化的公式如下:
[0052][0053]
其中,zi表示序列化之后的第i个序列,xi表示原始数据集的第i个特征,n表示原始数据集大小,l表示滑动窗口的大小。
[0054]
本发明的有益效果如下:
[0055]
本发明利用深度学习算法进行多步超前径流预测,减少了对水文物理机制的依赖性,有效扩大了模型的适用范围。针对现有模型预测精度不足的问题,提出了一种基于transformer序列到序列模型的径流预测方法。首先,充分利用了transformer的弱归纳偏
置性,证明其能够胜任超大规模气象-水文数据集上的任务,transformer所具有的注意力机制能够选择重要位置上的特征,抑制无关位置上的特征;其次,transformer的整体架构设计以及残差连接和层归一化的使用,能够从根本上解决梯度消失的问题,从而具有真正捕获与生成长时间序列的潜力。因此,模型能够在超大规模气象-水文数据集上进行更优的多步超前径流预测。
附图说明
[0056]
图1是本发明方法的流程图。
[0057]
图2是本发明方法多头注意力的计算示意图。
[0058]
图3是本发明方法transformer模型的结构示意图。
具体实施方式
[0059]
下面结合附图和实施例对本发明进一步说明。
[0060]
一种基于transformer序列到序列模型的径流预测方法,包括如下步骤:
[0061]
步骤1:准备数据集并进行预处理;
[0062]
收集研究流域内的气象数据以及水文站点的径流数据,构成原始数据集;然后对原始数据集进行预处理,预处理过程包括空值处理、数据选择、标准化和数据序列化;
[0063]
步骤2:将预处理过的数据集按照年份划分出训练集、验证集、测试集三个互斥的集合;
[0064]
步骤3:构建transformer序列到序列模型;
[0065]
transformer序列到序列模型的架构包括:输入变换层、位置编码层、编码器、解码器、输出变换层和输出选择操作,具体步骤如下:
[0066]
步骤3-1:输入变换层对输入数据的维度进行变换,统一数据维度,便于后续处理;
[0067]
步骤3-2:位置编码层向输入数据注入位置信息;
[0068]
步骤3-3:编码器由多个编码器层前后串接而成,每个编码器层包含两个子层:多头自注意力和全连接层,每个子层之后都需要接入残差连接和层归一化;
[0069]
编码器的输入序列为:
[0070]
(x1,x2,

,x
past_len+pred_len
)
[0071]
其中past_len表示已知的序列长度,pred_len表示预测的序列长度;
[0072]
步骤3-4:解码器由多个解码器层前后串接而成,每个解码器层包含三个子层:多头自注意力、多头交叉注意力和全连接层,每个子层之后都接入残差连接和层归一化;
[0073]
解码器的输入序列为:
[0074]
(y1,y2,

,y
past_len
,01,02,

,0
pred_len
)
[0075]
其中past_len表示已知的序列长度,pred_len表示预测的序列长度,01,02,

表示使用0进行填充,一共有pred_len个位置需要填充0;
[0076]
步骤3-5:多头自注意力和多头交叉注意力,其特征在于它们都是多头注意力的特殊情况,多头注意力又是注意力的特殊情况。注意力机制是一种加权和机制将不同的权重赋给不同的位置,它将赋予更重要的位置更大的权重;
[0077]
计算:
[0078]
q=wqi1[0079]
k=wki2[0080]
v=wvi3[0081][0082]
其中,wq、wk、wv是可学习参数矩阵,softmax表示进行softmax操作,当输入i2和i3相同并且与输入i1不同时,attn(q,k,v)称为交叉注意力;当三个输入i1,i2,i3都相同时,attn(q,k,v)称为自注意力;
[0083]
多头注意力的计算,当多次并行地对输入应用注意力,并将结果进行拼接与变换时,就得到多头注意力计算公式如下:
[0084][0085]
multiheadattn(q,k,v)=concat(head1,

,headh)wo[0086]
其中,w
iq
,wo是可学习参数矩阵,h表示头数,i的取值范围从1到h;head1,

,headh表示头;
[0087]
当输入i2和i3相同并且与i1不同时,multiheadattn(q,k,v)称为多头交叉注意力;当三个输入i1,i2,i3都相同时,multiheadattn(q,k,v)称为多头自注意力;
[0088]
步骤3-6:残差连接,其特征在于用于防止梯度消失与网络退化,计算公式如下:
[0089]
o=x+sublayer(x)
[0090]
其中,x表示子层的输入,sublayer(x)表示子层的输出,o表示最终输出;
[0091]
步骤3-7:层归一化,对最后的输出维度进行标准化,有利于训练的收敛;
[0092]
步骤3-8:输出变换层对解码器的输出维度进行变换,使输出符合最终的输出维度;
[0093]
将解码器的输出序列(o1,o2,

,o
past_len+pred_len
)放入全连接层,得到输出变换层的输出序列
[0094]
步骤3-9:输出选择操作是对输出变换层的输出序列进行选择的过程,将该序列进行切割,被舍弃掉,只保留的部分作为最终的输出;
[0095]
步骤4:将训练集的气象数据输入输入变换层得到变换后的数据,再通过位置编码层后,送入编码器处理得到编码器输出;
[0096]
将训练集的径流数据经过输入变换层得到变换后的数据,再通过位置编码层后,与编码器输出一起送入解码器处理得到解码器输出;然后,输出变换层对解码器输出进行维度变换,使其符合最终输出的维度;最后,通过输出选择操作对输出变换层的输出序列进行选择;
[0097]
步骤5:定义损失函数和优化器,并训练模型;
[0098]
训练时的损失函数采取平滑nse损失函数,其计算公式如下:
[0099][0100]
其中,n是小批量样本数量,dn是第n个样本的预测天数,是第d天的预测值,yd是第d天的径流真实值,sb是该样本对应站点所有数据径流真实值的标准差,∈表示一个极小的数,其目的是为了避免除以0。;
[0101]
模型进行多次迭代训练,在每次迭代完成后,使用测试集数据评估模型的性能,并且使用纳什效率系数nse作为指标,nse计算公式如下:
[0102][0103]
其中,是第n个样本径流真实值的均值;
[0104]
步骤6:测试模型;
[0105]
使用测试集对训练完成后的模型进行测试,得到预测结果,并根据真实数据对预测结果进行评估。
[0106]
优选地,所述对原始数据集预处理的标准化公式为:其中x表示原始数据,表示样本均值,s表示样本标准差,z表示标准化之后的数据。
[0107]
优选地,所述对原始数据集预处理的数据序列化是使用滑动窗口的方式,滑动窗口进行序列化的公式如下:
[0108][0109]
其中,zi表示序列化之后的第i个序列,xi表示原始数据集的第i个特征,n表示原始数据集大小,l表示滑动窗口的大小。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1