Все следующие изображения были созданы с помощью простых нейронных сетей с прямой связью.

Метод

Каждая сеть принимает местоположение пикселя на экране в качестве ввода и выводит цвет. Все входы и выходы нормализованы между 0 и 1.

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

Примеры

Чтобы понять, как создаются эти изображения, мы должны сначала изучить, как обучается каждая нейронная сеть. Давайте возьмем статическую конфигурацию сети и обучим ее выполнять операции AND, OR и XOR (Exclusive Or), а затем визуализируем результаты в виде изображения.

Каждая сеть ниже имеет следующую топологию.

; The arguments (in order) of the layer function
; # of inputs
; # of neurons
; transfer function
; include a bias?
(defn rand-net []   
   [(layer 2  10 tanh false)    
    (layer 10 10 tanh true)    
    (layer 10 10 tanh true)    
    (layer 10 3  sig  true)])

Передаточные функции определены следующим образом.

(defn sig [x]   
   (/ 1 (+ 1 (Math/exp (- (* x 5))))))  
(defn tanh [x]   
   (- (* 2 (sig (* 2 x))) 1))

И

INPUTS    OUTPUT
(1,1)     (1, 1, 1)
(0,1)     (0, 0, 0)
(1,0)     (0, 0, 0)
(0,0)     (0, 0, 0)

OR

INPUTS    OUTPUT
(1,1)     (1, 1, 1)
(0,1)     (1, 1, 1)
(1,0)     (1, 1, 1)
(0,0)     (0, 0, 0)

XOR (Исключающее ИЛИ)

INPUTS    OUTPUT
(1,1)     (0, 0, 0)
(0,1)     (1, 1, 1)
(1,0)     (1, 1, 1)
(0,0)     (0, 0, 0)

Давай сделаем искусство

Довольно аккуратно, а? XOR начинает выглядеть довольно элегантно.

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

Ассортимент продукции

Вот ассортимент случайных сетевых конфигураций.

Больше нейронов

С помощью еще нескольких нейронов мы можем получить более четкие грани.

Еще больше нейронов

С помощью нескольких дополнительных нейронов мы можем добиться еще более сложных форм и градиентов.

Намного больше нейронов

На рендеринг ушло так много времени, что у вас есть только один, извините.

Смотрите код на GitHub! Спасибо за чтение!