До сих пор мы говорили об архитектурах MLP, CNN и RNN. Это дискриминационные модели, то есть модели, которые могут делать прогнозы. На этот раз мы поговорим о генеративных моделях, таких как автоэнкодеры и GAN, и о других интересных архитектурах нейронных сетей.

Дискриминативные модели по существу учатся оценивать условное распределение вероятностей p(⋅| x); то есть, учитывая значение, они пытаются предсказать результат на основе того, что они узнали о распределении вероятностей x. Генеративные модели — это архитектуры нейронных сетей, которые изучают распределение вероятностей данных и учатся генерировать данные, которые кажутся исходящими из этого распределения вероятностей. Одним из примеров является сеть, которая обучается на лицах многих людей и учится генерировать лица тех, кого не существует, например, лица на этом сайте https://this-person-does-not-exist. .com/ru»

Создание синтетических данных — это одно из применений генеративных моделей, но не единственное.

Автоэнкодеры (AE)

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

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

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

Если мы обозначим кодировщик как z = f(x) и декодер как x’=g(z), то автокодировщик будет x’=g(f(x)), и мы хотим, чтобы x≈ x’. Веса разные, но изучаются вместе, и, как правило, используется функция потерь MSE для измерения качества автоэнкодера. Говоря более математическим языком, кодировщик изучает векторное поле в многообразии (поверхность высокой размерности), где находятся точки (входные данные), и проецирует векторное поле в пространство низкой размерности, «сохраняя» векторное поле; в то время как декодер берет векторное поле низкой размерности и восстанавливает их в пространстве высокой размерности.

Шумоподавляющие автоэнкодеры (DAE)

Это вариант автоэнкодеров, поскольку он учится восстанавливать поврежденные или зашумленные входные данные. По сути, мы генерируем поврежденные данные из исходных данных, используя условное распределение C(x₂|x), и, используя поврежденные данные, наш автоэнкодер должен научиться восстанавливать неискаженные данные. В этом случае данные, используемые для обучения, будут иметь форму (x, x₂), где x — исходные данные, а x₂ — соответствующие поврежденные данные.

Вариационные автоэнкодеры (VAE)

Это еще один вариант автоэнкодера. В этом случае вместо функций обучения f и g VAE изучает функцию плотности вероятности входных данных. Если априорная функция плотности вероятности равна p(z) (предполагаемая плотность вероятности), вероятность p(x|z) (распределение входных данных с учетом латентного пространства), поэтому изученная функция плотности вероятности представляет собой апостериорную плотность вероятности p (z|x), заключается в том, что p(z|x) = p(z)p(x|z). Это подход байесовского вывода.

Этот подход лучше, потому что реальные данные зашумлены.

В этом случае, поскольку VAE пытается изучить распределение вероятностей, мы можем использовать дивергенцию Кульбака-Либлера в качестве функции потерь.

Генеративно-состязательные сети (GAN)

Это архитектура нейронной сети, вдохновленная теорией игр; он был создан в 2014 году Яном Гудфеллоу. Он состоит из двух сетей (сети генератора и сети критика), конкурирующих друг с другом. GAN достигли замечательных результатов, что можно увидеть здесь.

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

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

Теперь поговорим о других типах нейронных сетей.

Трансферное обучение

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

Размышляя над примером с кошкой/собакой, предположим, что у нас есть обученная CNN, так что первые уровни могут обнаруживать основные функции, а последние уровни могут обнаруживать некоторые более сложные функции, а последний уровень передается трем полностью связанным сетям. Мы можем сохранить слои, но обучить только полностью связанную часть. Конечно, для этой работы нам нужно, чтобы изображения кошек и собак имели одинаковый размер. В этом заключается идея трансферного обучения. Это экономит много ресурсов и позволяет делать очень крутые вещи, например, надеть полоски зебры на лошадь, как показано на видео ниже.

Метаобучение

Еще одна более новая (и многообещающая) методика — метаобучение. Метаобучение — это способность научиться самостоятельно решать новую задачу, что является одним из требований для достижения общего искусственного интеллекта (AGI).

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

С метаобучением связано несколько архитектур, таких как нейронная сеть с расширенной памятью (MANN), нейронная машина Тьюринга (NTM), метасети (MetaNet).

Геометрическое глубокое обучение

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

Даже если подумать о матрице смежности, если мы хотим присвоить ребрам разные веса и сохранить какую-то другую информацию, табличные данные не совсем подходят для сохранения этих отношений. В этом случае есть лучшая архитектура: Graph Neural Network.

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

Это все!

Мы подошли к концу этой серии статей о математике для глубокого обучения. Об этом еще много, это большая область исследований, но всему есть конец. Однако на этом мои посты не заканчиваются! Надеюсь скоро написать какую-нибудь интересную тему. Спасибо за компанию и до скорой встречи!