打破预测与决策的孤岛:如何构建"能源垂类大模型"?
------从 iTransformer 到端到端联合训练的完整落地指南
摘要 :在能源数字化转型中,传统的"先预测、后优化"流水线模式面临误差累积和计算效率低的瓶颈。本文提出一种基于 iTransformer 架构的"能源垂类大模型"方案,通过共享 Encoder 实现时序特征的通用提取,并利用多任务联合训练(Joint Training)实现预测与调度的一体化。本文将详细拆解从模型定义、输入构建到训练策略的全流程。
一、 核心概念祛魅:什么是"能源垂类大模型"?
当我们谈论能源行业的"大模型"时,我们指的不是 一个能回答"什么是光伏"的聊天机器人(LLM),而是一个基于深度学习架构的时序基础模型 (Time-Series Foundation Model)。
它与传统算法的区别在于:
-
架构通用性:不再为每个光伏站单独训练一个 LSTM/XGBoost,而是用一个 Transformer 底座学习所有站点的物理共性(Encoder)。
-
任务一体化 :不再是"预测归预测,调度归调度",而是同一个大脑(Encoder),长出两个脑袋(Heads),同时完成感知与决策。
-
泛化能力:面对新接入的微网,无需从零训练,利用预训练学到的"物理常识"(如光照与电压的耦合关系)实现 Zero-shot 或 Few-shot 落地。
二、 架构设计:One Body, Two Heads
为了解决长序列预测和实时调度的需求,我们摒弃了 GPT 式的 Decoder-only(自回归)架构,采用了效率更高的 Encoder-only 架构。
1. 基座选型:为什么是 iTransformer?
传统的 Transformer 把"时刻"当作 Token,难以处理多变量耦合。我们选用 iTransformer (Inverted Transformer)。
-
核心反转 :将 "整条变量曲线" 视为一个 Token。
-
输入视角:如果有 6 个变量(负荷、光伏、电价...),输入就是 6 个 Token。
-
优势:Attention 机制直接计算"光伏曲线"和"负荷曲线"的相关性,完美契合物理系统的耦合特征。
2. 整体拓扑图
-
输入层:历史多模态数据(96点) + 静态特征。
-
身体 (Shared Encoder) :iTransformer Encoder。提取高维状态特征 HHH。
-
左脑 (Prediction Head) :
Linear层。输出未来 96 点预测曲线。 -
右脑 (Decision Head) :
MLP层。输出当前时刻的最优调度指令(动作)。
三、 数据工程:如何把物理世界"Token化"?
这是大模型落地的第一步。我们需要把异构的数据统一成模型能"吃"的格式。
1. 统一输入向量 (StS_tSt)
对于微网场景,时刻 ttt 的输入 StS_tSt 包含:
St=[历史负荷,历史光伏,天气预报,实时电价,电池SoC,买卖深度]S_t = [\text{历史负荷}, \text{历史光伏}, \text{天气预报}, \text{实时电价}, \text{电池SoC}, \text{买卖深度}]St=[历史负荷,历史光伏,天气预报,实时电价,电池SoC,买卖深度]
- 形状 :
[Batch, Seq_Len=96, Vars=6]
2. Token 的三维坐标系
在 iTransformer 中,我们不需要复杂的 Masked Pre-training,但需要精准的 Embedding 策略。一个数值进入模型前,会被映射为 3 部分之和:
Token=ValueProject(x)+FeatureID(f)+TimeID(t)\text{Token} = \text{ValueProject}(x) + \text{FeatureID}(f) + \text{TimeID}(t)Token=ValueProject(x)+FeatureID(f)+TimeID(t)
-
ValueProject :
Linear(1, 512)。把单点数值放大为向量。 -
FeatureID :
Embedding(6, 512)。告诉模型这是"光伏"还是"电价"。 -
TimeID :
Embedding(96, 512)+GlobalPosEmbedding。告诉模型这是"中午"还是"晚上"。
3. 静态特征融合 (Static Token)
变压器容量、经纬度等不随时间变化的数据,如何处理?
-
策略 :将其通过独立 MLP 映射为
[Batch, 1, 512]。 -
融合 :将其作为第 7 个 Token,拼接到动态变量序列中。让动态数据去"Attention"静态属性。
四、 训练策略:模仿学习与联合训练
这是本方案的核心壁垒。我们不使用不稳定的在线强化学习,而是采用 "专家蒸馏 + 联合监督" 的稳健路线。
1. 准备"老师"数据
-
预测真值:未来的真实负荷/光伏数据(历史数据自带)。
-
决策真值 :利用 差分进化 (Differential Evolution, DE) 算法,离线跑出历史场景下的全局最优充放电指令。DE 就是我们的老师。
2. 联合损失函数 (Joint Loss)
我们强制模型同时考两门试,防止它"偏科"。
LossTotal=Loss预测+λ⋅Loss决策Loss_{Total} = Loss_{预测} +λ · Loss_{决策}LossTotal=Loss预测+λ⋅Loss决策
-
Loss预测Loss_{预测}Loss预测:MSE(预测曲线,真实曲线)。迫使 Encoder 读懂物理规律。
-
Loss决策Loss_{决策}Loss决策:MSE(输出动作,DE最优动作)。迫使 Actor 模仿老师的操作。
-
λλλ:平衡系数(如 1.0)。
3. 隐式特征传递 (Latent State Passing)
关键点 :决策头(Actor)的输入不是 预测头的输出(预测曲线),而是 Encoder 的输出(特征向量)。
- 原因:预测曲线丢失了概率和波动信息,而 Encoder 的特征向量包含了完整的"环境理解"。这避免了误差累积。
五、 核心代码实现 (PyTorch)
以下是一个最小闭环的实现代码,集成了静态变量融合与联合输出。
python
import torch
import torch.nn as nn
class EnergyVerticalModel(nn.Module):
def __init__(self, num_vars=6, num_statics=2, seq_len=96, pred_len=96, d_model=512):
super().__init__()
# --- 1. 身体: iTransformer Encoder ---
self.enc_embedding = nn.Linear(seq_len, d_model) # 动态变量编码
self.static_embedding = nn.Linear(num_statics, d_model) # 静态变量编码
encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=8, batch_first=True)
self.encoder = nn.TransformerEncoder(encoder_layer, num_layers=2)
# --- 2. 左脑: 预测头 (Regression) ---
self.pred_head = nn.Linear(d_model, pred_len)
# --- 3. 右脑: 决策头 (Imitation/Actor) ---
self.decision_head = nn.Sequential(
nn.Linear(d_model, 128),
nn.ReLU(),
nn.Linear(128, 1), # 输出充放电功率 (-1 ~ 1)
nn.Tanh()
)
def forward(self, x_dyn, x_static):
# x_dyn: [Batch, 96, 6]
# x_static: [Batch, 2]
# === 身体工作 ===
# 1. 倒置 + 动态嵌入
x_dyn = x_dyn.permute(0, 2, 1) # [B, 6, 96]
token_dyn = self.enc_embedding(x_dyn) # [B, 6, 512]
# 2. 静态嵌入
token_stat = self.static_embedding(x_static).unsqueeze(1) # [B, 1, 512]
# 3. 拼接与Attention
tokens = torch.cat([token_dyn, token_stat], dim=1) # [B, 7, 512]
features = self.encoder(tokens) # [B, 7, 512]
# === 脑袋工作 ===
# 1. 预测任务 (只取前6个动态变量的特征)
feat_dyn = features[:, :6, :]
out_pred = self.pred_head(feat_dyn).permute(0, 2, 1) # [B, 96, 6]
# 2. 决策任务 (聚合全局状态)
# 简单做法:对所有特征取平均,代表当前系统态势
global_state = torch.mean(features, dim=1) # [B, 512]
out_action = self.decision_head(global_state) # [B, 1]
return out_pred, out_action
六、 进阶技巧:鲁棒性与未来扩展
1. 传感器故障屏蔽 (Sensor Masking)
在推理时,如果某传感器(如光伏)坏了,我们可以在 Transformer 内部传入 src_key_padding_mask,将其对应的 Token 屏蔽。模型会自动依赖其他变量(如时间、负荷)来"脑补"光伏状态,保证决策不断电。
2. 从模仿到强化 (RL Fine-tuning)
当模型模仿 DE 老师达到 90 分后,我们可以由监督学习转为 PPO 强化学习。
-
冻结 Encoder,只微调 Decision Head。
-
引入
MicrogridEnv模拟器,让模型通过试错来探索比 DE 更优的策略(例如利用极端的电价波动套利)。
七、 总结
这一架构不仅在学术上站得住脚(iTransformer + Multi-Task Learning),在工程上也具备极高的落地价值:
-
端到端:消除了中间环节的误差放大。
-
高效率:一次推理,同时输出预测与调度,满足毫秒级现货交易需求。
-
可解释性:基于 Encoder 的 Attention 权重,我们可以分析出"为什么现在决定放电"(e.g., 因为关注到了未来 2 小时的电价尖峰)。
这就是能源垂类大模型的完全体形态------不是聊天工具,而是懂物理、会算计的超级能源大脑。