Наиболее мощные модели машинного обучения объяснены (трансформеры, сверточные нейронные сети, рекуррентные нейронные сети, генеративно-состязательные сети …)

Most powerful machine learning models explained (transformers, convolutional neural networks, recurrent neural networks, generative adversarial networks ...)

Сгенерированное изображение Midjourney

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

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

  1. CNNs (Сверточные нейронные сети)
  2. RNNs (Рекуррентные нейронные сети)
  3. Трансформеры
  4. GANs (Генеративно-состязательные сети)

CNNs

Сверточная нейронная сеть (Convolutional Neural Network, CNN) – это тип нейронной сети (Артур Арнкс), который отлично работает с топологическими данными и модифицируется, чтобы лучше обнаруживать образцы. Так в чем же разница? Чтобы начать, дайте мне краткий обзор того, что такое нейронная сеть в общем.

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

Рисунок 1 (источник)

В чем особенность CNN? Отличие CNN заключается в том, что она использует сверточные слои в своей структуре слоев. Это не значит, что в CNN не может быть других типов слоев (обычно они присутствуют), но свертка делает ее особенной. Вот как работает этот слой.

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

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

Рисунок 2 (источник)

Здесь есть несколько ключевых идей.

  1. Ядро применяется к каждому пикселю изображения и его окружающей области, но остается неизменным. Это происходит потому, что ядро предназначено для обнаружения образца или особенности в области этого пикселя.
  2. Ядра обычно значительно меньше самого изображения, что существенно облегчает обучение.
  3. Идея сверточных сетей заключается в том, что любое изображение можно разложить на набор образцов. Например, предположим, у нас есть лицо. Представьте, что есть ядро, которое может обнаружить круги. Его результат будет содержать 2 яркие точки около верхней части изображения (глаза, которые оно обнаружило). Теперь представьте, что есть другое ядро, которое может обнаружить две близкие линии. Выход будет содержать яркую точку около нижней части (рот, который оно обнаружило). Наконец, представьте, что последнее примененное ядро может обнаружить эту формацию из 2 кругов и 2 линий. Тогда оно распознает лицо.
  4. Сверточный слой может иметь несколько таких ядер, применяемых для создания нескольких новых изображений. Затем они объединяются и передаются дальше по сети. Затем в другом сверточном слое применяется другой набор ядер.
  5. Сверточные нейронные сети обычно также содержат слои пулинга, которые используются для уменьшения размера и сложности изображения.

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

Некоторые популярные инструменты и продукты, использующие сверточные нейронные сети, включают Google Photos, AlphaGo от DeepMind и системы автопилота Tesla.

Рекуррентные нейронные сети (RNN)

Как вы видели, сверточные нейронные сети в основном используются для обработки изображений. В свою очередь, рекуррентные нейронные сети используются в основном для обработки естественного языка (NLP) и некоторых других областей, таких как анализ временных рядов. Чтобы понять архитектуру RNN, давайте сначала рассмотрим некоторые проблемы использования простой нейронной сети для NLP. Рассмотрим стандартную задачу NLP — автозаполнение текста. Входом в нашу модель является фрагмент текста, а выходом — другой фрагмент текста. Проблема заключается в том, что вход может иметь переменный размер (может состоять из нескольких слов или множества слов), а простые нейронные сети обычно имеют фиксированный размер входа. Другая проблема заключается в том, чтобы учесть сложные связи между словами входа для получения правильного результата. Помните, что в английском языке существует тысячи слов, и порядок этих слов в предложении не всегда меняет его значение. Как же вы обеспечите сходство между предложениями “Пушистый кот пришел сюда в воскресенье” и “В воскресенье пришел кот, который был пушистым”, но отличие от “В воскресенье пришло сюда на пушистом коте”?

Интуиция, лежащая в основе RNN, связана с тем, как через них проходит информация. Давайте возьмем предложение и посмотрим, как бы RNN обработала его — “Кот ест”.

Давайте рассмотрим предложение как последовательность слов — “Кот”, “ест” (на самом деле, вероятно, оно будет представлено как последовательность чисел или векторов). Теперь RNN будет обрабатывать эту последовательность… последовательно (вот отсюда и название “Рекуррентная” часть). Сначала она примет слово “Кот” и получит некоторый выход x1, пропустив “Кот” через свой набор весов и смещений. Затем она примет x1 и следующее слово в последовательности — “ест”, чтобы пропустить его через тот же набор весов и смещений и получить следующий выход x2. Затем она примет x2 и следующее слово в последовательности — “ест”, чтобы получить следующий выход x3. Таким образом, вы видите, как RNN берет свой предыдущий выход и следующий вход для получения нового выхода. Текущее “состояние” RNN называется скрытым состоянием. Вот анимация, которая может помочь вам построить эту интуицию, взятая из отличной статьи Майкла Фи.

Рисунок 3 (источник)

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

“Кот” -> Пропущено через нашу модель -> получается x0, мы обучаем нашу модель так, чтобы x0 мог быть правильно экстраполирован в “Кот”

“Кот” и предыдущий выход x0 -> Пропущено через нашу модель -> получается x1, после обучения x1 может быть правильно экстраполирован в “ест”

“ест” и предыдущий выход x1 -> Пропущено через нашу модель -> получается x2. Мы узнаем, что x2 теперь представляет слово “тунец”! Мы можем использовать это для нашего следующего “входа”

“тунец” и предыдущий выход x2 -> Пропущено через нашу модель -> получается x3… И так далее

Основная интуиция, лежащая в основе RNN, заключается в том, что

  1. RNN всегда отслеживает, что было увидено ранее, через это скрытое состояние и это захватывает связи между словами или любыми последовательными данными.
  2. Та же модель применяется к каждой части последовательности последовательно, что делает RNN пригодными для обучения (в отличие от того, чтобы иметь огромную модель, которая обрабатывает весь вход сразу)

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

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

Некоторые популярные инструменты и продукты, использующие RNN, включают Google Translate, GPT2 от OpenAI и рекомендательную систему Spotify.

Трансформеры

Трансформеры! Нынешнее величие мира машинного обучения. Оба GPT4 и BERT (собственная продвинутая языковая модель Google) основаны на архитектуре трансформера. Итак, о чем они?

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

  1. Позиционное кодирование – В то время как в RNN порядок последовательности в языке естественным образом сохраняется через их скрытые состояния, трансформеры встраивают эту информацию непосредственно во входные данные. Позиционные кодирования добавляются к векторным представлениям слов (векторы, представляющие слова), обеспечивая фиксацию позиции каждого слова в предложении. Таким образом, представление слова “собака” изменяется в зависимости от его положения в тексте.
  2. Большой объем обучающих данных – Чтобы воспользоваться преимуществом позиционного кодирования, трансформеры должны быть обучены на огромных наборах данных. Эти различия в порядке слов фиксируются в данных, и поэтому, если не видеть все возможные варианты порядка и типа слов, модель будет функционировать неоптимально.
  3. Самовнимание – Модель учится “больше обращать внимание” на определенные слова и их связь с каждым другим словом во входных данных. В конце концов, некоторые слова будут нести намного больше значения и силы для предсказания или перевода, особенно если они объединены с другими. Как она учится делать это? Опять же, с помощью огромного объема обучающих данных и своей архитектуры.

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

Рисунок 4 (источник)

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

GAN

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

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

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

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

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

Рисунок 5 (источник)

Некоторые примеры использования GAN в реальном мире включают Runway ML, генерацию искусства Midjourney (ознакомьтесь с моей предыдущей статьей об искусстве!) и DALL * E от OpenAI.