Начнем с содержания. Если слой в сети имеет k lфильтров, он порождает k l карт признаков. Обозначим размер каждой карты как m l, высота на ширину карты признаков. Активация всех карт признаков в этом слое может быть записана в матрицу F ( l ) размера k l× m l. Также все активации фотографии можно внести в матрицу P ( l ), а активации сгенерированного изображения — в матрицу X ( l ). Воспользуемся relu4_2 исходной VGGNet:
Попробуем перейти к стилю. Создадим матрицу Грама , в которой представлена корреляция между картами признаков в соответствующем слое. Корреляция представляет текстуру и ощущения, общие для всех признаков, которые мы рассматриваем. Создание матрицы Грама размером k l × k l для заданного изображения происходит следующим образом:
Мы можем вычислить матрицы Грама как для произведения искусства в матрице A ( l ), так и для сгенерированного изображения в матрице G ( l ). Теперь представим функцию ошибок:
Здесь мы равным образом взвешиваем каждый квадрат разности (разделив его на число слоев, которые мы хотим включить в работу по воссозданию стиля).
Мы используем слои relu1_1, relu2_1, relu3_1, relu4_1 и relu5_1 исходной VGGNet. Опустим для краткости обсуждение кода TensorFlow ( http://bit.ly/2qAODnp ), но отметим, что результаты, приведенные на рис. 5.20, снова впечатляют. Мы решили совместить фотографию знаменитого купола Массачусетского технологического университета и картину Леонида Афремова «Принцесса дождя».
Рис. 5.20. Результат совмещения «Принцессы дождя» с фотографией купола Массачусетского технологического университета. © Аниш Атали
Обучаем сверточные фильтры в других областях
Хотя примеры в этой главе касались только распознавания изображений, есть и другие области, в которых полезны сверточные сети. Естественным продолжением анализа изображений становится анализ видео. Использование пятимерных тензоров (где одно из измерений — время) и применение трехмерных сверток — простой способ распространить сверточную парадигму на видео [71]. Сверточные фильтры также успешно применяются для анализа аудиограмм [72]. В этом случае сеть скользит по входящей аудиограмме и предсказывает последующие фонемы.
Менее интуитивный вариант использования сверточных сетей — обработка естественного языка. Некоторые примеры мы рассмотрим в следующих главах. Более экзотические варианты применений сверточных сетей — обучение алгоритмов игре в настольные игры и анализ биомолекул для разработки лекарств. Оба примера будут описаны в следующих главах.
В этой главе мы научились создавать нейронные сети для анализа изображений. Мы вывели понятие свертки и применили ее для создания удобных сетей, которые способны анализировать и простые, и более сложные естественные изображения. Мы построили несколько сверточных сетей в TensorFlow, применив разные варианты обработки изображений и пакетную нормализацию, что способствовало ускорению обучения наших сетей и увеличению их гибкости. Наконец, мы визуализировали процесс обучения сверточных сетей и рассмотрели другие интересные варианты применения этой технологии.
Анализировать изображения было несложно, ведь мы могли эффективно представить их в виде тензоров. В других ситуациях (например, при анализе естественного языка) не так очевидно, как представить входные данные в виде тензоров. Чтобы разобраться с этим и перейти к новым моделям глубокого обучения, рассмотрим в следующей главе несколько ключевых понятий векторного представления и изучения представлений.
Глава 6. Плотные векторные представления и обучение представлений
Обучение представлений в пространстве низкой размерности
В предыдущей главе мы простым аргументом мотивировали сверточную архитектуру. Чем больше входной вектор, тем больше наша модель. Крупные модели со множеством параметров выразительны, но требуют множества данных. Это значит, что без достаточного количества данных для обучения, скорее всего, неизбежно переобучение.
Читать дальше
Конец ознакомительного отрывка
Купить книгу