Транскрибация лекции Михаила Тихомирова с названием "LLM: обучение и использование. 1. Большие языковые модели. Введение. Основы архитектуры Transformer". Материал по архитектурам больших языковых моделей.

Разбил на несколько частей из-за большого объёма. Слайды на видео, распечатка очень удобна для заметок. Часть 1.

Миникурс будет посвящен большим языковым моделям, чтобы вы узнали о том, как они на самом деле устроены, чтобы лучше понимать, как в дальнейшем их использовать для ваших нужд. Соответственно, первая лекция будет посвящена в основном видению и основам архитектуры трансформера. Ну, ни для кого не секреты, поэтому столько людей здесь собралось, что большие языковые модели становятся все более популярны в мире, и проявляется это не только в том, что мы с вами вот их используем, слышали об этом, даже мой стоматолог слышал что-то про GPT.

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

При этом в последнее время уже возникают в США нехватки электричества для цодов, для llm, и там они уже пытаются договариваться на какие-то электростанции, чтобы это все дело поддерживать. И, соответственно, рост стоимости компаний, хотя здесь, конечно, это такое, рост стоимости по оценке инвесторов и Market Cap это разные вещи, но все равно, по информации годичной давности, получается, OpenAI оценивалась инвесторами в 157 миллиардов долларов.

Это так же много, как и Market Cap у Siemens, который производит все на свете, он производит турбины, не знаю, чего он только не производит. Она существует уже долгие годы и производит конкретные материальные ценности. И вот какая-то компания, которая производит по сути диджитал ценности, она уже по оценке инвесторов дошла вот до этой суммы. Что поразительно. Но более поразительно, конечно, это то, кто больше всех денег на самом деле получил с этой всей историей с большими языковыми моделями - Это NVIDIA.

Она за 4 года выросла в 10 раз. А это уже честный маркет кап. Все модели, которые обучаются, практически все, Google не рассматриваем, обучаются на видеокартах NVIDIA. Соответственно, что же такое эти языковые модели? И на самом деле, базовая задача языкового моделирования может быть поставлена разным образом.

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

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

Это дополнение на клавиатурах, это подсказка в поисковых системах, это исправление ошибок, которые тоже очень неплохо работают. Вот языковое «мотилирование», он меня поправил сразу и начал искать языковое «моделирование», что очень замечательно.

И, в частности, в распознавании речи очень часто после того, как распозналась первая версия того, что вышло из модели распознавания речи, также проверяется языковыми моделями на то, что этот текст имеет смысл с точки зрения языка.

Вот. И давным-давно, на самом деле, этими вещами люди занимаются, и базово были так называемые n-граммные языковые модели. И про них не стоит забывать, думая, что ну чё эти n-граммные языковые модели, когда они были? Потому что они, на самом деле, до сих пор используются. Просто вы об этом можете не знать. В частности, для построения в современных датасетах, на которые обучаются большие языковые модели, этап фильтрации часто происходит с использованием классических н-граммных языковых моделей.

Поэтому эти технологии не забыты и используются до сих пор. И наверняка не только в этих задачах. Так вот, что же такое n-граммная языковая модель? Суть в том, что оценить вероятность, например, следующего слова на основе длинного-длинного контекста статистически очень тяжело. Вам нужно как-то собирать эту информацию, считать частотку, если мы рассматриваем статистические методы.

И если контекст слишком большой, таких цепочек, в принципе, за весь корпус будет мало, и мы мало что можем про них сказать Поэтому, на самом деле, использовались n-граммные, где n — это количество слов, на основе которых мы делаем предсказания Например, b-граммная модель, мы предсказываем текущее слово на основе предыдущего слова, только так.

Причем используются иногда униграмные языковые модели, когда мы предсказываем вероятность слова только на основе его, по сути, вероятности, насчитанной на корпусе, на корпусе каком-то, т.е. без контекста какого-то. И такие языковые модели тоже используются. Обычно n было какое-то небольшое число, 2, 3, для чистки корпусов используют, по-моему, 13, но там не на словах, а на символьных n-граммах.

