DeBERTa

DeBERTa

💡 原文中文,约6700字,阅读约需16分钟。
📝

内容提要

作者用Paddle复现DeBERTa,因算力有限仅跑通demo。核心难点是disentangled attention:语义与位置编码分别计算再求和,Paddle的gather仅支持一维索引,实现比PyTorch复杂。MLM预测需同时引入绝对位置编码;在layer norm后的embedding上加扰动可提升训练稳定性。

🔎

延伸解读

复现动机与算力现实

作者因算力有限,仅用Paddle跑通DeBERTa demo,未进行完整训练。这提醒读者,复现大模型需评估计算资源,可先实现核心逻辑验证理解,而非盲目追求全量训练。

Paddle gather 的实现差异

DeBERTa的disentangled attention需重排索引,PyTorch的gather可轻松实现,但Paddle的gather仅支持一维索引,无法参考其他维度值,导致实现更复杂。跨框架移植时需注意此类底层API差异。

绝对位置编码的必要性

DeBERTa在attention中引入相对位置编码,但MLM预测时仍需绝对位置编码,二者缺一不可。这提示模型设计时,不同任务可能需要组合多种位置信息,不能简单替换。

扰动训练的稳定技巧

NLP中因词汇量大,输入扰动效果不稳定。原文发现,在layer norm后的embedding上加扰动,能提升训练稳定性。这为NLP鲁棒性训练提供了一个可借鉴的实操点。

❓

Q&A

DeBERTa 的核心创新点是什么?

DeBERTa 的核心创新是 disentangled attention,即将文本的语义编码和位置编码在计算 attention 时分别两两计算再求和。

为什么作者没有完整训练 DeBERTa 而是只跑通 demo?

因为算力有限,参考原 BERT 参数在 A100 上跑一轮需要 3 个小时,作者觉得算力顶不住,所以放弃完整训练,只用 Paddle 实现跑通 demo 来锻炼编码能力。

用 Paddle 实现 DeBERTa 时,disentangled attention 的主要难点是什么?

主要难点在于 Paddle 的 gather 函数与 PyTorch 不同,Paddle 的 index 只能是一维的,重定向 index 时无法参考其他维度的值,导致实现比 PyTorch 更复杂。

DeBERTa 在 MLM 预测时除了相对位置编码还引入了什么?

DeBERTa 在 MLM 预测时还引入了绝对位置编码,两者缺一不可。

在 NLP 中如何提升扰动训练的稳定性?

原文发现,在 layer normalized 之后的 embedding 上添加扰动,对提升扰动训练的稳定性很有帮助。

处理大规模数据集时,Paddle 的 DataLoader 提供了什么来支持逐行读入?

Paddle 的 DataLoader 提供了 IterableDataset,可以逐行读入数据,并自行编写随机逻辑。

🏷️

标签

➡️

继续阅读