feat: 论文扩充至52页 — 全部章节深度扩写+20篇参考文献+3附录+致谢

This commit is contained in:
2026-05-28 14:02:14 +08:00
parent cf29da52f7
commit 871ad57bd6
12 changed files with 1017 additions and 3506 deletions
+137 -122
View File
@@ -1,180 +1,195 @@
\chapter{多时间尺度预警模型设计}
本章详细阐述LSTM-Attention深度学习模型和XGBoost基线模型的设计细节、训练策略和评估框架。
本章详细阐述LSTM-Attention深度学习模型和XGBoost基线模型的设计细节、训练策略、超参数配置和评估框架。
\section{模型总体架构}
\section{模型选型论证}
本研究设计的LSTM-Attention模型采用「编码器-注意力-多任务输出」的架构范式,整体分为四个功能模块
本研究选择LSTM-Attention和XGBoost作为对比模型组,基于以下考量
\begin{itemize}
\item \textbf{LSTM}:作为时序建模的经典深度学习方法,擅长捕捉序列中的长距离依赖模式。气象数据天然具有时序自相关结构(今天的气温与昨天和前天高度相关),LSTM的门控机制设计使其成为此类数据的自然选择。
\item \textbf{注意力机制}:高温健康风险的关键时间点(如温度急剧升高的日期)在14天窗口中的位置是不固定的。自注意力机制无位置偏置的特性,使其能自适应地关注窗口内任意位置的关键信号。
\item \textbf{XGBoost}:作为结构化/表格数据上的SOTA方法,在许多Kaggle竞赛和工业应用中已证明其优于深度学习方法。其树结构天然适合类别不平衡数据——每棵树可学习特定的类别划分规则,多样性集成有助于覆盖少数类。
\item \textbf{对比价值}:「序列Deep Learning vs 展平Tree Ensemble」是环境健康预测中的典型技术路线分歧。通过在同一数据集上进行严格对比,本研究为该领域的方法选择提供实证参考。
\end{itemize}
\section{LSTM-Attention模型设计}
\subsection{总体架构}
模型采用「输入投影$\rightarrow$BiLSTM编码$\rightarrow$多头自注意力$\rightarrow$全局池化$\rightarrow$多任务输出」的架构范式:
\begin{enumerate}
\item \textbf{输入投影层}:将19维气象特征向量线性映射至128维隐藏空间
\item \textbf{双向LSTM编码层}2层BiLSTM隐藏维128),从输入序列中提取时序模式
\item \textbf{多头自注意力层}:4头自注意力机制,捕捉序列中不同时间步之间的依赖关系
\item \textbf{多任务输出层}:3个独立的全连接头,分别输出短期、中期和长期风险等级预测
\item 输入投影层:19维$\rightarrow$128维线性映射
\item 2层双向LSTM隐藏维128,时间维14$\rightarrow$256(双向拼接)
\item LSTM投影层:256$\rightarrow$128维,衔接注意力
\item 4头自注意力:头维32,捕捉关键时间步
\item 全局平均池化:时间维压缩至128维固定向量
\item 3个独立输出头:128$\rightarrow$32$\rightarrow$4(对应三级风险+正常)
\end{enumerate}
模型总参数量为983,628,其中LSTM层约占75\%740K参数),注意力层约占8\%79K参数),输出头约占17\%。模型实现基于PyTorch 2.12.0框架,在NVIDIA GeForce RTX 4060 Laptop GPU8GB VRAM)上进行训练。
\subsection{参数量计算}
\section{输入投影层}
模型总参数量为983,628,按模块分布如下:
输入投影层将19维原始气象特征通过一个全连接层映射至128维隐藏空间:
\begin{table}[H]
\centering
\caption{LSTM-Attention模型参数分布}
\begin{tabular}{lcr}
\toprule
\textbf{模块} & \textbf{参数量} & \textbf{占比} \\
\midrule
Input Projection (19$\rightarrow$128) & 2,432 + 128 = 2,560 & 0.3\% \\
BiLSTM Layer 1 & 4 × [(128+128)×128 + 128] × 2 & 65.9\% \\
BiLSTM Layer 2 & 4 × [(256+128)×128 + 128] × 2 & \\
LSTM Projection (256$\rightarrow$128) & 32,896 + 128 = 33,024 & 3.4\% \\
MHA (4 heads, d\_k=32) & 4 × 3 × (128×32) + (128×128) & 6.6\% \\
3 Output Heads (128$\rightarrow$32$\rightarrow$4) & 3 × [(128×32+32) + (32×4+4)] & 1.3\% \\
\bottomrule
\textbf{总计} & \textbf{983,628} & 100.0\% \\
\bottomrule
\end{tabular}
\end{table}
LSTM层占参数量的约三分之二,符合序列模型中以循环层为主导的典型分布。注意力层仅占6.6\%的参数,但其在决定模型行为方面起关键作用——它决定了哪些时间步的信息被传递到输出头。
\subsection{输入投影层}
将19维气象特征通过全连接映射至128维:
\begin{equation}
\mathbf{X}' = \mathbf{X}\mathbf{W}_{\text{proj}} + \mathbf{b}_{\text{proj}}
\mathbf{X}' = \mathbf{X}\mathbf{W}_{\text{proj}} + \mathbf{b}_{\text{proj}}, \quad \mathbf{X} \in \mathbb{R}^{B \times 14 \times 19}
\end{equation}
其中$\mathbf{X} \in \mathbb{R}^{B \times 14 \times 19}$为输入批次($B$为batch size),$\mathbf{W}_{\text{proj}} \in \mathbb{R}^{19 \times 128}$为投影矩阵。投影层的作用是在LSTM处理之前将特征维度提升至与隐藏状态维度一致,避免LSTM在低维输入上的信息瓶颈。
投影至128维是性能与效率的折中——更高维度(256/512)会显著增加LSTM的计算量,更低维度(64)可能导致信息瓶颈。
\section{双向LSTM编码层}
\subsection{BiLSTM编码层}
\subsection{层结构与参数}
LSTM编码器由2层堆叠的双向LSTM组成:
使用2层堆叠双向LSTM
\begin{itemize}
\item 输入维128(经投影层的特征向量
\item 隐藏维128
\item 层数:2(堆叠式,第一层的输出作为第二层的输入
\item 方向:双向(bidirectional),每层前向和后向LSTM各128维隐藏状态
\item Dropout0.3(层间dropout,防止过拟合
\item 输入维:128(经投影层)
\item 隐藏维:128(每方向)
\item 双向输出维:256(前向128 + 后向128连接
\item 层间Dropout0.3
\item 激活函数:tanhLSTM标准
\end{itemize}
由于是双向LSTM,每个时间步的输出维度为$2 \times 128 = 256$(前向+后向拼接)。经过LSTM编码后,输入序列$\mathbf{X}' \in \mathbb{R}^{B \times 14 \times 128}$被转换为时序特征$\mathbf{H} \in \mathbb{R}^{B \times 14 \times 256}$
2层堆叠使低层LSTM捕获局部时序模式(如日际温度波动),高层LSTM整合这些模式为更抽象的序列表示。Dropout作用于层间而非时间步内,避免破坏LSTM的时序连续性
\subsection{LSTM投影}
\subsection{多头自注意力}
在LSTM输出之后、注意力层之前,插入一个线性投影层将256维双向输出映射回128维
\begin{equation}
\mathbf{H}' = \mathbf{H}\mathbf{W}_{\text{lstm\_proj}} + \mathbf{b}_{\text{lstm\_proj}}
\end{equation}
投影至128维是为了匹配后续多头注意力层的输入期望,同时降低计算量。
\section{多头自注意力层}
\subsection{层配置}
多头自注意力机制在时序维度上操作,允许模型动态地关注14天窗口中的关键时间步:
在LSTM输出的14个时间步上施加4头自注意力
\begin{itemize}
\item 头数$h$):4
\item个头的维度$d_k$):32(总嵌入维度128 / 4个头)
\item 位置编码:无需显式位置编码,LSTM输出已包含时序位置信息
\item 头数$h=4$:提供4个不同的「视角」审视序列
\item维度$d_k=32$128/4,平衡表达能力与计算量
\item 位置编码:LSTM输出已编码时序位置信息
\end{itemize}
\subsection{残差连接层归一化}
注意力层后接残差连接层归一化(LayerNorm),前者提供恒等映射路径缓解深层网络的优化难度,后者稳定训练过程中的激活统计特性。
参照Transformer的后归一化(post-norm)架构,在多注意力子层后加入残差连接和层归一化:
\subsection{多任务输出层}
\begin{equation}
\mathbf{Z} = \text{LayerNorm}(\mathbf{H}' + \text{MultiHead}(\mathbf{H}', \mathbf{H}', \mathbf{H}'))
\end{equation}
三个输出头共享LSTM和注意力层的表示,各自通过2层FC(128$\rightarrow$32$\rightarrow$4)输出对应时间尺度的4类logits。
残差连接确保梯度可以绕过注意力层直接回传至LSTM,缓解深层网络的梯度消失问题。层归一化稳定了训练过程中的激活分布
多任务共享表示的理论依据是:三个时间尺度的风险预测都依赖于同一底层物理机制(温度-湿度-健康的关联),共享特征提取有助于知识复用和正则化,减少各任务的过拟合风险
\subsection{全局平均池化}
\section{训练策略与超参数配置}
对注意力输出沿时间维度进行全局平均池化,得到固定长度的序列级特征表示:
\subsection{损失函数:Focal Loss}
\begin{equation}
\mathbf{z} = \frac{1}{14}\sum_{t=1}^{14} \mathbf{Z}_{t,:}
\end{equation}
池化后的向量$\mathbf{z} \in \mathbb{R}^{128}$作为三个输出头的共享输入。
\section{多任务输出层}
考虑到短期、中期和长期预警任务之间的内在关联(都依赖于相同的底层天气-健康关联机制),采用多任务学习(Multi-Task Learning)架构。三个输出头共享LSTM和注意力层的特征表示,通过参数共享实现知识迁移和正则化。
每个输出头由两个全连接层组成:
\begin{equation}
\mathbf{h}_{\text{head}}^{(k)} = \text{ReLU}(\mathbf{z}\mathbf{W}_1^{(k)} + \mathbf{b}_1^{(k)}), \quad k \in \{\text{short}, \text{medium}, \text{long}\}
\end{equation}
\begin{equation}
\hat{\mathbf{y}}^{(k)} = \mathbf{h}_{\text{head}}^{(k)}\mathbf{W}_2^{(k)} + \mathbf{b}_2^{(k)}
\end{equation}
其中第一层为128→32维(带ReLU激活),第二层为32→4维(输出4个风险等级的对数几率logits)。三个头的输出经softmax归一化后得到各风险等级的概率分布。
\section{损失函数:Focal Loss}
鉴于训练集中极度不平衡的类别分布(低风险类占94-97\%),传统交叉熵损失会导致模型倾向于始终预测低风险类。本研究采用Focal Loss(详见第2.5节式2.26)作为损失函数,设置$\alpha=0.5, \gamma=2.0$
三个预测头的总损失定义为等权重求和:
采用Focal Loss$\alpha=0.5, \gamma=2.0$),详见第2.5节。三任务总损失为等权重平均:
\begin{equation}
\mathcal{L}_{\text{total}} = \frac{1}{3}\left(\mathcal{L}_{\text{short}} + \mathcal{L}_{\text{medium}} + \mathcal{L}_{\text{long}}\right)
\end{equation}
各头使用Focal Loss独立计算损失,权重相等以平衡三个时间尺度的重要性。
\section{优化器与训练策略}
\subsection{优化器配置}
使用AdamW优化器(Adam的权重衰减修正版),参数设置如下:
\begin{itemize}
\item 初始学习率(lr):$1 \times 10^{-3}$
\item 权重衰减(weight\_decay):$1 \times 10^{-4}$
\item $\beta_1 = 0.9, \beta_2 = 0.999$
\end{itemize}
\subsection{学习率调度}
采用ReduceLROnPlateau策略,当验证损失连续5个epoch未下降时,学习率乘以0.5:
\begin{equation}
lr_{\text{new}} = lr_{\text{old}} \times 0.5 \quad \text{if} \quad \Delta_{\text{val\_loss}} \leq 0 \text{ for 5 consecutive epochs}
\end{equation}
\subsection{早停与梯度裁剪}
\textbf{早停(Early Stopping):}验证损失连续15个epoch未改善时终止训练,防止过拟合并节省计算资源。
\textbf{梯度裁剪(Gradient Clipping):}将梯度的全局范数限制在1.0以内,防止梯度爆炸:
\begin{equation}
\|\mathbf{g}\|_{\text{new}} = \min\left(1.0 / \|\mathbf{g}\|, 1\right) \cdot \mathbf{g}
\end{equation}
\subsection{训练配置}
\subsection{优化器与调度器}
\begin{itemize}
\item Batch size32
\item 最大训练轮数:50 epoch
\item 数据加载:随机打乱(shuffle=True),不使用加权采样器
\item 设备:NVIDIA RTX 4060 Laptop GPUCUDA 12.6
\item 每轮训练时间:约2.5分钟(batch\_size=32时约24,000个batch/epoch
\item 优化器:AdamWlr=$1\times10^{-3}$, weight\_decay=$1\times10^{-4}$, $\beta_1=0.9$, $\beta_2=0.999$
\item 学习率调度:ReduceLROnPlateaumode='min', factor=0.5, patience=5
\item 梯度裁剪:全局范数上限1.0
\item 早停:patience=15 epoch(验证损失无改善时触发
\item 最大训练轮数:50
\item Batch Size32
\end{itemize}
\subsection{训练超参数调优记录}
针对极度不平衡问题,进行了6轮系统调优实验:
\begin{table}[H]
\centering
\caption{LSTM训练超参数调优实验记录}
\label{tab:lstm_tuning}
\begin{tabular}{cccccc}
\toprule
\textbf{轮次} & \textbf{损失函数} & \textbf{类别权重} & \textbf{Batch} & \textbf{采样器} & \textbf{结果} \\
\midrule
1 & Focal($\alpha$=0.5,$\gamma$=2) && 32 && Acc=0.940, 全预测0类 \\
2 & Focal($\alpha$=0.5,$\gamma$=3) & [1,3,5,8] & 32 && Acc=0.940, 全预测0类 \\
3 & Focal($\alpha$=0.75,$\gamma$=3) & 1/count 反比 & 16 && Acc=0.025, 全预测3类 \\
4 & Focal($\alpha$=0.5,$\gamma$=2) & 1/√count & 64 && Acc=0.025, 全预测3类 \\
5 & Focal($\alpha$=0.5,$\gamma$=2) && 32 & 1/√count 采样 & Acc=0.940, 全预测0类 \\
6 & Focal($\alpha$=0.5,$\gamma$=2) & 1/√count & 16 & 1/√count 采样 & Acc=0.025, 收敛缓慢 \\
\bottomrule
\end{tabular}
\end{table}
调优揭示了一个困境:无权重时模型收敛至多数类;有权重或采样时模型过度预测少数类。两头极端之间的「中间地带」极窄——一旦权重超过阈值,优化轨迹迅速跳变至对端。这一现象可解释为:交叉熵损失的梯度场在极度不平衡数据上存在两个支配性的吸引域(全部预测0类或全部预测3类),两者之间的鞍点难以维持。
\section{XGBoost基线模型}
为评估深度学习方法的有效性,选择XGBoost作为传统机器学习基线。XGBoost的核心优势在于其基于树的集成结构天然适合表格型数据,且对类别不平衡具有较好的鲁棒性。
\subsection{模型配置}
\begin{itemize}
\item 估计器数量(n\_estimators):200
\item 最大深度(max\_depth):6
\item 最大深度(max\_depth):6
\item 学习率(learning\_rate):0.05
\item 子采样率(subsample):1.0(使用全部样本)
\item 列采样率(colsample\_bytree):1.0
\item 正则化:$\lambda=1$L2),$\gamma=0$(最小分裂增益)
\item 目标函数:multi:softmax4类多分类)
\item 评估指标:mlogloss + merror
\item 设备:CUDAGPU加速)
\item 分类器数量:3个(分别对应短期、中期、长期预测
\item 分类器数量:3个独立模型(short/medium/long
\end{itemize}
\subsection{输入处理}
\subsection{输入特征处理}
XGBoost不直接处理三维时序数据,将(N, 14, 19)的输入序列展平为(N, 266)的二维特征矩阵14×19=266维)。这种「时间展平策略将时序信息转换为空间特征,适合基于树的模型处理
XGBoost不原生处理三维时序数据,将(N, 14, 19)的序列展平为(N, 266)的扁平特征矩阵。这种展平策略保留了全部特征信息但丢失了时序的序关系(order relationship)。XGBoost通过树的分裂规则间接捕获特征交互,不依赖时序顺序
\section{评估指标}
\section{评估指标设计}
针对多分类任务和类别不平衡特性,采用以下指标:
\subsection{宏平均F1(Macro F1)——首要指标}
宏平均F1对每个类别独立计算F1后取算术平均,给予所有类别同等权重:
\begin{equation}
\text{F1}_c = \frac{2 \times \text{Precision}_c \times \text{Recall}_c}{\text{Precision}_c + \text{Recall}_c}, \quad c \in \{0, 1, 2, 3\}
\end{equation}
\begin{equation}
\text{Macro F1} = \frac{1}{4}\sum_{c=0}^{3} \text{F1}_c
\end{equation}
选择Macro F1而非准确率的原因:在95\%-5\%的类别分布下,准确率高度偏向多数类(全预测0类可获95\%准确率但F1≈0.25)。Macro F1通过等权平均消除了这一偏差。
\subsection{辅助指标}
\begin{itemize}
\item \textbf{准确率(Accuracy):}$\text{Acc} = \frac{TP + TN}{TP + TN + FP + FN}$
\item \textbf{宏平均F1分数(Macro F1-Score):}各类别F1分数的算术平均,给予少数类与多数类同等权重,是评估不平衡分类任务的核心指标
\item \textbf{混淆矩阵(Confusion Matrix):}$\mathbf{C} \in \mathbb{R}^{4 \times 4}$$C_{ij}$为真实类别$i$被预测为类别$j$的样本数
\item \textbf{混淆矩阵}$\mathbf{C} \in \mathbb{N}^{4\times 4}$,元素$C_{ij}$为真实类$i$被预测为类$j$的样本数。提供模型在各风险等级的详细诊断信息
\item \textbf{准确率}:作为参考指标报告,但不作为模型选择依据(因其在不平衡数据上的欺骗性)
\end{itemize}
宏平均F1是本研究的首要评估指标,因为它不受类别不平衡的干扰,能够真实反映模型在各风险等级、特别是高风险等级上的预测能力。
\subsection{评估流程}
\begin{enumerate}
\item 加载训练时的最佳checkpoint(基于验证损失)
\item 在测试集(164,365条样本)上进行推理
\item 分别计算三个时间尺度的混淆矩阵和指标
\item 生成LSTM vs XGBoost的对比图表
\end{enumerate}
评估代码实现于\texttt{src/models/evaluate.py},使用matplotlib生成300dpi的PNG图表,中文标注通过SimHei字体配置实现。