Формирование интуиции по концепциям, лежащим в основе LLM-моделей, таких как ChatGPT — Часть 1 Нейронные сети, трансформеры, предварительное обучение и настройка

Формирование интуиции по основам LLM-моделей, таких как ChatGPT — Часть 1

Я уверен, что я не единственный, но, если это не было слишком очевидно из моего твита в январе, мой разум был полностью потрясен, когда я впервые столкнулся с ChatGPT. Опыт был совершенно непохож на любой другой, который у меня был с любым ‘чатботом’. Казалось, что он понимает намерения пользователя, отвечая на запросы и комментарии так естественно, как только человек может. Если мне сказали бы, что на другой стороне этого разговора находится еще один человек, я бы не сомневался в этом ни на секунду.

После первоначального шока я начал читать все, что мог достать о этой загадочной технологии. Я начал экспериментировать с API ChatGPT, когда он вышел в марте, создавая чатботов и писал блоги об этом опыте (один из которых был улучшен на VoAGI, что до сих пор меня восторгает). Конечно, этого было недостаточно, мне нужно было узнать больше о том, что происходит на другой стороне этого вызова API, и я начал погружаться в кроличью нору языковых моделей, глубокого обучения, и трансформаторов и т. д.

Самое известное из трех законов Сэра Артура Кларка о предсказании будущих научных и технологических достижений гласит:

“Любая достаточно сложная технология неотличима от магии.”

Этот блог-пост является попыткой развенчать концепции больших языковых моделей (LLM), раскрывая “фокус фокусника”, если хотите, доступным способом. Независимо от того, являетесь ли вы одним из тех, кто активно следит за тенденциями искусственного интеллекта, изучает развивающееся пространство инженерии ИИ и нуждается в основах, или просто пытаетесь удовлетворить любопытство – надеюсь, что вы получите немного больше информации о гениальных концепциях, которые позволили создать ChatGPT.

Нейронные сети

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

Каждый круг представляет собой нейрон, каждый из которых соединен с другими нейронами в следующем слое через программные параметры, которые регулируются по мере того, как модель 'учится' выполнять необходимую задачу. Например, определение, показывает ли изображение кошку или собаку. GPT-3 был обучен на нейронной сети с 96 слоями и 175 миллиардами параметров. По информации, GPT-4 имеет 1 триллион параметров. Источник изображения

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

Нейронные сети породили потребительские технологии, с которыми вы, вероятно, уже сталкивались (и они не обязательно ограничены языковыми задачами), такие как разблокировка телефона с помощью распознавания лиц, функция дополненной реальности в вашей игре Pokémon или рекомендации передач на домашних экранах Netflix.

Даже Андрей Карпати утверждает, что это может быть новым и лучшим способом написания программного обеспечения:

Например, вместо написания логики программы вручную (— если выполняется условие A, выполнить x; если условие A не выполняется, выполнить y), нейронная сеть учится через примеры из обучающих данных, что если она сталкивается с условием ‘A’ в процессе работы, она должна выполнить x. Эти условия/логика не определяются их создателями, а нейронная сеть сама настраивается (изменяя свои миллиарды или даже триллионы параметров – весов и смещений), чтобы соответствовать этому желаемому поведению.

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

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

Поэтому часто говорят, что модели машинного обучения, обученные на нейронных сетях, являются ‘черными ящиками’. Их входы и выходы могут быть наблюдаемы, но внутренние механизмы или то, как они делают то, что делают, не так легко понять. Это также причина обнаружения ‘возникающих’ способностей. По мере увеличения размера модели LLM (измеряемого количеством параметров), она начинает выходить из обучения с неожиданными способностями. Например, GPT-2 оказалась хороша в переводе языка, GPT-3 была отличным обучаемым на несколько примеров, а GPT-4 показала искры искусственного общего интеллекта или AGI. Ни одна из них не была явно определена как цель обучения – ее основная задача состояла в предсказании следующего слова в последовательности.

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

Предварительное обучение базовых моделей

