Простая нейронная сеть в Deductor Studio

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio.

Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.

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

Доказано, что однослойные нейронные сети способны производить только линейное разделение.

Один нейрон способен производить разделение единственной прямой линией (гиперплоскостью). Этим обусловлена его неспособность решать ряд простых задач, например, реализацию логической операции «исключающего ИЛИ».

Для начала рассмотрим таблицу истинности логической операции "И":

Таблица истинности и разделяющая прямая для логической операции "И"
Таблица истинности и разделяющая прямая для логической операции "И"

На представленной плоскости видно, что множества истинных и ложных результатов выполнения операции “И” можно легко разделить прямой линией. На плоскости, образованной осями А и В, результат можно изобразить с помощью белых кружков, обозначающих 0, и черных, обозначающих 1. Можно увидеть, что множества белых и черных кружков можно легко разделить прямой линией. Такая задача может быть решена одним нейроном.

Далее рассмотрим таблицу истинности логической операции "ИЛИ":

Таблица истинности и разделяющая прямая для логической операции "ИЛИ"
Таблица истинности и разделяющая прямая для логической операции "ИЛИ"

На графике видно, что одной линии достаточно для разделения двух множеств.

Однако для логической операции «Исключающее ИЛИ» или «XOR» результаты размещены таким образом, что одной прямой в любом случае будет недостаточно:

Таблица истинности и разделяющие прямые для логической операции "XOR"
Таблица истинности и разделяющие прямые для логической операции "XOR"

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

Для демонстрации того, как происходит линейное разделение, подготовим исходные данные следующего вида. Массив может содержать 500 элементов, состоящих из трех значений каждый. Значения А и В, которые будут входными для простой нейронной сети, представляют собой случайные числа от -10 до 10 (воспользуйтесь функцией генерации случайного числа для получения равномерно распределенных по плоскости точек). Столбец С должен принимать значение 1 (истина), если произведение А и В больше нуля (то есть если знаки входных значений совпадают) и 0 (ложь) - в противоположном случае.

Для столбцов A и B в Excel необходимо внести команду:

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-4

Для столбца C в Excel необходимо внести команду:

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-5
Полученный массив данных
Полученный массив данных

Заметим, что при такой генерации обучающих примеров имеем, что области, в которых С принимает значение 1, и области, в которых С принимает значение 0 распределены таким образом, что их невозможно разделить единой линией.

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-7

Далее необходимо обучить нейронную сеть:

Мастер импорта данных
Мастер импорта данных
Табличное представление импортированных данных
Табличное представление импортированных данных
Мастер обработки -> Нейросеть
Мастер обработки -> Нейросеть

Заметим, что Deductor Studio не дает возможности построить однослойную сеть потому, что на практике такие нейронные сети малоприменимы. Однако в текущем варианте построим нейронную сеть, близкую к однослойной нейронной сети, поместив в скрытый слой всего один нейрон. Таким образом получится сеть архитектуры 2-1-1, т.е. между скрытым и выходным слоем окажется всего одна связь. Такая нейронная сеть будет работать как однослойная сеть 2-1, но с дополнительным сигмоидальным преобразованием выходного сигнала.

Мастер обработки -> выбор числа слоёв, нейронов в слоях и типа функции активации
Мастер обработки -> выбор числа слоёв, нейронов в слоях и типа функции активации
Мастер обработки -> выберите алгоритм Back - Propagation
Мастер обработки -> выберите алгоритм Back - Propagation
После проведения обучения при настройке способов отображения выберите «Таблицу сопряженности» и «Диаграмму размещения»
После проведения обучения при настройке способов отображения выберите «Таблицу сопряженности» и «Диаграмму размещения»

Диаграмма размещения представляет собой проекцию трехмерного размещения данных; для нее потребуется указать, каким факторам соответствуют оси диаграмм. Выберите для отражения по оси Х фактор А, по оси Y – фактор В, по оси Z – фактор С.

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-14
Диаграмма размещения будет иметь примерно такой вид
Диаграмма размещения будет иметь примерно такой вид

Можно увидеть, что элементы распределены так, как и ожидалось по условиям задания: точки, попавшие в области, где их координаты имеют один знак, оказались на верхнем уровне по оси Z (True, Истина). Остальные точки остались на нижнем уровне (False, Ложь).

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

Приблизительный вид диаграммы размещения
Приблизительный вид диаграммы размещения

Чтобы увидеть качество классификации, необходимо обратиться к таблице сопряженности. В строках таблицы отмечены фактические классификационные группировки, в столбцах – представленные нейронной сетью.

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-17

Так, в представленном примере 246 образец верно классифицирован как False (Ложь), 96 верно классифицированы как True (Ложь). Таким образом, из 500 образцов верно классифицированы 342, или 68,4% – довольно посредственный результат. Остальные образцы классифицированы неверно.

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

Далее обучите несколько нейронных сетей с двумя нейронами в скрытом слое.

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-18

По таблице сопряженности можно увидеть, что качество обучения улучшилось:

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-19

402 образца (199 + 203) из 500 классифицированы правильно, т.е. 80,4% верно классифицированных образцов.

Становится понятным, что для надежной классификации потребуется большее число нейронов. Проведите эксперимент, чтобы выяснить, какое число нейронов позволит выполнить точное разделение.

Здесь рассмотрим возможность создания несложной нейронной сети в Deductor Studio. Рассмотрим задачу разделения обучающего множества, а также проиллюстрируем понятие линейно разделимой задачи.-20

Сколько нейронов потребуется для того, чтобы классификация оказалась абсолютно точной (проверяйте точность классификации по таблице сопряженности)? Достижим ли такой результат?