← Вернуться к списку

Решение функции XOR с помощью нейронной сети без скрытых слоев

Краткое содержание

XOR — это нелинейный набор данных. Его нельзя решить с помощью нейронной сети на основе любого количества перцептронов, но если к перцептронам применить сигмоидальную функцию активации, мы можем решить набор данных XOR. Однако я столкнулся с источником, в котором следующее утверждение указано как ложное: «Двухслойная (один входной слой; один выходной слой; без скрытых слоев) нейронная сеть может представлять функцию XOR». Тем не менее, я обучил модель без скрытых слоев, которая дает следующий результат: [INFO] data=[0 0], ground-truth=0, pred=0.5161, step=1 [INFO] data=[0 1], ground-truth=1, pred=0.5000, step=1 [INFO] data=[1 0], ground-truth=1, pred=0.4839, step=0 [INFO] data=[1 1], ground-truth=0, pred=0.4678, step=0 Таким образом, если я применю классификатор softmax, я могу разделить набор данных XOR с помощью нейронной сети без каких-либо скрытых слоев. Это делает утверждение неверным. Истинно ли, что мы не можем разделить нелинейный набор данных без скрытых слоев в нейронной сети? Если да, где я ошибаюсь в своем рассуждении относительно обучения нейронной сети, которой я обладаю?

Полный текст

Решение функции XOR с помощью нейронной сети без скрытых слоев

Задан 5 лет, 8 месяцев назад Изменен сегодня Просмотрен 3k раз

Задан 5 лет, 8 месяцев назад

2 $\begingroup$ XOR — это нелинейный набор данных. Его нельзя решить с помощью любой нейронной сети, основанной на персептронах, но когда к персептронам применяется сигмоидальная функция активации, мы можем решить набор данных XOR. Однако я столкнулся с источником, где следующее утверждение указано как Ложь: Нейронная сеть с двумя слоями (один входной слой; один выходной слой; без скрытого слоя) может представлять функцию XOR. Тем не менее, я обучил модель без скрытых слоев, которая дает следующий результат: [INFO] data=[0 0],ground-truth=0, pred=0.5161, step=1 [INFO] data=[0 1],ground-truth=1, pred=0.5000, step=1 [INFO] data=[1 0],ground-truth=1, pred=0.4839, step=0 [INFO] data=[1 1],ground-truth=0, pred=0.4678, step=0 Таким образом, если я применю классификатор softmax, я могу разделить набор данных XOR с помощью нейронной сети без каких-либо скрытых слоев. Это делает утверждение неверным. Действительно ли мы не можем разделить нелинейный набор данных без скрытых слоев в нейронной сети? Если да, то где я ошибаюсь в своем рассуждении относительно обучения нейронной сети, которое я провел выше? neural-networks non-linear-regression Share Improve this question Follow asked May 4, 2020 at 12:54 Hrushi 169 1 1 silver badge 10 10 bronze badges $\endgroup$ 4 $\begingroup$ Что, по вашему, делает softmax? Какое изменение произойдет, если вы замените сигмоиду на softmax, когда выходной слой состоит всего из одного нейрона? $\endgroup$ SajanGohil – SajanGohil 2020-05-04 13:00:56 +00:00 Commented May 4, 2020 at 13:00 $\begingroup$ Я имел в виду размещение softmax после последнего слоя, но теперь понимаю, что это уже не будет нейронной сетью без скрытых слоев $\endgroup$ Hrushi – Hrushi 2020-05-04 13:06:13 +00:00 Commented May 4, 2020 at 13:06 1 $\begingroup$ последний слой имеет веса, вы просто заменяете сигмоиду на softmax $\endgroup$ SajanGohil – SajanGohil 2020-05-04 13:07:24 +00:00 Commented May 4, 2020 at 13:07 $\begingroup$ Но добавление softmax или сигмоиды сделает выход сети нелинейным, верно (поскольку сигмоида или softmax — это нелинейные функции), и XOR — это тоже нелинейный набор данных. Есть ли какое-либо доказательство/обоснование того, что мы не можем разделить $\endgroup$ Hrushi – Hrushi 2020-05-04 13:14:59 +00:00 Commented May 4, 2020 at 13:14 Add a comment | 1 Answer 1 Sorted by: Reset to default Highest score (default) Date modified (newest first) Date created (oldest first) 3 $\begingroup$ Softmax — это вероятностное распределение, которое вы используете, когда хотите вероятность для всех нескольких классов, которые вы предсказываете, которые не являются независимыми, т.е., exp(xi)/sum(exp(xj) for j in all x), где xi — это оценка одного нейрона, поэтому softmax хорош, если у вас более одного нейрона, но для всего одного нейрона (в данном случае), выход softmax всегда будет равен 1 (exp(xi)/exp(xi)). Теперь давайте визуализируем ваш набор данных, т.е. построим точки XOR как функцию X,Y в координатном пространстве. , [src: https://www.researchgate.net/figure/The-exclusive-or-XOR-function-is-a-nonlinear-function-that-returns-0-when-its-two_fig4_322048911] Теперь, что бы вы ни делали, вы не можете разделить точки одной прямой линией wx+b, и после передачи в сигмоиду вы просто сжимаете значения для них, т.е. обрезанную wx+b. Теперь это все еще линейное уравнение. Теперь, когда вы добавляете еще один слой, скрытый, вы можете снова работать с первым выходом, который, если вы сжимаете между 0 и 1 или используете что-то вроде активации ReLU, произведет некоторую нелинейность, иначе это будет просто (w2(w1*x + b1)+b2, что снова является линейным уравнением, не способным разделить классы 0 и 1. Таким образом, после добавления скрытого слоя и передачи через функцию активации вы получаете нелинейный выход, например, с сигмоидой вы получаете w2*(1/+exp(w1*x+b1))+b2, который имеет довольно нелинейный член x, и после передачи через сигмоиду снова вы можете сжать выходы (иначе они могут быть выше 1 или ниже 0, но выходы XOR являются бинарными).