Как раз на символах. Но после N-gram языковых моделей были и нейросетевые, еще до современных трансформеров, использовались рекуррентные сети, а именно, конечно, чаще всего LSTM так называемые. Мы не будем выдаваться подробности по поводу того, что это, но важно понимать, что многие идеи того, как используются языковые модели, были заложены еще тогда.

Вот как, например, как выглядели условно рекуррентные языковые модели. К нам на вход приходит некоторое слово. Мы это слово преобразуем в некоторый вектор, который называется embedding. Embedding, запомните, это важное понятие. Соответственно, далее этот embedding подается на вход нашей рекуррентной сети. И для каждой позиции мы формируем некоторый выход. Это может быть один слой рекуррентной сети, два слоя, четыре слоя, неважно.

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

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

У нас происходило затухание информации, ну и помимо этого возникали такие проблемы, как затухание или взрыв градиентов при обучении, что тоже плохо. Лекция сегодня не про RNN-ки, конечно, но вот в 2018 году, когда только начали про трансформеры и GPT активно говорить, RNN-ки использовались тоже для того, чтобы вот такие языковые модели классически обучать, и была даже модель ELMA, которая, в принципе, в некоторых задачах не уступала на тот момент BERT-у.

Они по своей сути одинаковые. BERT — это тоже на трансформере, тоже языковая модель, только не авторегрессионная. Авторегрессионные модели — это те, кто вот предсказывают следующее слово. Вот, это была модель encoder. Чуть-чуть дальше уже будет понятнее, что это такое.

И, по сути, так же сейчас устроены LLM. Кроме того, что между выходом и входом у нас не… Ой, не RNN-ки, LLM-ки. У нас не RNN-ка какая-то, 1, 2, 3 слоя, а большое количество трансформер-блоков, и текущие модели стали намного более глубокими. И почему я, в частности, говорю сейчас про рекуррентные модели?

Потому что зарождение механизма внимания произошло именно на них И исторически необходимо об этом помнить, потому что какие-то идеи всегда могут быть переиспользованы в будущем. Соответственно, в чем была проблема до трансформеров, до внимания вот этих подходов на основе RNN?

Предположим, что у нас есть нейросеть для перевода с немецкого на английский Как это делалось? У нас есть отдельный энкодер для немецкого языка, по сути. Это нейросет, который получает на вход вот эти слова, преобразует в вектора и сжимает это в некоторое представление Z. Это представление Z передается на вход декодер части, который уже раскручивает его с учетом уже предсказанных слов. То есть также LSTM, какая-нибудь, ну, любая RNN.

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

То есть модели из этого одного вектора нужно было развернуть всю эту последовательность. И это крайне сложная задача, у которой были, конечно же, свои удачи и неудачи. На самом деле, когда модель обучается прямо на конкретных текстах, Это работало, но работало, опять же, на переводе предложений. Если вы возьмете большой текст, там уже начинались большие проблемы. И вот в 2014 году была фундаментальная работа про механизм внимания.

Важно еще отметить, что тогда задача перевода была самая популярная. И, соответственно, механизм внимания тоже возник в работе от Google про перевод. И в чем там суть? Суть в том, что мы имеем также вот этот вот энкодер и декодер, но при предсказании каждого следующего слова, вот там вот синие кубики здесь есть посмотреть, мы не берем один фиксированный z.

Мы пытаемся посмотреть некоторыми, с некоторым, скажем так, вниманием на все h, которые вот 1, 2, 3, 4 на этой картинке, взвесить их, получить некоторый вектор, также один.

Но каждый раз при генерации каждого токена, следующего, мы снова пытаемся понять вот для этого токена нам какие слова из контекста важны. Вот давайте возьмем их вектора с большим весом. Математически это выглядит следующим образом. У нас была некоторая функция внимания, это может быть, например, скалярное произведение, которая смотрела на, в данном случае, на выход предыдущего слоя декодера и на конкретный выход энкодера, h1, h2, h3, неважно.

