Что такое генеративный ИИ и как он работает?

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

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

Что такое генеративный ИИ?

Генераторный ИИ, или genAI, относится к системам, которые могут генерировать новый контент, будь то текст, изображения, музыку или даже видео. Традиционно AI/ML подразумевал три вещи: контролируемое, неконтролируемое и обучение с подкреплением. Каждый из них дает ценную информацию на основе результатов кластеризации.

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

Последствия генеративного ИИ

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

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

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

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

Как работает генеративный ИИ?

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

Статистические модели

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

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

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

Базовая демонстрация выбора текста из LLM

Сбор данных

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

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

Для модели изображения это может означать анализ миллионов изображений. Чем разнообразнее и полнее обучающие данные, тем лучше модель будет генерировать разнообразные результаты.

Как работают преобразователи и внимание

Трансформеры – это тип архитектуры нейронных сетей, представленный в статье Васвани и др. 2017 года под названием «Внимание — это все, что вам нужно». С тех пор они стали основой для большинства современных языковых моделей. ChatGPT не будет работать без преобразователей.

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

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

Приведенный ниже код представляет собой фундаментальное описание механизмов преобразователя, каждый фрагмент которого объясняется простым языком.

класс Трансформер:
# Преобразование слов в векторы
# Что это: превращает слова в «векторные представления» – в основном числа, которые представляют слова и их отношения друг к другу.
# Демо: "ананас классный и вкусный" -> [0.2, 0.5, 0.3, 0.8, 0.1, 0.9]
self.embedding = Встраивание(vocab_size, d_model)

# Добавить информацию о положении к векторам
# Что это: поскольку слова в предложении имеют определенный порядок, мы добавляем информацию о положении каждого слова в предложении.
# Демо: "ананас классный и вкусный" с позицией -> [0.2+0.01, 0.5+0.02, 0.3+0.03, 0.8+0.04, 0.1+0.05, 0.9+0.06]
self.positional_encoding = PositionalEncoding(d_model)

# Стек слоев-трансформеров
# Что это: несколько слоев модели Transformer, наложенных друг на друга для более глубокой обработки данных.
# Почему это происходит: каждый уровень фиксирует различные закономерности и взаимосвязи в данных.
# Объяснил, как будто мне пять: Представьте себе многоэтажное здание. На каждом этаже (или слое) есть люди (или механизмы), выполняющие определенную работу. Чем больше этажей, тем больше работы будет выполнено!
self.transformer_layers = [TransformerLayer(d_model, nhead) для _ в диапазоне(num_layers)]

# Преобразуем выходные векторы в вероятности слов
# Что это: способ предсказать следующее слово в последовательности.
# Почему это происходит: после обработки ввода мы хотим угадать, какое слово будет следующим.
# Объяснил, как будто мне пять: после прослушивания истории он пытается угадать, что будет дальше.
self.output_layer = Linear(d_model, vocab_size)

защита вперед (я, х):
# Преобразуем слова в векторы, как указано выше
x = self.embedding(x)

# Добавьте информацию о позиции, как указано выше
x = self.positional_encoding(x)

# Проходим через каждый слой преобразователя
# Что это: отправка наших данных через каждый этаж нашего многоэтажного здания.
# Зачем это нужно: Чтобы глубоко обработать и понять данные.
# Объяснил, как будто мне пять лет: это как передать записку в классе. Каждый человек (или слой) добавляет что-то к заметке перед тем, как передать ее дальше, что может привести к связной истории или к путанице.

для слоя в self.transformer_layers:
х = слой (х)

# Получить вероятности выходного слова
# Что это: наше лучшее предположение о следующем слове в последовательности.
вернуть self.output_layer(x)

В коде у вас может быть класс Transformer и один класс TransformerLayer. Это похоже на проект этажа, а не всего здания.

Этот фрагмент кода TransformerLayer показывает, как работают определенные компоненты, такие как внимание нескольких голов и особые механизмы.

Демонстрация того, как работает внимание с использованием разных цветов

