Datawhale AI夏令营 AI极端降水预报 Task3

一、精读赛题

部分解读

  • 数据类型为浮点型, 且是float16类型
  • gt数据, 我们可以发现数据最小值-0.3 左右, 而最大值会有10~50甚至更大的值,且大部分的点都是很小的值(1以内, 甚至达到1e-4)
  • 关于某些init_time在gt数据中找不到的异常,或者不能说是异常,在2021年的数据集中本就不会存在,在task2中有分析。可以去除这部分数据

重要-评价指标

基于ERA5格点降水值选取极端降水案例

评测指标:临界成功指数(CSI)

CSI = hits/(hits + false alarms + misses)

以24小时累积降水量50毫米为阀值,y_pre_1为预测的极端降水格点(24小时累积降水 >= 50 mm),y_obs_1为观测的极端降水格点,hits为预测与观测的重叠格点,其中false alarms = y_pre_1 - hits, misses = y_obs_1 - hits。

注意:其中24小时累积降水量计算方式为:1-24,25-48,49-72。

分析

  • ERA5的实际的物理意义,最后的输出不应该小于0
  • 输出的大部分0值数据(0附近值), 这部分值相对于对于计算24小时累积降水量50毫米的阀值,产生的影响不大。可能存在负影响。避免其负影响
  • 输出的少部分大值数据,达到10左右甚至50,对CSI指标有贡献大 ,让这部分值的预测更准

数据为原始数据的标准分数Zscore,Zscore = (x - μ)/ σ 。ERA5降水, μ: 0.19359495,σ:0.6458292; FuXi降水, μ: 0.13014507,σ: 0.4056911。

二、速通新baseline

与原始baseline对比

  • 新增验证集,查看模型在验证集的表现
  • 增加了模型xvaier初始化,如果模型的初始化合适的话, 模型会很快收敛, 变成拟合程度好的新模型。
  • 模型多层卷积神经网络+激活函数,网络结构更加复杂
  • loss计算,每轮平均loss

三、发散思路+上分技巧

  1. 要想办法提高高值数据对模型的贡献, 降低0值数据(接近于0)对模型的影响
  2. 尝试考虑时间序列中的特征,可以尝试使用LSTM等对时间序列特征有良好提取能力的模型
  3. 损失函数, 数据问题, 需要对高值敏感, 加更大的惩罚项, 对低值不敏感, 及输出的低值对模型的贡献应相对来说小,即高值loss计算的权重调大,0值数据权重调小。 设置不同权重的nn.MSELoss损失函数。
  4. 划分验证集,调整超参数(学习率、优化器、scheduler、epoch等)

四、思考

长尾数据

在机器学习中,长尾数据分析涉及处理那些频率分布中存在大量低频项的数据。这种情况在许多实际应用中都很常见,比如自然语言处理、推荐系统和计算机视觉。长尾数据分析的挑战主要包括:

  1. 数据不平衡
  • 长尾数据通常意味着少数类别或特征占据了大部分数据,而多数类别或特征只有很少的数据样本。这会导致训练模型时对少数类别的过拟合,而对长尾类别的欠拟合。
  1. 模型性能
  • 传统机器学习模型通常在处理头部数据(高频数据)时表现良好,但在处理长尾数据(低频数据)时性能会大幅下降。这是因为模型在训练过程中更关注头部数据,而忽略了长尾数据。
长尾数据分析方法
  1. 重采样(Resampling)
  • 过采样(Oversampling):增加长尾类别的数据样本数量,使其在训练集中占有较大比例。常见的方法有SMOTE(Synthetic Minority Over-sampling Technique)。
  • 欠采样(Undersampling):减少头部类别的数据样本数量,使其与长尾类别的数据量更均衡。
  1. 数据增强(Data Augmentation)
  • 对长尾类别的数据进行数据增强,比如图像的旋转、翻转、裁剪等,以增加其数据量和多样性。
  1. 迁移学习(Transfer Learning)
  • 利用在大规模数据集上预训练好的模型,将其迁移到长尾数据集中进行微调。预训练模型可以捕捉到大量的通用特征,从而提升在长尾数据上的表现。
  1. 集成学习(Ensemble Learning)
  • 通过训练多个不同的模型,并将它们的预测结果进行集成,可以提高模型在长尾数据上的泛化能力。常见的方法有Bagging、Boosting等。
  1. 损失函数调整
  • 对损失函数进行调整,使得模型在训练时对长尾类别的错误预测给予更大的惩罚。比如加权交叉熵(Weighted Cross-Entropy)、焦点损失(Focal Loss)等。
  1. 自监督学习(Self-Supervised Learning)
  • 在无标签数据上进行预训练,通过设计特定的任务让模型学习数据的内在结构,然后在有标签的长尾数据上进行微调。
实际应用
  1. 自然语言处理(NLP)
  • 处理长尾词汇,如稀有的单词、短语或实体。使用上下文信息、词嵌入(word embeddings)等方法来增强长尾词汇的表示能力。
  1. 推荐系统
  • 提供个性化推荐,满足用户的长尾兴趣。使用协同过滤、基于内容的推荐以及混合推荐算法来提升长尾物品的推荐效果。
  1. 计算机视觉
  • 处理长尾类别的图像分类、物体检测等任务。利用数据增强、迁移学习等技术来提升长尾类别的识别准确性。

