Обзор на ту самую LLaMA и на ее fine-tune-ы: Alpaca, Vicuna, gpt4all🤩



После того, как как все поныли, что OpenAI так и не раскрыли подробности апгрейда GPT-4, выпущенной в марте, внимание многих обратилось на LLaMA, выпущенную на несколько недель раньше, и которую Meta AI реально сделали Open and Efficient Foundation Language Model.



Хотелось бы отдельно выделить очень крутой вывод от прошлых работ сообщества, которым руководствовались авторы: если раньше все гнались за количеством параметров модели, в работах Scaling Laws for Neural Language Models опять же от OpenAI были найдены неожиданные свойства. При увеличении количества данных, возникает прирост качества. Именно этот фактор позволил LLaMA-13B аутперформить GPT-3, несмотря на размер в 10!! Раз меньше



В статье ребята дают подробный рецепт сотворения модельки. Вот он:



👨‍🍳 Подготавливаем данные в размере 1.4T токенов:

1. English CommonCrawl – составляющее 67% данных. с использованием CCNet pipeline для удаления дубликатов, фильтрации неанглоязычного и низкокачественного контента, а также отбрасыванием страниц, не относящиеся к ссылкам в Википедии.

2. 15 % C4.

3. 4.5 % Git c вычещением низкокачетсвенных реп и удалением шаблонов с помощью регулярных выражений

4. 4.5% Wikipedia с удалением гиперссылок, комментариев и других элементов форматирования

5. 4.5% датасетов книг с удалением дубликатов

6. 2.5% ArXiv

7. 2% Stack Exchange – сайт вопросов и ответов высокого качества, охватывающий различные области знаний, от компьютерных наук до химии. С удалением HTML тегов и фильтрацией по рейтингу

👨‍🍳Потом обучаем BPE токенайзер с использованием реализации из библиотеки SentencePiece. Для токенизации числа разбиваются на отдельные цифры, а не обрабатываются как единое целое, а для декомпозиции неизвестных символов UTF-8 используются байты.

(при чем все данные прогоняются одну эпоху за исключением книг и википедии, там две)



Итак, за основу берется архитектура трансформера, но вот те самые уникальные ингридиенты успешной модели:

🎹Авторы нормализовали с RMSNorm входные данные для каждого подуровня трансформера. Подход заключается в делении каждого элемента входного вектора на квадратный корень из суммы квадратов всех элементов входного вектора.

🎹Заменили ReLU на SwiGLU

🎹Использовали Rotary positional embeddings. Этот метод заключается в добавлении дополнительных векторов с фиксированными значениями в векторное представление каждого элемента последовательности. Эти векторы имеют свойство поворота, что позволяет модели учитывать не только абсолютную позицию элементов, но и относительное положение друг к другу.

🎹В качесвте оптимайзера взяле AdamW с бетами 0.9 и 0.95.

🎹Добавляли штраф в функцию потерь сети, который пропорционален квадрату весовых коэффициентов каждого слоя сети с Weight decay в размере 0.1

🎹Добавляли gradient clipping – 1.0

🎹Использовали подход для эффективного multi-head attention, в котором мы разбиваем входную последовательность на блоки фиксированной длины и применяем механизм внимания только внутри каждого блока

🎹Для улучшения эффективности обучения уменьшается количество активаций, которые пересчитываются во время backward pass-а, для этого авторы реализуют обратную функцию для слоев трансформера вручную



Ну а теперь немного о ft этой прекрасной модели

Alpacaподход от ребят из Стенфорда. Находчивые люди нагенерировали дополнительного датасета для обучения с помощью ChatGPT, что позволило обучить ее на запросы в стиле instruct. Круто? круто



gpt4allневероятный подход!!! если в Alpaca было всего 54k затравок, то тут уже целых 437k



Ну и на закуску StableVicuna – все пытаются улучшить данные для обучения, и сделать их объем все больше. В связи с этим Stability AI предоставляют ft на их датасете, созданном на основе The Pile ,который содержит 1.5T токенов и является обширным датасетом под множество задач NLP



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