手语识别损失函数

当前手语识别训练用的是多分类交叉熵损失函数:

python 复制代码
criterion = nn.CrossEntropyLoss()

位置在:

train_sign.py

训练时是这样算的:

python 复制代码
logits = model(keypoints, valid_mask)
loss = criterion(logits, labels)

也就是:

text 复制代码
模型输出 logits: [B, 500]
真实标签 labels: [B]
交叉熵损失 loss

为什么用 CrossEntropyLoss

你的任务是:

text 复制代码
CSL2018 500 类孤立手语识别

每个样本只属于一个类别,比如:

text 复制代码
label = 0
label = 128
label = 499

这是标准的单标签多分类任务,所以用交叉熵是合理的。

logits 是什么

模型最后输出:

text 复制代码
[B, 500]

例如一个 batch 有 32 个样本:

text 复制代码
[32, 500]

每一行是一个样本对 500 个手语类别的原始分数:

text 复制代码
[类别0分数, 类别1分数, ..., 类别499分数]

注意这里不是概率,还没经过 softmax。

CrossEntropyLoss 内部会自动做:

text 复制代码
softmax + negative log likelihood

所以代码里不需要手动写 softmax。

labels 是什么

labels 形状是:

text 复制代码
[B]

例如:

python 复制代码
labels = [0, 12, 88, 499]

表示每个样本的真实类别编号。

损失函数想让模型学什么

交叉熵的目标是:

text 复制代码
让真实类别的预测分数尽量高
让其他类别的预测分数尽量低

例如某个样本真实类别是 128,模型输出 500 个类别分数,交叉熵会推动:

text 复制代码
第 128 类分数升高
其他类别分数降低

你的训练输出里的 loss 是什么

例如:

text 复制代码
train_loss=0.2942
val_loss=0.8619

含义是:

text 复制代码
train_loss:训练集平均交叉熵损失
val_loss:验证集平均交叉熵损失

一般来说:

text 复制代码
loss 越低越好
top1 越高越好

但论文里通常主要报告:

text 复制代码
Top-1 Accuracy
Top-5 Accuracy

loss 更多用于观察训练是否收敛、是否过拟合。

当前损失函数有没有改进空间

有。现在是最基础的:

python 复制代码
nn.CrossEntropyLoss()

后续可以考虑:

python 复制代码
nn.CrossEntropyLoss(label_smoothing=0.1)

也就是 label smoothing,标签平滑。

它的作用是缓解模型过度自信,对你这种 500 类任务可能有帮助,尤其你之前出现过:

text 复制代码
train_top1 很高
val_top1 明显低一些

说明有一定过拟合。

不过现在论文实验建议先保持基础交叉熵作为主设置,后续可以把 label smoothing 作为优化实验或正则化实验。

Label Smoothing Cross Entropy 本质上是在防止模型对训练标签过度自信。

普通交叉熵里,标签是 one-hot:

text 复制代码
真实类别 = 3

目标分布:
类别0: 0
类别1: 0
类别2: 0
类别3: 1
类别4: 0

也就是说,模型被要求把真实类别概率推到 1.0,其他类别全部推到 0.0。

但在手语识别里,很多类别动作很像,关键点也可能有噪声。如果模型被迫对训练样本"绝对自信",就容易记住训练集细节,验证集泛化变差。

Label Smoothing 会把硬标签变软。比如 label_smoothing=0.1,500 类任务里大概变成:

text 复制代码
真实类别: 0.9 左右
其他类别: 分到很小的一点概率

它表达的意思是:

text 复制代码
这个样本主要属于正确类别,但不要认为其他类别概率必须绝对为 0。

对你的项目来说,它主要解决三个问题:

  1. 缓解过拟合

    你之前 FULL 模型训练集 top1 到 98% 左右,验证集停在 82% 左右,说明模型已经很会记训练集了。Label smoothing 会降低这种"死记硬背"。

  2. 降低模型过度自信

    普通 CE 容易让 logits 拉得很大,模型输出非常尖锐。Label smoothing 会让输出分布更平滑。

  3. 适合细粒度相似类别

    手语类别之间可能只有手形、方向、轨迹的一点差异。软标签允许模型保留一点不确定性,更符合这个任务特性。

一句话概括:

普通 Cross Entropy 是"必须百分百相信这个标签";Label Smoothing Cross Entropy 是"相信这个标签,但别过度自信"。

论文里可以这样写:

为缓解孤立手语类别间细粒度相似性和关键点噪声导致的过拟合问题,本文在交叉熵损失中引入标签平滑策略,将硬标签分布转化为软标签分布,从而抑制模型对训练样本的过度置信,提高模型泛化能力。

相关推荐
信马堂1 小时前
WorkBuddy 接入第三方模型 API 全流程:安装与配置实录
人工智能·大模型·token·ai算力·workbuddy
朝朝辞暮i2 小时前
VLA 系统学习第 4 课:一个 Batch 进入神经网络后,模型到底是怎么“学会”的?
人工智能·python·神经网络·vla
IT古董2 小时前
《FDE前沿部署工程师实战教程》33 - Enterprise AI Observability:从Agent Trace到全链路智能运维
数据库·人工智能
xsd202411183 小时前
地网腐蚀AI识别算法全解析:从锈蚀图像到地下腐蚀快速定位
人工智能
oooost3 小时前
pytorch学习笔记2(transformer)
人工智能·机器学习
云杂项3 小时前
Exploring Model Inversion Attacks in the Black-box Setting(个人笔记)
人工智能
还卿一钵无情泪4 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
冬奇Lab4 小时前
LLM 驱动的自动化测试系列(06):移动端自动化(二)——DroidRun/Mobilerun 的角色级模型拆分
人工智能·测试
冬奇Lab5 小时前
一天一个开源项目(第230篇):HandRaw-Style —— 把 327 种手绘风格、165 种排版、36 种配色编号化,让 AI 画图不再每次都飘
人工智能·开源·资讯
罗西的思考5 小时前
从陶哲轩的访谈看:AI 数学研究方法论 & 给其它行业的启示
人工智能