с искусственным интеллектом / машинным обучением
доктора Эрнесто Диас-Авилеса

«Пожалуйста, нарисуйте мне барашка!»
- Из «Маленького принца» Антуана де Сент-Экзюпери.

Вы помните, как Маленький принц просил пилота нарисовать ему овцу? После многих попыток; Однако рисунки ребенка не удовлетворили. Находясь над ним, летчик нарисовал ящик и велел князю представить в нем овцу. Благодаря своему творчеству Маленький принц может увидеть, как он спит лежа. Кажется, нарисовать овцу не так просто, как можно было подумать :)

Что, если мы хотим научить машину рисовать электрического барана?

Предполагаемая овца содержала овсяно-тропический контур; при виде такой крупы он убедительно вскарабкался и побежал дальше.
- Из фильма «Мечтают ли андроиды об электрических овцах?» Филипа К. Дика.

Как научить машинку рисовать (электрических) овец?

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

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

Но самое главное, мы, люди, несовершенно изобретательно рисуем овец, помните проект Овечий рынок? или взгляните на несколько десятков тысяч каракулей овец, сделанных реальными людьми в игре The Quick, Draw! эксперимент (см. рисунок 1).

Все такие варианты и разнообразие, которые люди выражают при рисовании овцы, было бы чрезвычайно сложно уловить в программе, написанной на Python, Java или C ++. Наверное, лучше было бы написать программу, которая рисует коробку и утверждает, что в ней овца :)

AI / ML спешат на помощь

Искусственный интеллект на основе машинного обучения (AI / ML) предлагает интересную альтернативу: вместо кодирования машины инструкциями давайте обучим ее.

Если вы хотите научить машину рисовать овцу с помощью AI / ML, вы не говорите ей рисовать голову, а затем тело с шерстью, лицом и глазами. Вы просто покажете ему тысячи и тысячи рисунков овец, и в конце концов машина научится и все уладит. Если он продолжает терпеть неудачу, вы не переписываете код. Просто продолжайте тренировать это.

В этом упражнении мы сосредоточимся на алгоритме AI / ML под названием Generative Adversarial Networks (GAN). Сети GAN реализуются системой двух глубоких нейронных сетей, соревнующихся друг с другом в рамках игры с нулевой суммой. Два игрока в игре называются Генератором и Дискриминатором.

Генератор, как следует из его названия, генерирует кандидатов, а Дискриминатор оценивает их. Целью обучения генеративной сети является создание новых синтезированных экземпляров, которые кажутся происходящими из набора реальных экземпляров, тогда как для дискриминатора его цель - различать истинные и сгенерированные экземпляры.

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

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

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

Рисование электрической овцы с помощью GAN

«Это не имеет значения. Нарисуй мне овцу… »
- Из« Маленького принца »Антуана де Сент-Экзюпери.

Что ж, возвращаясь к нашей задаче, наша цель - обучить GAN создавать рисунки овец на уровне человека. Следующий рисунок иллюстрирует наш подход:

В двух словах:

  • Набор данных. В качестве обучающего набора мы используем набор данных овец из The Quick, Draw! эксперимент.
  • Архитектура. Мы используем Deep Convolutional Generative Adversarial Networks или DCGAN для реализации нашего подхода.
  • Инструменты глубокого обучения. Мы используем Keras с бэкэндом TensorFlow для реализации модели и JupyterLab для прототипирования.
  • Модели. После обучения моделей Генератора и Дискриминатора мы сохраняем их независимо.
  • От случайного шума до овец. Затем мы используем Генератор для создания рисунков овец из случайного шума. Результаты такие же хорошие (или такие же плохие и отрывочные), как и у людей;)

«Мечтают ли андроиды?»
- Филип К. Дик, Андроиды мечтают об электрических овцах?

На рисунке 4 показан образец овцы, которую генерирует наша модель AI / ML - мечта андроида?

Они не похожи на знаменитостей на Рисунке 2, но разве они не милые ❤?
Один из моих любимых находится в строке 0, столбце 2 (индексирование с нуля), да, тот, который смотрит вправо черным лицо :)… А что у тебя?

~ Фин ~

Об авторе
Dr. Эрнесто Диас-Авилес является соучредителем и генеральным директором Libre AI . Эрнесто использовал некоторые идеи из этого поста, чтобы научить свою дочь искусственному интеллекту / машинному обучению и нарисовать ей столько электрических овец, сколько она потребовала, без использования трюка с овцами в коробке. Некоторые из них ей нравятся.

Примечания

  • В статье Дэвида Ха и Дугласа Экка Нейронное представление эскизов (2017). Https://arxiv.org/abs/1704.03477, рекуррентная нейронная сеть (RNN) используется для построения рисунков на основе контуров, а не пикселей. Вместо этого мы использовали GAN, так как мы думаем, что это помогает объяснению, основанному на аналогии ученика-мастера.
  • Наша модель использует информацию на уровне пикселей для изображений для обучения и для создания новых экземпляров. Чтобы улучшить качество изображения, мы конвертируем выходные растровые изображения в векторную графику (SVG) с помощью Potrace.