Содержание:

  • Почему именно вариационные автоэнкодеры
  • Что такое вариационные автоэнкодеры
  • Подробнее о VAE
  • Автоэнкодеры и вариационные автоэнкодеры
  • Более подробный подход к пониманию автоэнкодеров

Почему вариационные автоэнкодеры

Вариационные автоэнкодеры используются для определения базовой структуры набора данных.

Что такое вариационные автоэнкодеры

Вариационные автоэнкодеры - важное семейство нейронных сетей.

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

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

Подробнее о VAE

Во многих реальных проблемах у вас может быть целый набор данных, которые мы ищем.

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

Но основной процесс обработки данных мог бы быть намного проще в пространстве с гораздо меньшей размерностью, чем фактические данные, на которые мы смотрим.



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

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

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

Но в этом и следующем сообщении в блоге я объясню вам очень понятно, что очень полезно для вас с точки зрения практической реализации.

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

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

Автоэнкодеры и вариационные автоэнкодеры

Автоэнкодер выполняет следующую задачу:

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

Более подробный подход к пониманию автоэнкодеров

Он выполняет вышеуказанные задачи с двумя основными компонентами.

  1. Кодировщик
  2. Декодер

Кодировщик - это просто набор слоев. Они могут быть полносвязными слоями или сверточными.

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

Вышеупомянутая ситуация называется «узким местом».

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

Последняя функция обучения автоэнкодера - это просмотр реконструированной версии в конце вашей сети декодера.

Затем вы собираетесь просто вычислить потери при реконструкции относительно входных данных.

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

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

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

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

Итак, если вы загружаете изображение, оно сначала уменьшается в масштабе.

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

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

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

А справа все восстановленные изображения.

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

Итак, если мы используем только скрытое 2D-представление, это означает, что наше узкое место, которое, как вы знаете, в середине сети, - это только две переменные.

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

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

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

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

Но вам нужно больше информации об этом узком месте.

Интересно отметить, что тот же метод применяется и к сегментации изображений.

Итак, вы берете входное изображение и пропускаете его через сверточный кодировщик.

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

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

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

В следующей статье я подробнее расскажу об автоэнкодерах.

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

Что дальше?

Если вам понравилась эта статья, будет действительно полезно, если вы нажмете "Рекомендовать" ниже :)
Следите за мной в Twitter, LinkedIn и Medium

Прочтите мой предыдущий пост: Цикл ажиотажа Gartner в области искусственного интеллекта!



Получите доступ к экспертному обзору - Подпишитесь на DDI Intel