Функция XOR возвращает true, если один из двух входов истинен.

Функция исключающее ИЛИ, также известная как XOR (но никогда не использующая оба имени одновременно), имеет особое отношение к искусственному интеллекту в целом и нейронным сетям в частности. Это благодаря известной книге Марвина Мински и Сеймура Пейперта 1969 года под названием Персептроны: введение в вычислительную геометрию. В зависимости от того, кого вы спросите, этот текст был единолично ответственен за зиму ИИ из-за его критики современной нейронной сети того времени. С другой точки зрения, мало кто когда-либо читал книгу, но все о ней слышали, и тенденция заключалась в том, чтобы обобщить частные случаи ограниченности локальных и однослойных персептронов до такой степени, что интерес и финансирование нейронных сетей испарились. В любом случае, благодаря обратному распространению нейронные сети сейчас широко используются, и мы можем легко обучить трехслойную нейронную сеть повторять функцию XOR.

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

Невозможно нарисовать прямую двумерную линию на графике и разделить истинные и ложные результаты XOR, красный и зеленый на скетче выше. Иди и попробуй. То же самое будет верно и при попытке использовать плоскость для разделения 3D-версии и так далее до более высоких измерений.

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

Таблица истинности для XOR выглядит следующим образом:

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

Обновление (2017/03/02) Вот суть создания гифки выше:

Первоначально опубликовано на http://thescinder.com 24 января 2017 г.