Files
elderly-heat-warning/thesis/chapters/ch4-model.tex
T

181 lines
8.2 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\chapter{多时间尺度预警模型设计}
本章详细阐述LSTM-Attention深度学习模型和XGBoost基线模型的设计细节、训练策略和评估框架。
\section{模型总体架构}
本研究设计的LSTM-Attention模型采用「编码器-注意力-多任务输出」的架构范式,整体分为四个功能模块:
\begin{enumerate}
\item \textbf{输入投影层}:将19维气象特征向量线性映射至128维隐藏空间
\item \textbf{双向LSTM编码层}:2层BiLSTM(隐藏维度128),从输入序列中提取时序模式
\item \textbf{多头自注意力层}:4头自注意力机制,捕捉序列中不同时间步之间的依赖关系
\item \textbf{多任务输出层}:3个独立的全连接头,分别输出短期、中期和长期风险等级预测
\end{enumerate}
模型总参数量为983,628,其中LSTM层约占75\%740K参数),注意力层约占8\%79K参数),输出头约占17\%。模型实现基于PyTorch 2.12.0框架,在NVIDIA GeForce RTX 4060 Laptop GPU8GB VRAM)上进行训练。
\section{输入投影层}
输入投影层将19维原始气象特征通过一个全连接层映射至128维隐藏空间:
\begin{equation}
\mathbf{X}' = \mathbf{X}\mathbf{W}_{\text{proj}} + \mathbf{b}_{\text{proj}}
\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在低维输入上的信息瓶颈。
\section{双向LSTM编码层}
\subsection{层结构与参数}
LSTM编码器由2层堆叠的双向LSTM组成:
\begin{itemize}
\item 输入维度:128(经投影层的特征向量)
\item 隐藏维度:128
\item 层数:2(堆叠式,第一层的输出作为第二层的输入)
\item 方向:双向(bidirectional),每层前向和后向LSTM各128维隐藏状态
\item Dropout0.3(层间dropout,防止过拟合)
\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}$
\subsection{LSTM投影层}
在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天窗口中的关键时间步:
\begin{itemize}
\item 头数($h$):4
\item 每个头的维度($d_k$):32(总嵌入维度128 / 4个头)
\item 位置编码:无需显式位置编码,LSTM的输出已包含时序位置信息
\end{itemize}
\subsection{残差连接与层归一化}
参照Transformer的后归一化(post-norm)架构,在多注意力子层后加入残差连接和层归一化:
\begin{equation}
\mathbf{Z} = \text{LayerNorm}(\mathbf{H}' + \text{MultiHead}(\mathbf{H}', \mathbf{H}', \mathbf{H}'))
\end{equation}
残差连接确保梯度可以绕过注意力层直接回传至LSTM,缓解深层网络的梯度消失问题。层归一化稳定了训练过程中的激活分布。
\subsection{全局平均池化}
对注意力输出沿时间维度进行全局平均池化,得到固定长度的序列级特征表示:
\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$
三个预测头的总损失定义为等权重求和:
\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{训练配置}
\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
\end{itemize}
\section{XGBoost基线模型}
为评估深度学习方法的有效性,选择XGBoost作为传统机器学习基线。XGBoost的核心优势在于其基于树的集成结构天然适合表格型数据,且对类别不平衡具有较好的鲁棒性。
\subsection{模型配置}
\begin{itemize}
\item 估计器数量(n\_estimators):200
\item 最大树深度(max\_depth):6
\item 学习率(learning\_rate):0.05
\item 设备:CUDAGPU加速)
\item 分类器数量:3个(分别对应短期、中期、长期预测)
\end{itemize}
\subsection{输入处理}
XGBoost不直接处理三维时序数据,将(N, 14, 19)的输入序列展平为(N, 266)的二维特征矩阵(14×19=266维)。这种「时间展平」策略将时序信息转换为空间特征,适合基于树的模型处理。
\section{评估指标}
针对多分类任务和类别不平衡特性,采用以下指标:
\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$的样本数
\end{itemize}
宏平均F1是本研究的首要评估指标,因为它不受类别不平衡的干扰,能够真实反映模型在各风险等级、特别是高风险等级上的预测能力。