при обучении подбирали батчи примерно с одинаковым количеством символов.
Sentence pairs were batched together by approximate sequence length. Each training
batch contained a set of sentence pairs containing approximately 25000 source tokens and 25000
target tokens.
Это как одна из стратегий регуляризации? Я вот думаю, нужно ли мне это делать для своей задачи NLLB fine-tuning? В данных встречаются как совсем короткие, так и длинные предложения.
1) вычисление селф аттеншена тем дольше, чем длиннее последовательности 2) связь - квадратичная. Для N токенов нужно N^2 памяти/вычислений 3) если у тебя строки разной длины — их нужно добить до одной длины с помощью ничего не значащих токенов. Они всё еще участвуют в вычислениях, но на последующих этапах их выкидывают 4) выходит, если большая разница в длинах, то делается много ненужных вычислений. Можно этого избежать, если все токены будут полезными. 5) для файнтюнинга в целом работает тот же приём, только если нет паддинга до одной и той же длинны каждый раз, иначе разницы нет.
Понятно, выходит это сделано для оптимизации вычислений. P.S. Ааа, мне Игорь ответил😌😌😌 Я твое видео про трансформеры три раза посмотрела, спасибо за него
Но при этом у нас снижается вариативность данных в мини батче, что может приводить к худшей итоговой сходимость (а может и нет) но обычно вроде группировку по длине делают с некоторой погрешностью, скажем процентов 20 например
насколько я видел практики, там делается rolling buffer. Из датасета вычитывается несколько сотен батчей, они внутри этой кучи сортируются по длине, и затем оттуда по порядку берутся данные
Ага, я в кастомных пайплайнах обычно заранее делал грубую группировку
Обсуждают сегодня