класс TransformerLayer:
# Многоголовочный механизм внимания
# Что это: механизм, который позволяет модели одновременно концентрироваться на разных частях входных данных. # Демо: фраза «ананас крутой и вкусный» может превратиться в «этот АНАНАС КРУТОЙ и ВКУСНЫЙ», поскольку модель уделяет больше внимания определенным словам.
self.attention = MultiHeadAttention(d_model, nhead)

# Простая нейронная сеть прямого распространения
# Что это: базовая нейронная сеть, которая обрабатывает данные после механизма внимания.
# Демо: «этот АНАНАС КРУТЫЙ и ВКУСНЫЙ» -> [0.25, 0.55, 0.35, 0.85, 0.15, 0.95] (небольшие изменения в числах после обработки)
self.feed_forward = FeedForward(d_model)

защита вперед (я, х):
# Применить механизм внимания
# Что это: этап, на котором мы фокусируемся на разных частях предложения.
# Объясняю, как будто мне пять: это все равно что выделять важные части книги.
внимание_выход = self.attention(x, x, x)

# Передать выходные данные через сеть прямой связи
# Что это: этап, на котором мы обрабатываем выделенную информацию.
вернуть self.feed_forward(attention_output)

Нейронная сеть прямого распространения — один из простейших типов искусственных нейронных сетей. Он состоит из входного слоя, одного или нескольких скрытых слоев и выходного слоя.

Данные передаются в одном направлении — от входного слоя через скрытые слои к выходному слою. В сети нет петель и циклов.

В контексте архитектуры преобразователя нейронная сеть прямого распространения используется после механизма внимания на каждом уровне. Это простое двухуровневое линейное преобразование с промежуточной активацией ReLU.

# Механизм масштабируемого скалярного произведения
класс ScaledDotProductAttention:
защита __init__(self, d_model):

# Коэффициент масштабирования помогает стабилизировать градиенты
# это уменьшает дисперсию скалярного произведения.

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

self.scaling_factor = d_model ** 0,5

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

# Рассчитать оценку внимания, взяв скалярное произведение запроса и ключа.
оценки = dot_product(запрос, ключ) / self.scaling_factor
# Преобразуйте необработанные оценки в вероятности с помощью функции softmax.
внимание_весы = softmax(баллы)
# Взвешиваем значения, используя вероятности внимания.
вернуть dot_product(attention_weights, значение)

# нейронная сеть прямого распространения
# Это чрезвычайно простой пример нейронной сети.
класс Фидфорвард:
защита __init__(self, d_model):
# Первый линейный слой увеличивает размерность данных.
self.layer1 = Линейный (d_model, d_model * 4)
# Второй линейный слой возвращает размерность d_model.
self.layer2 = Линейный (d_модель * 4, d_модель)

защита вперед (я, х):
# Пропустить ввод через первый слой,
#Передача входных данных через первый слой:
# Ввод: относится к данным, которые вы передаете в нейронную сеть. я
#Первый слой. Нейронные сети состоят из слоев, и в каждом слое есть нейроны. Когда мы говорим «пропустить входные данные через первый слой», мы имеем в виду, что входные данные обрабатываются нейронами этого слоя. Каждый нейрон принимает входные данные, умножает их на свои веса (которые изучаются во время обучения) и выдает выходные данные.
# применить активацию ReLU, чтобы ввести нелинейность,
# и затем пройти через второй слой.
Активация #ReLU: ReLU означает выпрямленную линейную единицу.

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

вернуть self.layer2(relu(self.layer1(x)))

# Позиционное кодирование добавляет информацию о положении каждого слова в последовательности.
класс PositionalEncoding:
защита __init__(self, d_model):
# Что это: установка для добавления информации о том, где каждое слово находится в предложении.
# Что он делает: Готовится добавить уникальное значение «позиции» к каждому слову.
# Почему это происходит: слова в предложении имеют порядок, и это помогает модели запомнить этот порядок.
# Как это делается: путем создания специального шаблона чисел для каждой позиции в предложении.
# Как это вписывается в остальной код: перед обработкой слов мы добавляем информацию об их положении.
# Объяснил, как будто мне пять лет: Представьте, что вы стоите в очереди со своими друзьями. Это дает каждому номер, чтобы запомнить свое место в очереди.
проходить

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

