【问题标题】:Why freeze position embedding when distill roBERTa?为什么在蒸馏 roBERTa 时冻结位置嵌入?
【发布时间】:2020-07-01 11:39:26
【问题描述】:

我对 huggingface 的 distillBERT 工作很感兴趣,通过查看他们的代码 (https://github.com/huggingface/transformers/blob/master/examples/distillation/train.py),我发现如果使用 roBERTa 作为学生模型,他们会冻结位置嵌入,我想知道这是做什么用的?

def freeze_pos_embeddings(student, args):
    if args.student_type == "roberta":
        student.roberta.embeddings.position_embeddings.weight.requires_grad = False
    elif args.student_type == "gpt2":
        student.transformer.wpe.weight.requires_grad = False

我了解冻结 token_type_embeddings 的原因,因为 roBERTa 从未使用过段嵌入,但为什么要定位嵌入?
非常感谢您的帮助!

【问题讨论】:

    标签: huggingface-transformers bert-language-model


    【解决方案1】:

    在大多数(甚至所有)常用的 Transformer 中,位置嵌入没有经过训练,而是使用解析描述的函数(关于 Attention is all you need 论文的第 6 页):

    为了节省 Transformer package 中的计算时间,它们被预先计算到 512 的长度,并存储为一个变量作为缓存,在训练期间不应更改。

    不训练位置嵌入的原因是后面位置的嵌入会训练不足,但通过巧妙地分析定义位置嵌入,网络可以学习方程背后的规律性并更容易泛化更长的序列。

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 2021-09-18
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 2020-08-08
      • 2021-07-23
      • 2014-03-29
      • 2020-03-27
      相关资源
      最近更新 更多