ML быстро меняется!

Недавно Meta выпустила модель LLaMA, которая многих удивила — в ней было много волшебства в маленьком размере. Версия 12b была сравнима по качеству с самой большой моделью OpenAI GPT-3 175B.

MosaicML выпустил модель MPT-7B, которая имеет контекст из 60 тысяч токенов, благодаря кодированию позиции ALiBi.

BigCode выпустила модель StarCoder, которая набрала 30,4% на HumanEval pass@1, а также выпустила набор данных кода, очищенный от информации, позволяющей установить личность, под названием Стек.

Replit недавно выпустила модель replit-code-v1–3b, обученную на коде, который следует некоторым инновациям LLaMA, и показывает отличные показатели, но у нее нет возможности заполнения посередине, нет различий, и она не видела данных. кроме кода.

Мы планируем сделать модель общедоступной.

Инновации LLaMA

Самое главное в LLaMA — это то, что он был обучен для токенов 1T (и более крупные модели для токенов 1,4T). Но одного этого недостаточно, архитектура трансформатора и гиперпараметры должны быть правильными, чтобы продолжать обучение так долго.

Архитектура: LLaMA не имеет терминов предвзятости в отношении внимания к себе и в MLP — это, вероятно, позволяет лучше работать снижению веса. Само-внимание работает независимо от MLP, а не последовательно — это делает вычисления немного быстрее, потому что им не нужно ждать друг друга. LLaMA также использует RMSNorm вместо LayerNorm, но это не должно иметь значения.

Гиперпараметры: самое интересное — размер пакета 4M токенов. В начале обучения многие токены вызывают удивление у модели, и она получает интересные обновления. Но чтобы работать дольше, каждая партия должна иметь разнообразные данные, которые еще нельзя предсказать, поэтому она должна быть такой большой.

Рисунок 1: Потери и показатели LLaMA монотонно улучшаются для токенов 1T и выше.

Кодирование позиции ALiBi

Трансформеры традиционно имели абсолютное кодирование позиции, что означает, что каждая позиция в контексте 2048 или около того токенов имеет свой собственный обучаемый вектор. Это, конечно, ужасно, потому что одни и те же жетоны, сдвинутые влево или вправо, приведут к разным активациям! Но некоторые все еще используют его, особенно модель StarCoder.

Для этого есть три широко используемых решения:

  • Относительное внимание, представленное в статье Transformer XL (с не очень ясным объяснением)
  • Rotary Embeddings (используется LLaMA)
  • "Алиби"

Относительное внимание имеет большой недостаток: оно добавляет обучаемые параметры. Это означает, что инициализация должна быть правильной, градиенты должны быть правильными. Некоторое время назад мы попробовали вейвлеты вместо обучаемых параметров, и это сработало так же хорошо, доказав, что здесь действительно нет необходимости в обучаемых параметрах.

И Rotary Embeddings, и ALiBi великолепны, но у ALiBi есть дополнительное преимущество — расширяемый размер контекста по сравнению с тем, что использовалось в pretrain. По нашему опыту, не сразу, но после небольшой доводки — все равно большое преимущество.

Но давайте напрямую сравним последние два на коротком пробеге токена 15e9:

Так что ALiBi даже лучше подходит для нашей установки!

Раннее отсев

Исследователи из Meta предложили использовать отсев в ранней тренировке для улучшения недообучения (не переобучения). Работает это следующим образом: размещаем слои дропаута во многих местах трансформатора, постепенно снижаем скорость дропаута с 10..15% до нуля на первых 20% тренировочного прогона.

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

Красный пробег с ранним отсевом имеет явное преимущество перед потерями на тренировке (не говоря уже о небольшом падении).

Внимание с несколькими запросами

Один из способов иметь большой размер контекста при небольшом использовании памяти — это внимание к нескольким запросам, используемое в масштабе в моделях PaLM. Короткое объяснение таково: в Multi-Head Attention слой внутреннего внимания создает K, V и Q (ключи, значения и запросы) для каждой головы. Но в Multi-Query ключи и значения внимания создаются только один раз (не для каждой головы), только запросы разные для каждой головы внимания. См. 2204.02311 для подробного объяснения.

Это позволяет использовать меньший кэш KV при выборке и повысить скорость логического вывода.

Недавно он был использован в моделях StarCoder, где он помогает обрабатывать большой размер контекста 8192.

ЛИОН

Еще одна недавняя разработка — LiON, оптимизатор, который делает смелое заявление о том, что он может заменить Адама. Адам правил миром глубоких моделей с момента его появления в 2014 году, почти десять лет!

Разные люди пробуют LiON в своих проектах с разной степенью успеха. Хорошей отправной точкой для осмотра является lion-pytorch на github от Phil Wang aka lucidrains (спасибо, чувак!).

Основная проблема заключается в гиперпараметрах, которые хорошо известны для Адама, но для LiON это все еще догадки. Их три: бета, потеря веса, скорость обучения. Мы взяли β1=0,95, β2=0,98 без проверки и протестировали LR и WD:

LR: серый — это Адам с lr=20e-5, остальные — LiON от 2e-5 до 5e-5 (лучшие).

WD: более высокое снижение веса (зеленый wd = 0,8) немного хуже в середине (в пределах погрешностей?) для этого короткого прогона, но так же хорошо в конце по сравнению с wd = 0,6 и wd = 0,4.

Мы взяли lr=5e-5 (в четыре раза ниже скорости обучения Адама) и wd=0,8 (в восемь раз выше, чем у Адама).

Кстати, низкое влияние уменьшения веса на конечный результат согласуется с работой LiON: они изменили WD с 0,5 до 2,0, что очень мало повлияло на конечную производительность, особенно при более высокой скорости обучения.

Данные

Мы используем Red Pajama в качестве текстового набора данных, Stack Dedup 1.2 для простого кода и наш собственный внутренний набор данных для различий.

Мы используем обучение с заполнением посередине почти так же, как и в 2207.14255 (но мы ограничиваем размер «средней» части до 4k символов)

Гиперпараметры

Оптимизатор LiON β1=0,95, β2=0,98

Размер партии 2 млн токеновLR5e-5

Размер контекста 4096

График LR линейный до нуля с прогревом

Отсев p=0,1

Снижение веса 0,8

График отсева до нуля на 20% обучения

Заключение

Модель называется «202305-refact2b-mqa-lion», у нее параметры 1.6b, мы выпустим веса для ознакомления!