#DataWhale AI 夏令营第3期#AI+地球科学 学习笔记 Task2打卡

在上一篇Task1的打卡笔记中,我们对这个赛题进行了初步的解读,夏令营第一次直播中,我们初步学习了机器学习和深度学习的一些概念入门,并对PyTorch基础有了一定了解。感兴趣的小伙伴,可以查看上一篇的打卡笔记。链接:#Datawhale AI 夏令营#AI+大气科学(极端天气预测赛事)学习笔记-CSDN博客

Task2部分,我们主要有三个任务。分别是精读baseline;伏羲大模型初探;时间序列分析入门。

Part1. 精读baseline

这块在第一篇的打卡笔记中,我们已经做了很多解读了,这次继续进一步的探索。

按照baseline的流程,我们可以把问题分为以下四个步骤:

1)数据集的准备和处理:我们需要定义好数据集(Dataset),建立训练数据和标签的对应关系;定义好数据加载器(DataLoader),方便后续的数据加载训练

2)模型的定义:利用PyTorch框架,定义好需要使用的模型,根据输入输出数据维度实例化模型。baseline我们选择的是单层的CNN模型,后续改进可以选择更深的模型,可以选择RNN模型,可以用一些更复杂,效果更好的模型,这个有待我们去进一步探索优化

3)模型训练:我们需要定义损失函数,回归任务我们通常选择MSELoss(均方误差损失);定义优化器,我们选择Adam(自适应矩估计),相比SGD(随机梯度下降),Adam 自动调整每个参数的学习率,这使得它在多种问题上表现良好,通常不需要过多的手动调参;定义训练周期,这里我们选择epochs=1,后续我们可以通过增加迭代周期来提升模型的性能;训练模型并保存好模型参数以供推理使用

4)模型加载及推理:这一阶段,我们加载前面训练好的模型,输入Test数据,进行推理,并最终输出所要提交的文件,提交文件的标准格式文件树如下所示:

一些补充:

我们需要使用GPU来训练,那么可以使用.cuda()方法,这是baseline里面的写法;补充一下另一种写法,我们可以使用to(device):

# 创建模型实例
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = Model(input_size, output_size).to(device)  # 使用 .to(device) 替换 .cuda()

模型定义部分,我们可以使用Sequential模块,如果多层神经网络的话,这样写起来会更简洁一些。

# 定义模型
class Model(nn.Module):
    def __init__(self, num_in_ch, num_out_ch):
        super(Model, self).__init__()
        # 使用 nn.Sequential 来定义模型结构
        self.model = nn.Sequential(
            nn.Conv2d(num_in_ch, num_out_ch, kernel_size=3, stride=1, padding=1),
        )

    def forward(self, x):
        B, S, C, W, H = tuple(x.shape)
        x = x.reshape(B, -1, W, H)
        out = self.model(x)
        out = out.reshape(B, S, W, H)
        return out

Part2. 伏羲大模型

通过查看比赛介绍,我们知道赛题主要是使用伏羲大模型的输出作为输入,我们有必要对伏羲大模型做一个初步的了解。

比赛输入数据来自伏羲气象大模型的输出,伏羲大模型是复旦大学发布的数据驱动的气象大模型,数据分辨率0.25度,时间间隔1小时,包含地面和高空气压层多个气象要素,伏羲气象大模型的介绍详见FuXi: a cascade machine learning forecasting system for 15-day global weather forecast | npj Climate and Atmospheric Science

伏羲(FuXi)是一款专为全球15天天气预报设计的级联机器学习系统。它采用了独特的级联模型架构,利用三个预先训练好的模型针对不同的预报时间窗口进行了优化:FuXi-Short(0-5天)、FuXi-Medium(5-10天)和FuXi-Long(10-15天)。这些模型基于U-Transformer架构,能够高效地学习复杂的天气数据模式。

技术亮点
  • 级联模型架构:每个模型针对特定时间窗口进行了优化,通过级联的方式减少了长时间预报中的累积误差。
  • Swin Transformer V2:作为基础模型架构,改进了原Swin Transformer的训练稳定性,适用于处理大规模和高分辨率输入。
  • 集合预报:通过扰动初始条件和模型参数的方式创建集合预报,评估预报不确定性。
性能表现
  • 精度提升:FuXi在15天预报的表现上与ECMWF集合预报(ECMWF EM)相当,甚至在某些指标上表现出色。
  • 技能预报期扩展:FuXi将异常相关系数大于0.6的有效预报期扩展至10.5天(500hPa地势高度)和14.5天(2米温度)。
  • 集合预报性能:FuXi集合预报在前9天内与ECMWF集合预报的性能相当。
训练过程
  • 预训练:使用监督学习优化模型预测单个时间步。
  • 微调:采用自回归训练和课程训练计划,逐步增加自回归步骤数以优化不同时间窗口的预报性能。
  • 硬件需求:预训练在8个 Nvidia A100 GPU 上进行,大约需要30小时;每个级联模型的微调大约需要两天时间。

赛事的借鉴:

通过对伏羲大模型的了解,我们可以借鉴伏羲大模型的一些思路,来对我们竞赛进一步的优化,上分。以下仅是一些Idea,供参考。

模型搭建:伏羲使用的是基于U-Transformer的架构,这个模型架构可以参考,我们是不是可以搭建一个简单的类似架构来优化上分

训练思路:文章提供了伏羲大模型的训练细节,其中预训练阶段的一些设置可以拿来参考,这是我们模型优化调参的一个可选方向:

