Полное погружение: «творческий» подход к обучению нейронных сетей

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

Обучая ИНС, мы «показываем» ей миллионы обучающих примеров и постепенно перенастраиваем параметры сети до того момента, пока она не выдаст нужную классификацию. Типичная ИНС состоит из 10-30 расположенных друг над другом слоев искусственных нейронов. Каждое изображение подается на входной слой (уровень), который затем связывается со следующим слоем, и так до тех пор, пока не достигается выходной слой, из которого затем и выходит «ответ» нейронной сети.

Одна из сложнейших задач, связанных с ИНС, состоит в том, чтобы понять, что конкретно происходит на каждом из слоев. После обучения, как известно, ИНС постепенно, слой за слоем, извлекает все более высокоуровневые признаки изображения, чтобы в конце концов предоставить ответ на вопрос о том, что, собственно, изображает картинка. К примеру, первый слой ищет границы или углы, средние слои распознают основные черты, формы и компоненты – листья деревьев или двери, а последние несколько слоев объединяют всю эту информацию в полноценную интерпретацию. Таким образом, «внешние» нейроны активируются в ответ на такие сложные категории как целые здания или деревья.

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

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

Почему это важно? При обучении ИНС мы просто-напросто «показываем» ей как можно больше примеров, надеясь на то, что она сможет извлечь общие характерные черты изображений, на которые ее «натаскивают» (например, у вилки есть ручка и 2-4 зубца), и научится игнорировать ненужные детали (вилка может быть разной формы, размера, цвета, быть повернутой в разные стороны и при этом все равно останется вилкой). Но как же удостовериться, что ИНС научилась верно распознавать верные признаки? Визуальная интерпретация придет на помощь и здесь.

Действительно, в некоторых случаях выясняется, что нейронная сеть обращает внимание совсем не на то, на что должна бы (или не на то, что мы думаем). К примеру, вот как ИНС «видит себе» гантели:

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

Вместо того, чтобы четко указывать ИНС на признак, который она должна детально проработать, можно позволить сети самостоятельно принять это решение. В таком случае при обучении нужно просто «показать» ИНС произвольное изображение и дать ей проанализировать его. Затем на выбранном учителем слое сеть начинает рассматривать ту черту, которую она первой определила. Каждый слой сети работает с признаками разного уровня абстракции, таким образом, сложность генерируемых нами признаков зависит от того, на каком слое мы находимся. Для примера, нижние уровни обычно распознают линии или несложные рисунки, напоминающие орнаменты, поскольку эти слои чувствительны к границам элементов изображений и их ориентации в пространстве.

При выборе слоев более высокого уровня, которые идентифицируют более сложные признаки изображений, возникают уже комплексы черт, а то и целые объекты. И снова, мы начинаем с того, что берем существующее изображение и отдаем его на анализ нейронной сети. От ИНС мы требуем детализации, и это создает петлю обратной связи: если облако слегка похоже на птицу, сеть сделает его еще более похожим на птицу. А это, в свою очередь, позволит ИНС на следующих циклах «удостовериться» в верности решения, и в итоге мы увидим детализированное изображение птицы, появившееся словно бы из ниоткуда.

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

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

Исходное изображение влияет на то, какие объекты появятся на сгенерированном изображении

Эта технология позволяет определить, насколько «качественно» ИНС распознает изображение на данном конкретном слое. Создатели назвали эту технологию «Inceptionism», в честь использованной ими архитектуры нейронных сетей. Кстати, в галерее можно ознакомиться с другими занимательными примерами, а также с анимированными роликами, иллюстрирующими технологию.

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

Нейронные «сны» — сгенерированные исключительно из произвольного шума с использованием ИНС Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического университета

Рассмотренные нами технологии помогают понять и увидеть, как нейронные сети решают сложные задачи классификации, усовершенствовать архитектуру ИНС, а также узнать, чему конкретно научилась последняя за время обучения. Кроме того, эти эксперименты дают повод задуматься о том, что в будущем нейронные сети могут стать инструментом художников и дизайнеров – чем не новый способ создавать и «миксовать» визуальные концепции? – а возможно, поможет пролить немного света на творческий процесс в целом.

По материалам: Google Research

Добавить комментарий

Ваш адрес email не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =