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, мы выпустим веса для ознакомления!