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

В этой статье мы раскрываем "черный ящик" NN, делая ее правила прозрачными. Для этого мы исследуем NN для булевой функции XOR. Во-первых, мы строим НС снизу вверх, используя известные свойства XOR, т.е. мы включаем явно известные алгебраические соотношения. На втором этапе мы обучаем NN с нуля XOR с помощью TensorFlow Keras.

Наконец, мы сравниваем оба подхода. Мы разбиваем Keras NN на логические компоненты и обнаруживаем, что логическая установка отличается от созданной NN на первом шаге. Обученная NN нашла альтернативное представление XOR с использованием различных логических функций.

Мы не считаем, что эта альтернативная формула XOR неизвестна математическому сообществу, но, по крайней мере, она была новой для нас. Это может продемонстрировать, что сетевые сети могут создавать новые знания. Но для его извлечения мы должны иметь возможность преобразовать настройку и параметры сети в явные правила.

Построение снизу вверх XOR NN

XOR - это логическая функция, определяемая отображением

ИСКЛЮЧАЮЩЕЕ ИЛИ (0,0) = ИСКЛЮЧАЮЩЕЕ ИЛИ (1,1) = 0

ИСКЛЮЧАЮЩЕЕ ИЛИ (1,0) = ИСКЛЮЧАЮЩЕЕ ИЛИ (0,1) = 1

Чтобы построить нейронную сеть для XOR, мы запоминаем или гуглим идентичность

ИСКЛЮЧАЮЩЕЕ ИЛИ (x, y) = И (НЕ-И (x, y), ИЛИ (x, y))

Это помогает, потому что операторы AND, NAND (который не является AND) и OR хорошо известны, и все они могут быть представлены простыми NN с 2 входными и 1 выходными узлами, смещением и функцией активации сигмовидной формы.

Таким образом, мы можем составить XOR NN, соединив NN для NAND, AND и OR. Таким образом, XOR становится трехуровневым NN.

Давайте просто введем возможные конфигурации ввода и проверим выходы (для этого я использовал лист Excel). Мы получаем 0,0072 для (0,0) и (1,1) соответственно 0,9924 для (0,1) и (1,0). Оно работает.

Мы могли бы построить другие сети, используя следующие представления XOR:

ИСКЛЮЧАЮЩЕЕ ИЛИ (x, y) = OR (И (НЕ (x), y), AND (x, NOT (y)))

ИСКЛЮЧАЮЩЕЕ ИЛИ (x, y) = И-И (И-И-НЕ (х, И-НЕ (x, y)), И-И-И (y, И-НЕ (x, y)))

Однако эти идентичности приводят к более сложным сетям.

Кроме того, невозможно построить двухуровневую NN, потому что XOR не является линейно разделимым (а функция активации строго монотонна).

Но, может быть, есть другие варианты построения XOR NN? Давайте попробуем найти альтернативные решения, обучив NN в следующем разделе.

Создайте XOR NN с помощью TensorFlow Keras

Keras - действительно мощная и простая в использовании библиотека для сетевых сетей. Как упоминалось выше, мы строим трехуровневую модель 2–2–1, чтобы сравнить наши результаты с ранее построенной NN.

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

Вот фрагмент кода Python:

Плюс XOR в том, что мы можем обучать все пространство параметров, потому что есть только четыре возможных конфигурации для обучения. Тем не менее, нам нужны несколько эпох, чтобы привести модель к нулевым потерям и 100% точности, то есть выход стремится к единице для (0,1) и (1,0), соответственно, к нулю для (0,0) и (1,1).

Однако тренировки также могут застревать и не сходиться. Тогда точность останавливается на 75% или даже 50%, т.е. отображение одного или двух двоичных кортежей неверно. В таком случае просто перезапустите построение NN, пока не получите правильное решение.

Анализ и выводы

Теперь проверим, имеет ли Keras NN структуру, аналогичную построенной. С помощью get_weights (см. Конец фрагмента кода) мы получаем значения веса и смещения.

Мы используем эти параметры для восстановления NN (я снова использовал Excel). Он состоит из трех операторов.

Подавая все возможные конфигурации, мы можем идентифицировать булевы функции, связанные с операторами H1, H2 и O.

Это интересно! Мы ожидали, что Keras NN демонстрирует ту же логику, что и сконструированный, однако он создал альтернативное решение. Вместо использования операторов NAND, OR и AND он использует OR, AND и (относительно неизвестный) INH. т.е. НС нашла формулу

ИСКЛЮЧАЮЩЕЕ ИЛИ (x, y) = INH (OR (x, y); AND (x, y))

Это указывает на то, что сетевые сети могут получать знания, которых раньше не было! Конечно, «новые знания» относительны и зависят от уровня «ноу-хау», т.е. если кто-то знает все представления XOR, никакой дополнительной ценности от Keras NN не будет.

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

Наконец, обратите внимание, что сетевые сети - не мое повседневное дело. В частности, я не знаю, новые ли мои открытия или старые. Так что я с нетерпением жду ваших отзывов. Заранее благодарим вас за комментарии, вопросы, предложения или исправления - все они приветствуются!