Как скромный метод прогнозирования указывает нам путь к генеративному ИИ

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

Эта статья написана для определенного класса читателей. Эти читатели изучали машинное обучение, хотя и не как основной предмет. Они знают, что предсказание и классификация — два основных варианта использования ML, которые охватывают большинство его приложений. Они также изучили распространенные алгоритмы машинного обучения для прогнозирования и классификации, такие как линейная регрессия, логистическая регрессия, машины опорных векторов, деревья решений и немного нейронных сетей. Возможно, они закодировали несколько небольших проектов на Python, используя такие библиотеки, как scikit-learn, и даже использовали некоторые предварительно обученные модели TensorFlow, такие как ResNet. Я думаю, что многие студенты и профессионалы смогут относиться к этому описанию.

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

Смысл этой статьи в том, что генеративный ИИ — это всего лишь частный случай предсказания. Если вы соответствуете описанию энтузиастов машинного обучения, которое я дал ранее, то вы можете понять основы работы генеративного ИИ за семь простых шагов. Я начну с линейной регрессии (LinReg), известной всем методики машинного обучения. В этой статье я рассмотрел отдельную ветвь генеративного ИИ, называемую моделями больших языков (LLM), в основном потому, что чрезвычайно популярный ChatGPT принадлежит к этой ветви.

Шаг 1: Прогнозирование с помощью линейной регрессии

LinReg определяет наилучшую строку, которая представляет заданные точки данных. Как только эта строка найдена, она используется для прогнозирования вывода для нового ввода.

Мы можем записать модель LinReg в виде математической функции. Написано доступным языком, выглядит так:

new output = Line Function (new input)

Мы также можем нарисовать схему для него:

Это предсказание на самом базовом уровне. Модель LinReg «узнает» лучшую линию и использует ее для прогнозирования.

Шаг 2: Прогноз нейронных сетей

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

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

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

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

output vector = NN Function (input vector)

Мы нарисуем схему этого нового, более мощного предсказания:

Шаг 3: Предсказание по слову

Теперь представим, что у нас есть задача, в которой на вход НС поступает слово из какого-то языка. Нейронные сети могут принимать только числа и векторы. Для этого слова преобразуются в векторы. Вы можете представить их жителями многомерного пространства, где родственные слова находятся близко друг к другу. Например, вектор для «Java» будет близок к другим векторам для методов программирования; но это также будет близко к векторам для мест на Дальнем Востоке, таких как Суматра.

Такой набор векторов, соответствующих словам в языке, называется «вложением». Существует множество методов создания вложений; Два популярных примера — Word2Vec и GloVe. Типичные размеры таких вложений 256, 512 или 1024.

Когда у нас есть векторы для слов, мы можем использовать NN для их прогнозирования. Но чего мы можем достичь, предсказывая слова? Мы можем сделать многое. Мы можем перевести слово на другой язык, получить синоним слова или найти его прошедшее время. Уравнение и схема для этого прогноза будут очень похожи на шаг 3.

output word embedding = NN Function (input word embedding)

Шаг 4: Прогноз для наивного перевода

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

На этот раз мы сначала нарисуем схему:

Уравнение для первого слова будет таким:

NN Translation Function (Embeddings for word. no 1 in input sentence) 
= Embedding for word no.1 in output sentence

Аналогичным образом мы можем написать уравнения для других слов.

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

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

Шаг 5: Прогноз с учетом контекста

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

Ввод (английский): «Ашок отправил Сагару письмо».

Вывод (хинди): «Ашок не Сагар ко хат бхеджа».

Слово «отправлено» в выводе переводится как «бхеджа». Однако, если входное предложение:

Ввод (английский): «Ашок отправил Сагару сладости».

Тогда это же слово переводится как «бхеджи».

Результат (хинди): «Ашок не Сагар ко митхай бхеджи».

Таким образом, необходимо добавить контекст из других слов в предложение при прогнозировании вывода. Нарисуем схему только для одного слова:

Существует множество методов создания контекста. Самый мощный и современный называется «внимание». Нейронные сети, которые используют внимание для генерации контекста, называются «трансформаторами». Bert и GPT являются примерами трансформеров.

Теперь у нас есть своего рода предсказание, использующее контекст. Мы можем написать уравнение как:

NN Translation Function (Embeddings for word. no 1 in input sentence 
+ context from other words in input sentence) 
= Embedding for word no.1 in output sentence

Шаг 6: Предсказание следующего слова

Теперь мы займемся второй проблемой наивного подхода к переводу. Перевод — это не взаимно однозначное сопоставление слов. См. пример из предыдущего шага:

Ввод (английский): «Ашок отправил письмо Сагару».

Выход (хинди): «Ашок не Сагар ко кат бхеджа».

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

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

В нашем примере отправки письма мы можем написать это так:

NN Translation Function (Embeddings for 'Ashok sent a letter to Sagar' 
+ context from input sentence) 
= Embedding for 'Ashok'

Чтобы получить второе слово на выходе, мы изменим наш ввод на:

Input = Embeddings for input sentence + Embedding for first word in output

Мы также должны включить этот новый ввод в контекст:

Context = Context from input sentence + context from first word in output

Затем NN предскажет следующее (второе) слово в предложении:

Это можно записать как:

NN Translation Function 
(Embeddings for 'Ashok send a letter to Sagar + Embedding for 'Ashok', 
Context for input sentence + context for 'Ashok') 
= Embedding for 'ne'

Мы можем продолжать этот процесс до тех пор, пока NN не предскажет вложение для «.», другими словами, он не сигнализирует об окончании вывода.

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

Шаг 7: Прогноз для генеративного ИИ

Метод «предсказания следующего слова» не ограничивается переводом. NN можно научить предсказывать следующее слово таким образом, чтобы на выходе был ответ на вопрос или эссе на указанную вами тему. Представьте, что входом в такую ​​генеративную НС является предложение:

«Напишите статью о влиянии глобального потепления на гималайские ледники».

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

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

Краткое содержание

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

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

Генеративный ИИ — это предсказание последовательностей с использованием нейронных сетей.