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

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

  1. CNN (сверточные нейронные сети)
  2. RNN (рекуррентные нейронные сети)
  3. Трансформеры
  4. GAN (генеративно-состязательные сети)

CNN

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

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

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

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

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

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

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

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

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

RNN

Как вы видели, CNN в основном используются для обработки изображений. С другой стороны, RNN используются в основном для НЛП (обработка естественного языка) и некоторых других областей, таких как анализ временных рядов. Чтобы понять архитектуру RNN, давайте сначала выделим некоторые проблемы, связанные с использованием простой нейронной сети для НЛП.
Давайте рассмотрим стандартную задачу НЛП — автозаполнение текста. Входные данные для нашей модели — это фрагмент текста, а выходные данные — еще один фрагмент текста. Проблема в том, что наши входные данные имеют переменный размер (может состоять из нескольких слов или большого количества слов), а простые нейронные сети обычно имеют фиксированный размер входных данных. Другая проблема — уловить сложные отношения между словами во входных данных для получения правильного результата. Помните, что в английском языке тысячи слов, и порядок этих слов в предложении не обязательно меняет смысл. Итак, как обеспечить, чтобы предложение «Пушистый кот приходил сюда в воскресенье» было похоже на «В воскресенье сюда приходил пушистый кот», но отличалось от предложения «В воскресенье сюда приходил пушистый кот»?

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

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

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

«The» -> Проходит через нашу модель -> производит 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. Внимание к себе. Модель учится больше «заботиться» об определенных словах и о том, как они связаны с каждым другим словом во входных данных. В конце концов, некоторые слова будут иметь гораздо больше значения и силы при предсказании или переводе, особенно если они сгруппированы вместе с другими. Как он учится это делать? Опять же, это связано с огромным размером набора обучающих данных и его архитектурой.

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

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

GAN

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

Начнем с описания стандартной методики обучения с учителем для обучения моделей.

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

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

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

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