Dinov3 + DoRA + Tweedie 损失 + 平衡 R²
Dinov3 + DoRA + Tweedie 损失 + 平衡 R²
作者: HF Sunny
发布时间: 2026-01-29
竞赛排名: 31
引言
预处理
- 使用 StratifiedGroupKFold 基于 labels="State" 和 groups="Sampling_Date" 将数据划分为 5 个对应的折。然而,可以通过对多个 random_seed 进行暴力分析来找到 golden_seed(黄金种子)。
- 用于寻找 golden_seed 的指标是基于训练集和验证集的 "Dry_Total" 列计算得出的均值。
模型微调
- 使用 DoRA 代替 LoRA。简而言之,LoRA(低秩适应)通过在原始权重上添加低秩矩阵来更新模型,主要专注于高效微调。DoRA(权重分解低秩适应)通过将权重分解为两个分量——大小(magnitude)和方向(direction),并仅将 LoRA 应用于方向部分,从而改进了这一点。这使得 DoRA 能够通过分别学习 scale 和 orientation 的变化,更准确地模拟全量微调。
- 目标:使用 Tweedie 损失 代替 L1、L2 或 Huber 损失。您可以通过下图查看原始数据的分布:
可以得出结论:
- 零膨胀 (Zero-inflation):大量样本的生物量恰好为 0g。
- 右偏态 (Right-skewness):非零值高度偏斜,具有长尾。
因此,使用 Tweedie 损失函数最适合描述这种分布。它是一种复合泊松 - 伽马分布。您可以在此处查看更多关于 Tweedie 分布函数的信息:Tweedie Distribution Wiki
平衡指标
其中一个错误是过于依赖组织者提供的整体 R² 分数。较高的整体 R² 可能会产生误导,并可能掩盖模型中的显著偏差。
由于我们需要一个在所有三个目标 "Dry_Green"、"Dry_Clover" 和 "Dry_Dead" 上都能良好泛化的模型。我们应该分别计算每个类别的 R²。为了防止模型在一个类别上表现良好而在其他类别上失败,我引入了一个自定义评估指标:
S = {(R²Green, R²Clover, R²Dead)}
Score = mean(S) - α × std(S)
为什么这样有效:
通过减去标准差 (std),我们惩罚了不一致性。这迫使模型在所有类别之间取得平衡,确保预测在整个数据集中稳定且无偏差。