# вспомогательных функций
защита dot_product(a, b):
# Вычисляем скалярное произведение двух матриц.
# Что это: математическая операция, позволяющая увидеть, насколько похожи два списка чисел.
# Что он делает: умножает совпадающие элементы в списках, а затем складывает их.
# Зачем: для измерения сходства или релевантности между двумя наборами данных.
# Как это делается: путем умножения и суммирования.
# Как это вписывается в остальной код: используется для привлечения внимания, чтобы увидеть, насколько слова релевантны друг другу.
# Объяснил, как будто мне пять лет: Представьте, что у вас с другом есть пакеты конфет. Вы оба разливаете их и подбираете конфеты каждого типа. Затем вы подсчитываете, сколько у вас совпадающих пар.
вернуть @ b.transpose(-2, -1)

защита softmax(x):
# Преобразуйте необработанные оценки в вероятности, гарантируя, что их сумма равна 1.
# Что это: способ превратить любой список чисел в вероятности.
# Что он делает: преобразует числа от 0 до 1 и гарантирует, что их сумма составит 1.
# Почему это происходит: чтобы мы могли понимать числа как шансы или вероятности.
# Как это делается: с помощью возведения в степень и деления.
# Как это вписывается в остальной код: используется для преобразования оценок внимания в вероятности.
# Объяснил, как будто мне пять лет: Вернемся к нашим игрушкам. Это гарантирует, что когда вы поделитесь ими, каждый получит справедливую долю, и ни одна игрушка не останется позади.
вернуть exp(x)/sum(exp(x), axis=-1)

защита relu(x):
# Функция активации, вносящая нелинейность. Он устанавливает отрицательные значения равными 0.
# Что это: простое правило для чисел.
# Что он делает: если число отрицательное, оно меняет его на ноль. В противном случае оставляет все как есть.
# Почему это так: чтобы внести некоторую простоту и нелинейность в расчеты нашей модели.
# Как это делается: проверяя каждое число и устанавливая его равным нулю, если оно отрицательное.
# Как это вписывается в остальной код: используется в нейронных сетях, чтобы сделать их более мощными и гибкими.
# Объяснил, как будто мне пять: представьте, что у вас есть несколько наклеек: некоторые блестящие (положительные числа), а некоторые тусклые (отрицательные числа). Это правило гласит: заменять все скучные наклейки пустыми.

вернуть максимум (0, х)

Как работает генеративный ИИ – простыми словами

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

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

Итак, как же LLM могут создавать контент, который «кажется» оригинальным?

Давайте возьмем поддельный список — «лучшие подарки Ид аль-Фитр для контент-маркетологов» — и рассмотрим, как LLM может создать этот список, комбинируя текстовые подсказки из документов о подарках, Ид, и контент-маркетологи.

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

Пример: «Ид аль-Фитр — это праздник» становится [«Ид», «аль-Фитр», «есть», «а», «праздник»].

Это позволяет модели работать с управляемыми фрагментами текста и понимать структуру предложений.

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

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

Затем мы используем механизм внимания: это позволяет модели фокусироваться на различных частях входного текста при генерации выходных данных. Если вы помните BERT, то именно это так заинтересовало сотрудников Google в BERT.

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

Аналогично, если он увидел тексты о том, что «маркетологам контента» нужны определенные инструменты или ресурсы, он может связать идею «подарки» «контентным маркетологам».

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

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

Это потому, что он изучил более широкий контекст каждого из этих терминов.

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

Можно подумать, что после таких слов, как «лучший» и «Ид аль-Фитр», с большой вероятностью последует слово «подарки». Точно так же он может ассоциировать «подарки» с потенциальными получателями, например с «контент-маркетологами».

Анонсы наших новых статей в Телеграме

Read More

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Капча загружается...