我们可以总结出一些可能对我们优化模型有用的参考:

  • 损失函数: 使用纬度加权的 L1 损失函数,以考虑地球表面不同纬度处网格点的重要性差异。
  • 优化器: 使用 AdamW 优化器,参数为 β1=0.9β1​=0.9 和 β2=0.95β2​=0.95,初始学习率为 2.5×10−42.5×10−4,权重衰减系数为 0.1。
  • 正则化: 使用 Scheduled DropPath 防止过拟合,DropPath 比例为 0.2。

模型推理:伏羲大模型使用了ensemble forecast,结合 Perlin 噪声扰动初始条件和 MC Dropout 扰动模型参数,FuXi 能够生成一个包含 50 个成员的集合预报,以评估预报的不确定性。

具体到赛事中,数据加噪音并做模型融合,也许是一种优化的思路。

Part3. 时间序列分析入门

时间序列分析是一种统计方法,用于通过时间顺序来分析和预测数据。这种分析在很多领域都非常有用,包括经济学、金融学、气象学、生物学等。时间序列分析在气象领域有着广泛的应用,它可以帮助我们更好地理解气候系统的行为并进行预测。

在传统的统计方法中,科学家根据统计的数据,进行严谨的数学建模,从而进行预测分析。

常见的时间序列模型

  • 自回归 (AR) 模型:预测基于过去的值。
  • 移动平均 (MA) 模型:预测基于过去的误差项。
  • 自回归移动平均 (ARMA) 模型:结合AR和MA模型。
  • 自回归积分滑动平均 (ARIMA) 模型:适用于非平稳时间序列,包含差分操作。
  • 季节性ARIMA (SARIMA) 模型:处理具有季节性趋势的数据。
  • 指数平滑模型:使用加权历史数据来进行预测。

如今深度学习强大的数据拟合能力能帮助科学家们更为快速和精准的找到最佳拟合的模型, AI+气象预测领域就越发受到气象专家们的关注。深度学习模型的强大之处在于它们能够处理大量的非结构化数据,并从中学习到复杂的模式和关系。在气象预测方面,这尤其有用,因为气象数据通常包含许多不同的变量,并且这些变量之间存在着复杂的相互作用。相比如传统的统计学习方法,深度学习模型深度学习模型在预测极端天气事件方面显示出潜在的优势,因为它们能够捕捉到这些事件的非线性特征。

深度学习模型:

下面是一些常用的深度学习模型,它们被广泛应用于时间序列分析任务:

1. 循环神经网络 (RNN)

  • 定义:RNN 是一种能够处理序列数据的神经网络,通过在时间维度上展开网络结构,RNN 能够利用前一时刻的信息来影响当前时刻的输出。
  • 优点:能够捕获数据中的时序依赖性。
  • 缺点:长期依赖问题可能导致梯度消失或梯度爆炸。

2. 长短期记忆网络 (LSTM)

  • 定义:LSTM 是 RNN 的一种特殊形式,通过引入门控机制(输入门、输出门和遗忘门)来解决长期依赖问题。
  • 优点:能够有效处理长期依赖问题,适合于需要记住长期上下文的任务。
  • 缺点:计算成本较高,模型较为复杂。

3. 门控循环单元 (GRU)

  • 定义:GRU 是 LSTM 的简化版本,将 LSTM 中的三个门合并为两个门(重置门和更新门)。
  • 优点:相比于 LSTM,GRU 在某些情况下可以达到相似的效果但参数较少,计算更快。
  • 缺点:对于某些需要精细控制信息流的任务可能不如 LSTM 表现好。

4. 卷积神经网络 (CNN)

  • 定义:CNN 最初是为了图像处理设计的,但在时间序列分析中也展现出强大的能力,通过卷积操作捕捉数据中的局部特征。
  • 优点:能够提取时间序列中的局部模式,非常适合处理固定长度的序列数据。
  • 缺点:直接应用于变长序列数据时不够灵活。

5. 深度信念网络 (DBN)

  • 定义:DBN 是由多个堆叠的单元组成的深度神经网络,能够逐层提取数据的不同级别的抽象特征。
  • 优点:能够处理复杂的特征层次结构。
  • 缺点:训练过程较为复杂,可能需要较长的时间。

6. Transformer 模型

  • 定义:最初设计用于自然语言处理任务,通过自注意力机制来处理序列数据,不需要循环结构。
  • 优点:能够并行处理序列数据,处理长序列时性能优秀。
  • 缺点:对于较小的数据集可能会出现过拟合。

7. DeepAR

  • 定义:这是一种基于 RNN 的时间序列预测模型,能够同时处理多条时间序列,并以概率分布的方式提供预测。
  • 优点:可以处理多变量时间序列,提供预测不确定性估计。
  • 缺点:计算成本较高,特别是在处理大量序列时。

8. N-BEATS

  • 定义:这是一种专为时间序列预测设计的神经网络架构,采用模块化设计,可以进行回溯调整。
  • 优点:简单高效,能够进行端到端的训练。
  • 缺点:对于非常长的序列可能不是最优选择。

9. Temporal Convolutional Networks (TCN)

  • 定义:TCN 是基于 CNN 的一种架构,使用因果卷积和残差连接,能够处理序列数据。
  • 优点:能够并行处理,适合长序列数据。
  • 缺点:对于非固定长度的序列数据处理起来不太灵活。

10. Graph Neural Networks (GNN)

  • 定义:GNN 可以处理带有图形结构的时间序列数据,如传感器网络。
  • 优点:能够处理具有拓扑结构的数据。
  • 缺点:需要额外的图形结构信息。

结论

每种模型都有其适用的场景和特点,选择合适的模型取决于具体问题的需求、数据特性和可用计算资源等因素。在实际应用中,往往还需要对模型进行适当的调整和优化以适应特定任务。

收藏点赞关注不迷路,看了觉得有用的小伙伴,动动手指吧。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值