Программист Райан Дал (один из активистов платформы Node.js) создал систему для автоматической раскраски снимков на основе сверточных нейронных сетей. Описание сети вместе с примерами работ доступны на сайте программиста.
Нейронные сети представляют собой особым образом организованную систему элементов, называемых нейронами. Каждый такой нейрон имеет один или несколько входов, на который подается сигнал. Нейрон обрабатывает сигнал с помощью встроенной функции, передавая дальше уже обработанный сигнал. Нейроны в сетях обычно организованы в слои, причем нейроны каждого слоя связаны только с предыдущим и последующим слоями.
Результат использования нейросети Дала. Ryan Dahl/tinyclouds
Процесс обучения нейронной сети выглядит так: на вход подается сигнал. Берется сигнал на выходе и сравнивается с тем, который должен был получиться. Например, если мы обучаем нейронную сеть распознавать котов, то мы подаем на вход изображения кота и смотрим на выходной сигнал. Если на выходе получился «кот», то переходим к следующему изображению. Если получился не кот, то поправляем параметры функций каждого нейрона. Обычно это делается от выхода к входу (так называемый обратный метод распространения ошибки).
Сверточные нейронные сети представляют собой особый класс многослойных нейронных сетей. В них слои нейронов делятся на субдискретизирующие и свертывающие и обычно чередующие. Грубо говоря, первый тип слоев предназначен для разбиения задачи на примитивные составляющие и отдельного их анализа, в то время как свертывающие слои служат для «суммирования» полученных наблюдений.
Технически свертывание осуществляется с помощью специальной матрицы весов, которая, двигаясь по слою, суммирует с весами результаты работы нейронов. Именно веса этой матрицы подправляются во время процесса обучения сети. При этом, как показывает опыт последних нескольких лет разработок, сверточные нейронные сети очень хорошо подходят для распознавания именно изображений — в некоторых задачах системы на основе таких сетей уже превосходят людей.
В своей работе Дал использовал такую сверточную сеть с четырьмя слоями (на большее у него не хватило вычислительных мощностей). Работает система с изображениями 224 на 224 пикселя. Для обучения Дал использовал обычные обесцвеченные цветные фотографии.
По словам самого разработчика, система еще далека от идеала: например, при раскраске предметов, которые могут быть разных цветов (скажем, автомобиля) система усредняет цвета. В результате машины на раскрашенных фотографиях оказываются «невероятных ярких» цветов.