激活函数

在选择激活函数时,需要考虑各种因素,包括模型的特定需求、数据的特性以及训练的稳定性。以下是ReLU、sigmoid、tanh和Leaky ReLU激活函数的选取依据:

1. ReLU(Rectified Linear Unit)

定义: ( f ( x ) = max ⁡ ( 0 , x ) ) ( f(x) = \max(0, x) ) (f(x)=max(0,x))

优点:

  • 计算效率高:ReLU的计算非常简单,只有一个条件判断。
  • 收敛速度快:与sigmoid和tanh相比,ReLU通常能加速神经网络的训练过程。
  • 减轻梯度消失问题:ReLU在正区间内的梯度为1,可以减轻深层网络中的梯度消失问题。

缺点:

  • Dying ReLU问题:如果输入值经常为负,某些神经元可能永远不会被激活(输出恒为0),导致这些神经元对模型失去作用。
  • 不适合处理负值:ReLU直接将负值置为0,可能导致信息丢失。

适用场景:

  • 深层网络(如卷积神经网络中的中间层)。
  • 需要加快训练速度并希望减轻梯度消失问题的场景。
2. Sigmoid

定义: ( f ( x ) = 1 1 + e − x ) ( f(x) = \frac{1}{1 + e^{-x}} ) (f(x)=1+ex1)

优点:

  • 输出范围在0到1之间:适用于需要概率输出的场景,如二分类问题。
  • 平滑输出:可以产生平滑的概率预测值。

缺点:

  • 梯度消失问题:在输入值较大或较小时,梯度会变得非常小,导致训练过程变慢。
  • 计算复杂度较高:相比ReLU,sigmoid的计算复杂度更高。

适用场景:

  • 输出层为二分类问题时使用。
  • 不适合深层网络中的中间层,因为梯度消失问题会显著影响训练。
3. Tanh(双曲正切)

定义: ( f ( x ) = tanh ⁡ ( x ) = e x − e − x e x + e − x ) ( f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} ) (f(x)=tanh(x)=ex+exexex)

优点:

  • 输出范围在-1到1之间:中心对称,有助于减轻偏移量(bias)的影响。
  • 比sigmoid更强的非线性表达能力:可以表示更复杂的模式。

缺点:

  • 梯度消失问题:虽然比sigmoid好一些,但仍然存在梯度消失问题。
  • 计算复杂度较高:和sigmoid类似,计算复杂度较高。

适用场景:

  • 在需要输出范围为-1到1的情况下使用。
  • 比较浅层的网络中使用,因为深层网络中梯度消失问题会影响训练。
4、Leaky ReLU

Leaky ReLU(Leakly Rectified Linear Unit)是对标准ReLU的一种改进,旨在解决ReLU的“Dying ReLU”问题,即某些神经元在训练过程中会完全失去激活功能。Leaky ReLU通过允许小的负梯度从负值流过,来保持所有神经元的激活。

定义:

f ( x ) = { x , if  x > 0 α x , if  x ≤ 0 f(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha x, & \text{if } x \leq 0 \end{cases} f(x)={x,αx,if x>0if x0

其中, α \alpha α是一个很小的常数,通常设为0.01。

优点:

  1. 避免Dying ReLU问题:即使输入值为负,Leaky ReLU也允许小的梯度通过,从而确保所有神经元在训练中都有激活的可能。
  2. 计算效率高:与标准ReLU类似,计算非常简单,仅多了一个线性计算。
  3. 训练速度快:Leaky ReLU保持了ReLU在正区间的优点,可以加速训练过程。

缺点:

  1. 参数调整:需要选择一个适当的 α \alpha α值,不同的任务可能需要不同的 α \alpha α 值。
  2. 仍然可能有梯度爆炸:虽然Leaky ReLU可以减轻梯度消失问题,但在某些情况下仍可能会有梯度爆炸的风险。

适用场景:

  1. 深层神经网络:尤其是当标准ReLU遇到Dying ReLU问题时,Leaky ReLU是一个很好的替代方案。
  2. 任何需要快速训练且希望减轻梯度消失问题的场景
  3. 需要更稳定的梯度流动:尤其是当输入数据中有大量负值时,Leaky ReLU可以帮助保持梯度的稳定。

示例代码:

import torch
import torch.nn as nn

# Leaky ReLU with a negative slope of 0.01
leaky_relu = nn.LeakyReLU(0.01)

# Example usage in a neural network layer
layer = nn.Linear(10, 5)
output = leaky_relu(layer(input_data))

总结

  • ReLU:适用于大多数深层网络,尤其是中间层,因为它可以加速训练并减轻梯度消失问题。
  • Sigmoid:适用于输出层需要概率输出的二分类问题,不适合深层网络的中间层。
  • Tanh:适用于输出范围需要在-1到1之间的情况,适合浅层网络的中间层。
  • Leaky ReLU是标准ReLU的一个简单但有效的改进,能够在保持计算效率和加速训练的同时,减轻Dying ReLU问题。它适用于深层网络,尤其是在遇到标准ReLU问题时。
  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值