Зачем заморозить вложение позиции, когда перегоните Роберту? - PullRequest
1 голос
/ 20 марта 2020

Я заинтересован в работе distigllBERT от huggingface, просматривая их код (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 никогда не использовала вложения сегментов, но зачем встраивание позиции?
Большое спасибо за помощь!

1 Ответ

0 голосов
/ 23 марта 2020

В большинстве (может быть, даже во всех) широко используемых трансформаторах вложения положения не обучаются, а определяются с помощью аналитически описанной функции (ненумерованное уравнение на стр. 6 из Внимание - это все, что вам нужно бумага):

enter image description here

Чтобы сохранить время вычислений в Трансформаторном пакете , они предварительно вычисляются до длины 512 и сохраняются в виде переменной который служит кешем, который не должен изменяться во время обучения.

Причина, по которой не обучаются вложения позиций, заключается в том, что вложения для более поздних позиций будут подвергнуты тренировке, но с помощью умно аналитически определенных встраиваний позиций сеть может изучить регулярность за уравнениями и обобщение для более длинных последовательностей легче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...