Первый шаг в создании чего-то подобного ChatGPT – это предварительное обучение базовой модели или фундаментальной модели. Цель этого шага – создать модель машинного обучения, способную автономно генерировать связную структуру слов или генерировать текст, похожий на человеческий (фраза, предложение, параграф), путем генерирования слов последовательно на основе предсказания, какое слово должно следовать после предыдущих слов. Это называется предварительным обучением, поскольку результат этого шага – базовая модель все еще является необработанным продуктом, который имеет ограниченные практические применения и обычно интересен только исследователям. Базовые модели дополнительно ‘обучаются’ на этапах оптимизации для конкретных задач с реальной практической пользой, таких как перевод текста, суммаризация, классификация и т. д.

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

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

<img alt="Слову, такому как 'the', присваивается идентификатор токена (5), а затем присваивается вектор вложения с n элементами или размерностями, например 512. Здесь показаны только 3 элемента, как пример (-0.0340, 0.0068 и -0.0844). Векторные вложения слов в этой матрице получают случайные значения в начале предварительного обучения. Эти значения корректируются при ‘обучении’ модели – значения слов с семантическими значениями, более похожими друг на друга, становятся более похожими/ближе друг к другу в каждой итерации обучения. Источник изображения.”

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

В машинном обучении набор данных обычно разделяется на обучающий набор данных и тестовый набор данных. Обучающий набор данных используется для обучения модели, а тестовый набор данных (невидимые данные) используется для оценки предсказаний модели. Тестовый набор данных также используется для предотвращения ‘переобучения’, когда модель показывает исключительные результаты на тренировочных данных, но плохо работает на новых, невидимых данных.

Рассмотрим пример предложения в обучающем наборе данных: “I have to go to the store”. Это предложение может использоваться следующим образом:

  1. Модели дается “I have”, и она должна предсказать “to”.
  2. Затем ей дается “I have to”, и она должна предсказать “go”.
  3. Затем “I have to go”, и она должна предсказать “to”.
  4. Наконец, “I have to go to the”, и она должна предсказать “store”.

Пройдя по всему корпусу обучающего набора данных таким образом, модель сможет выучить, какие слова обычно следуют после разных наборов слов. Она учится зависимостям между “I” и “have”, “have” и “to” и так далее.

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

Давайте рассмотрим невидимое предложение из тестового набора: “She needs to head to the ___”. Несмотря на то, что это точное предложение не было частью обучающего набора данных, модель может использовать свое понимание похожих контекстов, с которыми она сталкивалась, чтобы сделать обоснованное предсказание. Например, в тренировочном предложении “I have to go to the store” было видно, что фраза “to go to the” или “to head to the” часто следует за местоположением или местом назначения. Исходя из этого, модель может предсказать “рынок”, “магазин”, “офис” или другие похожие слова, так как они являются обычными местами назначения в таком контексте. Таким образом, хотя модель обучалась на “I have to go to the store” и вариантах этого текста с похожим значением, она способна обобщать и понимать, что “She needs to head to the…” скорее всего будет следовать похожий тип слова, даже если это точное предложение не было частью ее обучающих данных.

Как модели “учатся”

В начале предварительного обучения модель обычно выдает бессмысленные последовательности слов при попытке сделать предсказание, так как она еще ничего не “выучила”. В нашем предыдущем примере предложения она может сгенерировать слово “яблоко” вместо ожидаемого следующего слова — “магазин”. Поскольку ЛЛМ являются вероятностными, “неправильно” в этом контексте означает, что модель присваивает более высокую вероятность (для выбора) слову “яблоко” по сравнению с ожидаемым словом — “магазин”.

Конечная цель – чтобы модель всегда выводила “магазин”, когда ее просят предсказать следующее слово после последовательности “She needs to head to the ___”.

Результат в начале (слева) и в конце (справа) обучения модели языка на уровне символов, т.е. предсказание следующей буквы или символа. Источник изображения

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

Вероятно, вы задаетесь вопросом, как можно “вычислить разницу между двумя словами”, чтобы получить значение потери. Обратите внимание, что через нейронную сеть не проходят фактические тексты (слова, предложения), а числовые представления этих текстов – их токены и эмбеддинги. Числовые представления последовательности слов обрабатываются через слои сети, где выходом является вероятностное распределение по словарю для определения следующего слова. Нетренированная модель может присвоить более высокую вероятность идентификатору токена слова “яблоко” (скажем, 0.8) по сравнению с идентификатором токена истинного следующего слова – “магазин” (0.3). Нейронная сеть не встретит ни одно слово или букву текста. Она работает исключительно с числами – в основном это калькулятор с дополнительными шагами. 😅