Получались некоторые некоторые вещественные числа, скалярное произведение, например. Эти вещественные числа, конечно же, никак не нормированы, поэтому их нормируем, применяя функцию softmax. Это вот где экспонента конкретной позиции делить на сумму экспонент всех позиций. То есть, если у нас в контексте 5 слов, у нас внизу от нашего softmax будет 5 элементов. И сам же этот элемент тоже, потому что он входит в сумму.

Таким образом, мы получаем на самом деле значение для каждой позиции от 0 до 1, а сумма всех этих весов будет единицы равна. И получается, это именно те самые веса для взвешивания, которые нам нужны для формирования вот некоторого вектора контекста C. То есть для шага i мы формируем c и t вот таким вот образом. И это сильно улучшило как раз таки ситуацию с задачей перевода и в целом хорошая концепция, которая в дальнейшем породила вот такую вот архитектуру, архитектуру трансформер.

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

При этом энкодер состоит из N блоков абсолютно одинаковых И уже первое отличие от рекуррентных сетей — то, что этих блоков было много Сеть глубокая Это уже как раз пошли идеи из компьютера вижена, больше-больше все вот к нам в NLP. Декодер тоже, по сути, каждый декодер-блок одинаков, ну, архитектурно одинаков друг к другу, Но веса, кстати, там везде разные, это никак в RRN, что там веса как-то шарятся, да

Отличие, на самом деле, энкодера архитектурно от декодера, вот в ванильном трансформере, небольшое В декодере у нас добавляется специальный слой, который смотрит на выходы энкодера, последние выходы, как раз таки вниманием. И в декодере у нас не multi-head attention, который смотрит на весь вход, а multi-head attention мы подробно сейчас разберем. А некоторые маскированные, то есть мы не смотрим направо.

То есть, когда мы хотим предсказать следующее слово, нечестно как-то куда-то, ну, в тренировочных данных Это слово у нас уже есть, но нечестно на него смотреть, обучаясь предсказывать, потому что в реальности у вас его не будет И это, на самом деле, все отличия энкодера от декодера части, то есть вот этот дополнительный слой с вниманием и маска на Multihit Attention В остальном они эквивалентны, и это будет потом видно в том, как устроен GPT, в том, как устроен BERT, в частности, Но что интересно, сейчас весь мир крутится вокруг трансформеров, но когда он вышел, метрики были не ахти.

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

И, кстати, да, единственная задача в этой табличке — это перевод. Опять же, важная особенность подхода с трансформером по отношению к LSTM, как и прошлым подходам, было в том, что он очень хорошо мог масштабироваться и параллелиться. И вот это качество, на самом деле, стало, наверное, ключевым в развитии того, что мы видим сейчас. Архитектура трансформера очень масштабируемая, очень хорошо параллелится.

И вот LSTM вы так не запустите. Опять же, заложенный последовательно вот такой проход. Там, конечно, есть способ обучения как-то, чтобы сгладить углы. Но все равно тяжело. Трансформер обучается очень хорошо. Вот. Но, опять же, прорыва не произошло, когда вышла статья. Но прорыв произошел в 2018 году, когда вышли две работы от Google. Мы про нее поговорим через пару лекций.

И вот модель от OpenAI GPT-1. В чем же особенность? Архитектурно это просто трансформер-декодер. Энкодер-часть мы выкинули. А раз энкодер-часть мы выкинули, мы также что делаем? Выкидываем и attention на этот энкодер. Он нам не нужен больше. То есть, если посмотреть на то, что осталось в этом декодере, то это тот же энкодер. Посмотрите на эту картинку и посмотрите на эту картинку слева. Найдите разницу, да. Ну вот только и Masked Multihead Attention, конечно же, остался.

