作者:bliao
排名:第11名
发布时间:2023年8月25日
[第11名] 浅层编解码模型同样有效
感谢以下优秀的公开笔记:
[1] MARK WIJKHUIZEN的数据预处理笔记
[2] HOYSO48在ISLR中获得第一名的笔记
可复现代码:
- 数据预处理笔记
- 训练代码:我需要时间整理,稍后会提供详细指导。
数据预处理
我的预处理和数据分割基于[1],主要区别如下:
- 使用与[2]相同的特征点(仅x和y坐标)
- 基于唯一短语进行10折分割,使用第一折作为验证集。不同折之间没有共享短语。短语分割 > 随机分割 > 参与者ID分割
- 对补充数据采用相同的预处理方式
数据增强
基本使用与[2]相同的增强方法和超参数,主要区别:
- 以50%概率随机拼接两个样本,有助于防止过拟合
- 对解码器输入,以20%概率用词汇表中的随机字符替换真实字符,避免曝光偏差
模型架构
使用Conformer作为编码器,标准Transformer解码器。Conformer同时关注局部和全局关系,优于标准Transformer编码器。
-
同时使用CTC损失和交叉熵损失:编码器输出后应用CTC损失,解码器输出后应用交叉熵损失。损失权重:CTC损失0.2,交叉熵损失0.8。优势:
- 一个模型支持两种生成方式:非自回归(编码器)和自回归(解码器)
- 两个损失相互正则化,丢弃解码器后可增加训练参数量
- 超参数:5层编码器(hidden_dim=384, mlp_dim=1024, conv_dim=768, num_heads=6),3层解码器(hidden_dim=256, mlp_dim=512, num_heads=4)
三阶段训练
全部使用AdamW优化器,逆平方根学习率调度,权重衰减0.001,梯度裁剪最大值5,学习率5e-4,批大小512,预热比例0.2,标签平滑0.1,帧长368。
- 第一阶段:仅用训练集训练100轮
- 第二阶段:加入所有训练数据和补充数据训练150轮
- 第三阶段:使用AWP(awp_delta=0.2, awp_eps=0)在所有数据上训练300轮,AWP比RDROP泛化效果更好
无效尝试
- BPE:尝试使用子词而非字符,但无效
- 过宽浅层模型:FP16量化后模型约1800万参数(37MB)。动态量化可达4000万参数,但会使推理时间从2.5小时增至4小时,LB仅下降0.001。尝试8层编码器+4层解码器(帧长100限制推理时间),效果不佳可能因过拟合
- 编码器-解码器集成:对自回归和非自回归输出概率进行平均,结果无提升
- 外部数据:使用ChicagoFSWild数据集无效,主要因领域偏移
改进方向
- 加入姿态特征和z坐标可能更有效
- 使用更深但更窄的模型