Image Source

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

Для тех, кто не изучал дифференциальное исчисление в школе (как и я), можно представить параметры модели (веса/смещения) как регулируемые ручки. Эти ручки произвольны – в смысле того, что нельзя сказать, каким именно образом они управляют способностью модели делать предсказания. Ручки можно поворачивать по часовой стрелке или против часовой стрелки, и это оказывает различное влияние на поведение выхода. Ручка A может увеличить потери в 3 раза при повороте по часовой стрелке, ручка B уменьшает потери в 1/8 при повороте против часовой стрелки (и так далее). Все эти ручки проверяются (все миллиарды из них), чтобы получить информацию о том, насколько чувствительны выходы к изменениям каждой ручки – это числовое значение является их производной относительно выхода. Расчет этих производных называется обратным распространением. Выход обратного распространения – это вектор (список чисел), элементы или размерности которого состоят из производных отдельных параметров. Этот вектор представляет собой градиент ошибки относительно существующих значений параметров (или текущих результатов обучения) нейронной сети.

Параметры нейронной сети как регулируемые ручки. Источник: Unsplash

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

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

Оптимизация градиентного спуска начинается с высокой ошибки или потери (красный) и достигает минимальной потери (синий) с помощью визуализации вектора градиента с 3 измерениями. Фактические векторы градиента имеют миллиарды измерений и было бы трудно их визуализировать. Однако концепция оптимизации работает одинаково для всех векторов независимо от их размера. Источник изображения.
Вот пример оптимизации градиентного спуска, реализованной на языке Python. Модель запрашивает предсказания (прямой проход), затем ошибка в предсказании обратно распространяется через сеть (обратный проход). Затем параметры модели обновляются (с использованием стохастического градиентного спуска или sgd). Это повторяется несколько раз с помощью цикла, где каждое повторение или шаг уменьшает значение потери (в желтом цвете) и улучшает точность предсказания модели. Источник изображения

После этих шагов надеются, что во время следующей итерации обучения, когда модель снова будет запрашиваться предсказать следующее слово для фразы «She needs to head to the…», она должна присвоить более высокую вероятность слову «store». Этот процесс повторяется несколько раз до тех пор, пока не произойдет существенное изменение значения потери, что означает, что обучение модели стабилизировалось или достигло сходимости.

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

Чтобы помочь понять, мы антропоморфизировали модель, используя слова “понимать”, “видеть” и “учиться”, но на самом деле она не имеет возможности делать ни одну из этих вещей. Это просто алгоритм, который выдает следующий лучший токен последовательности на основе вероятностного распределения, заданного методом выборки.

Трансформер

Трансформер – это прорыв в исследованиях обработки естественного языка (NLP), который дал нам ChatGPT. Это тип архитектуры нейронной сети, использующей уникальный механизм само-внимания. Он стал известен благодаря статье “Внимание – это все, что вам нужно”, опубликованной в 2017 году. Практически все современные LLM (например, BERT, GPT-1), появившиеся после этой статьи, были созданы на базе трансформера или используют идеи из него. Невозможно переоценить важность этой статьи из-за ее влияния на глубокое обучение. Сейчас трансформер находит свое применение в задачах компьютерного зрения, что делает его по-настоящему мультимодальным и демонстрирует его гибкость в обработке других типов данных. Он также начал модную тенденцию “все, что вам нужно”, от которой даже редакционная команда Towards AI не может устоять. 😂

Архитектура модели трансформера. Источник изображения

До трансформеров нейронные сети, используемые в NLP для создания моделей SOTA, полагались на архитектуры, которые используют последовательную обработку данных, например, рекуррентные нейронные сети или RNN. Это означает, что во время обучения каждое слово или токен обрабатывается сетью одно за другим в последовательности. Обратите внимание, что порядок слов важен для сохранения контекста/значения последовательности – “кошка съела мышь” и “мышь съела кошку” – это два предложения с двумя разными значениями, хотя они состоят из одних и тех же слов/токенов (хотя в другом порядке).

Рекуррентная нейронная сеть. Источник

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