Это раз. Два. Они решили применять технологии Transfer Learning, которые были популярны, опять же, в тот момент в Computer Vision. Уже, опять же, в тот момент на LSTM-ках выходила тоже подобная работа ELMA, о которой я упоминал. Идея стоит в том, что сначала найти огромный массив задач, которые мы можем просто вот бесконечностью получить какую-то вот задачу, которую можем обучать нашу сеть на бесконечном количестве данных.

Но при этом это будет какой-то смысл иметь. В данном случае была выбрана задача моделирования краски языка, языкового моделирования, предсказать следующее слово. У нас же огромное количество есть текстов в интернете, и нам не нужно, чтобы приходил человек и размечал, что следующее там слово должно быть Юрий Гагарин или что-то еще.

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

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

И вот это вот обучение в два этапа, оно как раз таки и позволило существенно уже оторваться от предыдущих сот решений на 10 пунктов и так далее. Интересно, что OpenAI и BERT вышли одновременно, GPT-1 и BERT. Там непонятно, кто на кого правильно ссылается, там кросс-ссылки в статьях и так далее. Но, по сути, они параллельно вели эту деятельность, и BERT оказался чуть-чуть лучше по метрикам, на задачах, на которые замерялись.

Задачи — это все такие классические, энкодерные, в данном случае это классификация, еще что-то такое. И очень важный момент, что тогда многие заявляли, что это значит, что архитектура BERT'а и его задачи, маскированное языковое моделирование, лучше, чем архитектура GPTI и ее моделирование языка в таком постановке авторегрессионной.

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

Но мы к этому еще вернемся, потому что важно не это, важно то, как OpenAI решили действовать дальше. Они посмотрели, как работает их модель, им понравилось, и они решили масштабировать. Увеличили модель в 10 раз там, ну или в 3 раза, уже не помню, кстати, размер.

Да, вот 117 миллионов параметров увеличили в 10 раз. Полтора миллиарда параметров. Там в четыре раза больше слоев, но еще и вширь. Чуть-чуть изменили архитектуру. Мы про layer norm поговорим буквально через полчаса. И начали замечать, что вот такая модель, которая стала больше, они сделали намного больше dataset. И опять же, очень качественно пытались dataset делать, а для этого они взяли за основу Reddit. И вот эти трюки с Reddit и так далее, вы их запоминайте, они еще не первый раз и не последний возникают.

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

Вот, они могли избирательно вот так набирать. Сейчас, конечно, несколько другая парадигма построения DTC. Ну, в любом случае, собрали целых 40 гигабайт текстов, что сейчас кажется очень мало, на самом деле. Тогда с теми вычислительными возможностями это была тяжелая задача. Особенно для модели в полтора миллиарда параметров. Не было еще софта нормального написанного, чтобы это хорошо обучать. Они все это самостоятельно, видимо, делали.

Вот. Ну, суть в том, что они всегда стараются делать качественный набор данных. Другие пытались повторить успех GPT-3 на заре, когда еще не было ламы и так далее. В open-source ученые. Модель Bloom была. Прекрасная работа, отличная научно-чистоте, а модель отвратительная. Вот, ну потому что надо именно вкладываться в качество данных, а у ученых нету возможности тратить свои, получается, гранты на то, чтобы вот все полностью пустить на качество данных.

Хочется провести прям полноценное исследование, да? Вот, OpenAI могли себе это позволить. И они начали замечать, что вот в такой отмасштабированной модели начали появляться какие-то неожиданные возможности. Если дать модели некоторую подсказку в тексте, вот есть какой-то текст, и туда вот куда-то подсказку, она начнет как-то действовать, не просто продолжать текст, а вот, например, пытаться его переводить, пытаться там как-то классифицировать, вероятно или невероятно, то есть продолжение.

То есть если правильно оформить наш вход, модель начинает как-то решать наши задачи без предоставления каких-то примеров этих задач, так называемой zero-shot возможности. Zero-shot, потому что мы показываем ноль примеров. Вот. И это было очень интересно наблюдение, в частности, вот на задачи аннотирования. Если просто добавить, ну там можно ее как-то промтить, пожалуйста, сделай саморизацию, вот тебе текст.

