Недавно Google на своем блоге опубликовали интересный способ использования нейронных сетей, распознающих картинки. Далее свободный перевод публикации.
Каждая нейронная сеть обучается с помощью миллионов тренировочных картинок. Сеть имеет от 10 до 30 вложенных слоев с различными уровнями абстракции. Вначале картинка поступает на входной слой, который делает свою работу и передает информацию в следующий слой, пока на выходе не получится ожидаемый результат.
Важно понять, что именно происходит на каждом уровне системы. Каждый последующий слой извлекает новые черты изображения. Допустим первый уровень определяет углы и ребра на картинке, второй — формы, и именно последние несколько слоев принимают решение о том, что изображено на картинке.
Распознавание наоборот
Чтобы нейронная сеть начала рисовать картины на её вход подается изображение рандомного шума и ставится задача — найти в нем определенную форму и утрировать её. Например, нарисовать банан.
Это нужно для того, чтобы понять научилась ли нейронная сеть распознавать тот или иной образ. Например, её обучали узнавать вилку по определенным характеристикам: 2-4 зубца и ручка. При этом форма и цвет предмета не должны влиять на решение.
Хороший способ проверить, действительно ли сеть научилась распознавать образ — это попросить её нарисовать его.
В некоторых случаях можно выявить явную ошибку в обучении. Система не смогла нарисовать правильную гантель. Скорее всего, при обучении она видела гантели только в комплекте с рукой.
Нижние слои
Нейронной сети можно и не задавать конечный результат. Если на вход подать любую картинку и указать уровень, который будет с ней работать, то он улучшит все, что в его компетенции. Пример отрисовки картинки нижним слоем, отвечающим за края:
Продвинутые слои
Если для интерпретации выбрать более продвинутый слой, то сеть постарается найти в картинке те образы, на которых тренировалась.
На вход нейронной сети, которая обучалась на фотках животных подали изображение облаков.
Все, что сеть смогла распознать, она сделала утрированным. Таким образом в облаках образовались необычные животные: собака-бабочка, свинья-улитка, птица-верблюд и собака-рыба.
Эту же технику можно применить для любой другой картинки. Результаты зависят от типа изображения, т.к. установленные свойства склоняют сеть к определенным интерпретациям.
Например, линия горизонта замещается пагодами и башнями, очертания деревьев и скал — постройками, а листья превращаются в птиц и насекомых.
Техника обратного рисования дает разработчикам оценить качество распознавания того или иного слоя.
Сами разработчики называют эту технику «Inceptionism» (инцепционизм). Еще картины.
Итерации
На вход нейронной сеть можно подавать немного увеличенную картинку с выхода и получить невероятные цветовые пространства. Если начать с рандомного шума, то выходную картину можно считать исключительно творением нейронной сети.
Эта техника помогает понять и визуализировать как именно нейронная сеть выполняет задачи классификации, как улучшить архитектуру и проверить чему она научилась.
Конспект
- Нейронная сеть имеет от 10 до 30 вложенных слоев с разным уровнем абстракции.
- Чтобы нейронная сеть начала рисовать картины на её вход подается картинка и ставится задача — найти в нем определенную форму и утрировать её.
- Техника «инцепционизм» помогает понять и визуализировать как нейронная сеть выполняет задачи классификации.
Комментарии (38)
frog
10.07.2015 16:02Я правильно понимаю, что эти картинки — лишь своеобразные коллажи? Т.е. что нейронная сеть компонует результат, используя фрагменты готовых изображений из библиотеки?
Если нет, откуда возникают довольно детальные изображения животных на картинках, скажем, с облаками? То, что сеть обучали на таких картинках — этого не объясняет. В статье этот момент как-то пропущен.kenoma
10.07.2015 16:23Глубокие нейронные сети обучаются с прицелом на выделение ключевых особенностей в исходных данных. Для изображений эти особенности, если говорить грубо, могут представлять собой какие то характерные участи как то глаза, силуэт\контур, фон, в общем, все, что может помочь решить задачу. Когда нейронная сеть сталкивается с новым изображением, она пытается собрать из выделенных ранее особенностей «правильный» ответ. Отсюда мы и наблюдаем фрагменты собак на картинках, где их нет.
frog
10.07.2015 16:28> собрать из выделенных ранее особенностей «правильный» ответ.
Непонятно, где и как эти собранные ранее особенности хранятся. Т.е., допустим, сеть обучена распознавать кошачью морду и распознаёт её, ок. Но каким образом из неё можно извлечь эти черты кошачьей морды в виде конкретного изображения?LaCTuK
10.07.2015 16:39+1Особенности (фичи) хранятся в слоях нейронной сети. Чем глубже, тем более четкие особенности (на сколько я понимаю).
Вот здесь есть примеры изображений и извлеченные особенности для каждого слоя для нескольких классов.grafmishurov
10.07.2015 16:58Supervised learning. Скорее всего чем больше фич, тем точнее можно решить проблему регрессии. В слоях у них разные аспекты изображения: цвет, форма, силуэт и т.д.
MagicWolf
10.07.2015 16:58Обычно изменяют случайное или заданное изображение методом градиентного спуска так, чтобы усилить сигнал выбранных нейронов сети.
Структура современных сверточных нейронных сетей склоняет сети запоминать кусочки образа, игнорируя расстояние между ними, до тех пор пока они достаточно близко друг к другу. В итоге, упрощенно говоря, при попытках восстановить «кошачью морду», сеть рисует два глаза, нос, усы и т.п. А вот в каком порядке и на каком расстоянии друг от друга она их расположит, ее не волнует.
ascending
10.07.2015 16:59> Но каким образом из неё можно извлечь эти черты кошачьей морды в виде конкретного изображения?
Если коротко, то оптимизируем входной сигнал, максимизируя L2-норму выходов нейронов зафиксированного слоя обычным градиентным методом. На самом деле ещё с парой трюков: github.com/google/deepdream/blob/master/dream.ipynb
samodum
10.07.2015 16:17+7>Как нейронные сети рисуют картины
и тут же:
>Хороший способ проверить, действительно ли сеть научилась распознавать образ — это попросить её нарисовать его.
Так где ответ на вопрос в заголовке?
Топик в стиле «как нарисовать сову»
nickolaym
10.07.2015 17:16+4Так и осталось нераскрытым — как нейросеть рисует.
Одно дело классифицировать. «Этот пиксел — от собаки, этот пиксел — от пагоды». И другое — по классификации восстановить прообраз. Вот этот момент непонятен.
agasper
10.07.2015 19:16+12У меня вот что получилось из шумаagasper
10.07.2015 19:18+3Ну и для тех кто хочет сам поковыряться
Оригинальная статья:
http://googleresearch.blogspot.jp/2015/07/deepdream-code-example-for-visualizing.html
Докер контейнер:
https://registry.hub.docker.com/u/mjibson/deepdream/
engine9
10.07.2015 19:22+3Скажите, а есть возможность заменить психособак на свои картинки, есть одна задумка клевая.
michael_vostrikov
10.07.2015 19:23+1Насколько я понимаю, рисование основано на механизме обратного распространения. То есть, некоторое изображение на входе дает сигнал на выходе: нейрон1 = 0.8, нейрон2 = 0.3,… Задаем сигнал на выходе, по коэффициентам нейронов рассчитываем, какой должна быть входная картинка.
Только вот мне кажется, это сильно далеко от того, как распознает изображения человек, собака или даже лягушка.
indalive
10.07.2015 20:48+1
semenyakinVS
11.07.2015 02:47+4Интересно. Компьютеры научились рисовать как люди-шизофреники. Например, картины художника Уэйна Луиса Уильяма, к концу жизни сошедшего с ума:
Картины
Серия из шести работ Уэйна часто используется как пример в учебниках по психиатрии для иллюстрации изменения стиля творчества в результате развития психической болезни с течением времени.
cjfynjy
11.07.2015 06:17Все шесть картин — это рисунок одного и того же котика?
semenyakinVS
11.07.2015 11:36Скорее всего, нет. На них просто хорошо видно как человеческие картины изменяются под действием психологической болезни.
Кстати, интересны методы лечения шизофрении:
Медикаментозное лечениеВсе антипсихотики блокируют рецепторы дофамина типа D2, степень блокировки ими других значимых нейромедиаторных рецепторов варьирует. Типичные антипсихотики в основном подавляют только рецепторы D2, а атипичные воздействуют одновременно на целый ряд нейромедиаторных рецепторов: дофамина, серотонина, гистамина и других.
minoro
11.07.2015 04:25Сколько картинок видел, даже с порнухой, какая то хрень это а не рисунки. Не видно ни какой связи с творчеством а только наложение одного на другое.
semenyakinVS
11.07.2015 11:15+2Возможно, творчеством в полной мере нельзя назвать. Но это демонстрация работы одного из механизмов, который лежит в основе творчества — поиск аналогий.
Yuuri
12.07.2015 18:32+1А вы считаете, что человеческое творчество — это не наложение одного на другое?
palantiron
11.07.2015 11:51+9Хочется еще послушать музыку, написанную нейросетью
a553
11.07.2015 15:02+3Причём есть подозрение, что у нейросети получится лучше, чем у большинства современных «музыкантов».
3dtim
13.07.2015 08:44+1Когда смотришь в сумерках на человека, пытаясь разглядить закрыты у него глаза или нет, мозг так же дорисовывает то, что не может различить в темноте глаз. То глаза кажуться закрытыми, то через секунда — распахнутыми и смотрящими на тебя в упор.
Color
Где можно скачать эти картинки в хорошем качестве? Хочу распечатать и повесить теперь :)
VoidEx
По ссылке Ещё картины
Imp5
Для начала надо будет спросить разрешения у автора.
Anisotropic
Зачем спрашивать у автора, если я хочу распечатку у себя дома повесить?
KaneUA
Это была шутка о том, что придётся спросить разрешения у компьютера.
Color
Разве исходники автора не в открытом доступе?
radiolok
Вспоминая исход тяжбы про обезъянное селфи, автором этих картин вполне могут признать саму нейросеть.
Хотя в этом случае нейросеть сама себя, слава скотчу, не запускала.
Aquahawk
Ну знаете, вы тоже не сами по себе сообразились.
Mendel
Я бы начал не от «кто включил» а от дееспособности.
Автора софта могут назначить опекуном над сетью, ведь сеть недееспособна :)