Еще более важно, трансформер решает проблему долгосрочной зависимости, с которой борются нейронные сети, такие как RNN. При достаточно длинной последовательности слов (например, очень длинном абзаце) RNN “забывает” контекст слова, обработанного ранее в последовательности – это называется проблемой исчезающего градиента. RNN хранит информацию о значимости слов в последовательности до этого момента в скрытом состоянии на каждом последовательном или временном шаге. При обработке длинной последовательности градиенты, соответствующие более ранним временным шагам, могут становиться очень маленькими во время обратного распространения ошибки. Это затрудняет обучение RNN на основе начальных частей последовательности и может привести к “потере” информации о словах, обработанных ранее. Это проблематично для модели предсказания следующего слова, особенно если эти “забытые” слова важны для контекста генерируемой в данный момент последовательности

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

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

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

Формула самовнимания с использованием матричных умножений (слева) Источник изображения и оценки самовнимания примерной последовательности - 'ваша кошка - прекрасная кошка' (справа). Во втором ряду матрицы слово 'ваша' обращается с наивысшим вниманием (кроме самого себя) к слову 'прекрасная' (0,179). Эта матрица - это скалярное произведение матриц запроса (Q) и ключа (K), где значение для каждого ряда равно 1 (или 100%) для отражения пропорции или степени, на которую каждое слово 'обращается к' всем другим словам в последовательности. Значение 'запроса' слова представляет 'чеклист качеств', на которые оно должно обращать больше внимания или фокусироваться. Значение 'ключа' содержит 'качества' слов. Слова, соответствующие определенным в 'чеклисте' условиям, будут обращать на себя больше внимания. Нажмите, чтобы увеличить. Источник изображения

Окончательный выход слоя самовнимания (матрица Z в нашей иллюстрации выше) – это матрица векторов слов, закодированная с информацией о положении каждого слова в последовательности (из этапа кодирования положения) и насколько каждое слово должно обращать внимание на все остальные слова в последовательности.

Затем он подается на традиционную нейронную сеть, подобную той, о которой говорилось ранее в статье (называемую прямой нейронной сетью). Эти шаги (внимание + прямая передача – что составляет блок трансформатора) повторяются несколько раз для каждого скрытого слоя трансформатора – например, 96 раз для GPT3. Трансформация в каждом слое добавляет дополнительную информацию к “знаниям” модели о том, как лучше предсказать следующее слово в последовательности.

Согласно опубликованным правилам масштабирования LLM OpenAI, для обучения более хороших моделей увеличение количества параметров в 3 раза важнее, чем увеличение размера обучающих данных. (Примечание: DeepMind впоследствии опубликовала статью с отличным мнением). Это приводит к значительному увеличению вычислительных требований, так как обработка большего числа параметров требует более сложных вычислений. Параллелизация, которая является процессом разделения одной задачи на несколько подзадач, которые могут быть обработаны одновременно на нескольких вычислительных ресурсах, становится необходимой в решении этой проблемы.

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

Искусственный интеллект, становящийся “мейнстримом”, и безумная борьба за создание более крупных и лучших моделей – это выгода для производителей графических процессоров. NVIDIA – конкретно – чья цена акций выросла на 200% YTD на момент написания этого текста, сделала их наиболее производительной акцией в этом году и подняла их рыночную капитализацию до 1 трлн. долларов США. Они присоединяются к мегакапсам, таким как Apple, Google, Microsoft и Amazon, в этом эксклюзивном клубе.

Трансформатор – это безусловно сложная тема, и в вышеуказанном объяснении опущены важные концепции, чтобы быть более понятными для широкой аудитории. Если вы хотите узнать больше, я нашел эти простые, но значительно более подробные введения в эту тему: иллюстрированный трансформатор Джая Алламара, аналогия с зельем Лили Джианг или, если вам нужно что-то более продвинутое – наноГПТ Карпати, который бормочет на шекспировском языке.

Модернизация «чат»-моделей, таких как ChatGPT

Выходом предварительного обучения являются базовые модели или фундаментальные модели. Примеры недавно выпущенных фундаментальных моделей генерации текста: GPT-4, Bard, LLaMa 1 и 2, Claude 1 и 2. Поскольку базовые модели уже обладают обширными знаниями о языке из предварительного обучения (структура предложений, связи между словами и т. д.), вы можете использовать эти знания для дальнейшего обучения модели для выполнения конкретных задач – перевода, суммирования или разговорных помощников, таких как ChatGPT. Основная идея заключается в том, что общее языковое понимание модели, полученное из предварительного обучения, может быть использовано для широкого спектра последующих задач. Эта идея называется передачей обучения.