Напомню, модель предсказывает следующее слово. Ее не учили отвечать на ваши просьбы и мольбы. Но если добавить в конце текста TLDR, который просто в данных часто встречался, что после этого у нас идет саморизация. Сразу у нас метрика растет с 21 до 29. Это очень круто, особенно если мы достигли хотя бы 40, где 40 метрика — это крайне сложный метод взять первые три предложения.

Лит 3. Все. И его очень долго не могли превзойти в саморизации. Ну, полтора миллиардная модель смогла выбить 29 на этой задаче. Не совсем честное сравнение. Одно дело — это экстрактивная саморизация, другое — абстрактивная. Но не важно. И что стало интересно, на самом деле, на GPT-2 это уже замечали, то, что появилась связность между абзациями разными в текстах.

То есть можно было начать генерировать текст, который будет иметь какую-то единую канву повествования. Потому что до этого, когда на LSTM-ках учили, когда марковские цепи смешивали с LSTM-ками и так далее, мы достигали неплохой связности локальной, то есть, ну, морфологически, синтаксически все выглядело нормально. Но смысл — это был просто кошмар.

Мы тоже экспериментировали с таким еще в 2018, именно на генерацию новостей, прямо на новостях пытались натюнить эти LSTM, а в итоге оказывалось, что машина въезжала в окно третьего этажа, вот такие предложения. То есть, в принципе, с точки зрения языка — корректно, но с точки зрения смысла — никакого. И потом, всего лишь спустя год, опять же, здесь каждый год было, где у нас тут 19, там 18, и вот наступил 20 и появилось уже 5.3.

Они увеличили еще в 100 раз модель, то есть они поверили в масштабируемость. Они ее сделали коммерческой, и это первая такая коммерческая модель языковая, которая продавалась именно по API. И в ней они развили вот эти возможности, по сути, увидели и развили возможности Zero-Shot к новой парадигме in-context learning в U-Shot, обучению в контексте.

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

И за счет того, что она стала успешна, они стали собирать и логировать запросы пользователей, инструкции, которые пользователи дают. И затем, про это я расскажу, наверное, на следующей лекции, если я правильно помню, и возникли инструктивные модели, которым все из вас пользуются. Я не знаю, пользовался ли кто-то из вас хотя бы когда-нибудь неинструктивными вот такими базовыми моделями, как GPT-1, GPT-2, GPT-3, которые только предсказывают следующее слово, они не учились следовать вашим инструкциям.

Раньше только такими и пользовались. Да, ну, еще важный момент, в 15 раз больше данных это тоже очень сильно повлияло. Вот получилась такая модель, это успех, но что же стоит более конкретно за этим успехом с точки зрения архитектуры? Давайте рассмотрим подробнее, чтобы понимать, какая магия происходит на этих шагах.

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

Мы рассмотрим каждое из слоев. Сейчас multi-head attention, feedforward и layer norm. И как в итоге делаются предсказания. Начнем. На самом деле, одна из моих любимых частей — это токенизация слов. Я не буду, конечно, говорить подробно в рамках данного курса про токенизацию, но говорить там можно о многом. Многие люди недооценивают важность токенизации и то, насколько она влияет на то, сколько вы заплатите за ваш промпт.

Конец первой части.

Некоторые пояснения к статье:

Один из самых ранних подходов к построению языковой модели основан на n- грамме. N-рамм - это непрерывная последовательность из n элементов из заданного образца текста. Здесь модель предполагает, что вероятность следующего слова в последовательности зависит только от окна фиксированного размера предыдущих слов.

Архитектура Трансформеров
• Представлена Vaswani и др. (2017) в статье «Attention is All You Need».
• Ключевая инновация: механизм внутреннего внимания, позволяющий модели эффективно сосредотачиваться на релевантных частях текста.

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

Комментарии (0)