Если вы задаете или подсказываете базовой модели вопрос, она, вероятно, ответит вопросом. Помните, что она обучена завершать последовательность слов путем предсказания слова, которое должно следовать дальше, исходя из предыдущих слов в последовательности. Пример:

Вот пример завершения или вывода от 'давинчи' - базовой модели GPT 3 с использованием подсказки или ввода: 'Какая столица Франции'. Изображение автора - сгенерировано на площадке OpenAI.

Однако мы можем заставить базовую модель отвечать на вопросы, “обманув” ее так, чтобы она думала, что пытается завершить последовательность:

Вот еще одно завершение от 'давинчи' с использованием нескольких подсказок. 'Париж' - выделенное слово является завершением/выводом. Изображение автора - сгенерировано на площадке OpenAI.

Используя эту идею, модель проходит через еще один этап обучения с использованием различных наборов пар подсказка/завершение в формате вопрос-ответ. Вместо «изучения английского» из случайных текстов, найденных в Интернете, путем предсказания слов, следующих после набора слов, модель «узнает», что для завершения подсказки в форме «вопроса» завершение должно быть в форме «ответа». Это этап надзорного дообучения (SFT).

Пример набора данных для надзорного дообучения. Источник изображения

Предварительное обучение использует тип машинного обучения, называемый самообучением, при котором модель обучает сама себя, создавая «метку» или истинное слово, которое она пытается предсказать из собственных тренировочных данных. Вот наш пример из ранее:

  1. Модели дается «У меня есть» и ожидается предсказание «чтобы».
  2. Затем ей дается «У меня есть, чтобы» и ожидается предсказание «пойти».

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

По сравнению с этапом предварительного обучения, подготовка данных для обучения на этапах надзорного дообучения может быть трудоемкой. Она требует работы людей-маркировщиков и рецензентов, которые будут внимательно аннотировать «метки» или завершения. Однако, поскольку модель уже освоила общие особенности языка, она может быстро адаптироваться к языковой задаче, для которой она проводится надзорное дообучение, даже при ограниченной доступности специфических данных для обучения. Это одно из преимуществ передачи обучения и мотивация предварительного обучения. Согласно Карпати, 99 процентов вычислительной мощности и времени обучения и большая часть данных для обучения LLM используются на этапе предварительного обучения, и только небольшая доля используется на этапах надзорного дообучения.

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

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

The GPT assistant training pipeline. Источник изображения.

Выходными данными этих этапов настройки являются модели “assistant” или “chat”, такие как ChatGPT. Они представляют собой “розничные” версии этих фундаментальных моделей и представляют собой то, с чем вы взаимодействуете, когда заходите на веб-сайт ChatGPT. Базовую модель GPT-3 (dавинчи) можно получить доступ к API. Базовая модель GPT-4 на данный момент не была выпущена в виде API и, скорее всего, не будет выпущена OpenAI, учитывая их недавние заявления о конкуренции и безопасности LLM. Эти этапы настройки обычно одинаковы для всех доступных коммерческих и открытых моделей с настройкой.

Конец части 1

Примечание: Часть 2 будет рассказывать о встраиваниях, которые предшествуют взрыву LLM, но так же увлекательны – как обучаются модели встраивания и как создаются встраивания на уровне предложения или документа (используемые в системах RAG) из встраиваний слов. Мы также будем говорить о токенах и почему они нужны. В этом посте мы предполагаем, что токен = слово, чтобы упростить вещи, но в реальном мире токеном может быть отдельный символ или буква, подслово, целое слово, ряд слов или все эти типы в одной модели словаря!

Если я что-то не верно понял, буду рад исправлениям в комментариях! 🙂

Ресурсы/Ссылки:

3blue1brown. Что такое нейронная сеть?

Geeks for Geeks. Искусственные нейронные сети и их применение

Jay Alammar. Иллюстрированный трансформер

Luis Serrano. Что такое модели-трансформеры и как они работают?

Andrej Karpathy. Состояние GPT

Andrej Karpathy. Давайте создадим GPT: с нуля, в коде, разложено на составляющие.