Как использовать простой пример нейросети перцептрон для классификации данных
Данная статья демонстрирует основные функциональные возможности нейронной сети перцептрон и объясняет цель обучения.
Эта статья является частью серии по нейронным сетям перцептрон. Если вы хотите начать с самого начала или перейти к следующему этапу, ознакомьтесь с оглавлением серии в меню в начале данной статьи.
Что такое однослойный перцептрон?
В предыдущей статье мы видели, что нейронная сеть состоит из взаимосвязанных узлов, расположенных в слоях. Узлы во входном слое распределяют данные, а узлы в других слоях выполняют суммирование, а затем применяют функцию активации. Соединения между этими узлами являются взвешенными, это означает, что каждое соединение умножает переданные данные на скалярное значение.
Обратите внимание, что эта конфигурация называется однослойным перцептроном. Да, я знаю, у него есть два слоя (входной и выходной), но только один слой содержит вычислительные узлы.
Классификация с помощью перцептрона
В данной статье мы рассмотрим работу перцептрона, используя следующую нейронную сеть.
Как видите, наша входная размерность равна трем. Мы можем думать об этом перцептроне как о средстве решения задач в трехмерном пространстве. Например, давайте предложим следующую задачу. Если точка в трехмерном пространстве расположена ниже оси X, она соответствует недействительным данным. Если точка находится на оси X или выше, она соответствует действительным данным, которые необходимо сохранить для дальнейшего анализа. Нам нужна эта нейронная сеть, чтобы классифицировать наши данные, с выходным значением 1, указывающим на действительный набор данных, и значением 0, указывающим на неверный набор данных.
Во-первых, мы должны перенести наши трехмерные координаты на входной вектор. В этом примере вход0 – это компонент x, вход1 – компонент y, а вход2 – компонент z. Далее нам нужно определить вес. Этот пример настолько прост, что нам не нужно обучать сеть. Мы можем просто подумать о необходимых весах и назначить их:
Все, что нам нужно сейчас сделать, это указать, что функция активации выходного узла представляет собой единичную ступеньку, выраженную следующим образом:
\[f(x)=\begin{cases}0 & x < 0\\1 & x \geq 0\end{cases}\]
Перцептрон работает следующим образом: поскольку w1 = 0 и w2 = 0, компоненты y и z не вносят вклад в результат суммирования, генерируемый выходным узлом. Единственным входным значением, которое влияет на результат суммирования, является компонент x, который доставляется на выходной узел без изменений, потому что w0 = 1. Если точка в трехмерном пространстве находится ниже оси x, суммирование выходного узла будет отрицательным, и функция активации преобразует это отрицательное значение в выход0 = 0. Если точка в трехмерном пространстве находится на оси X или выше, сумма будет равна или больше нуля, и функция активации преобразует это значение в выход0 = 1.
Решение задач с помощью перцептрона
В предыдущем разделе я описал наш перцептрон как инструмент для решения задач. Однако вы, возможно, заметили, что этот перцептрон не сильно занимался решением задач – я решил задачу и дал решение перцептрону, назначив требуемые веса.
К этому моменту мы достигли ключевой концепции нейронной сети: я смог быстро решить проблему классификации действительные/недействительные, потому что связь между входными данными и искомыми выходными значениями очень проста. Однако во многих реальных ситуациях человеку было бы чрезвычайно трудно сформулировать математическую связь между входными данными и выходными значениями. Мы можем получать входные данные и записывать или производить соответствующие выходные значения, но у нас нет математического маршрута от входа к выходу.
Полезным примером является распознавание рукописного текста. Допустим, у нас есть изображения рукописных символов, и мы хотим классифицировать эти изображения как «a», «b», «c» и т.д., чтобы мы могли преобразовать рукописный текст в обычный компьютерный текст. Любой, кто знает, как писать и читать, сможет генерировать входные изображения и затем назначать правильные категории для каждого изображения. Таким образом, сбор входных данных и соответствующих выходных данных не представляет трудностей. С другой стороны, было бы чрезвычайно сложно взглянуть на пары вход-выход и сформулировать математическое выражение или алгоритм, который бы правильно преобразовывал входные изображения в выходную категорию.
Таким образом, распознавание рукописного текста и многие другие задачи обработки сигналов представляют собой математические задачи, которые люди не могут решить без помощи сложных инструментов. Несмотря на то, что нейронные сети не могут мыслить, анализировать и вводить новшества, они позволяют нам решать эти сложные задачи, потому что они могут делать то, чего не могут люди, то есть быстро и многократно выполнять вычисления с использованием потенциально огромного количества числовых данных.
Обучение нейросети
Процесс, который позволяет нейронной сети создавать математический маршрут от входа к выходу, называется обучением. Мы даем данные для обучения сети, состоящие из входных значений и соответствующих выходных значений, и к этим значениям применяется фиксированная математическая процедура. Целью этой процедуры является постепенное изменение весов сети таким образом, чтобы сеть могла рассчитывать правильные выходные значения даже с входными данными, которые она никогда раньше не видела. По сути, это поиск шаблонов в обучающих данных и генерация весов, которые позволят получить полезный результат путем применения этих шаблонов к новым данным.
На следующей диаграмме показан рассмотренный выше классификатор действительный/недействительный, но веса различаются. Это веса, которые я сгенерировал, тренируя перцептрон с помощью 1000 точек данных. Как видите, процесс обучения позволил перцептрону автоматически аппроксимировать математические связи, которые я определил с помощью критического мышления в человеческом стиле.
В следующей статье...
Я показал вам результаты обучения этого перцептрона, но я ничего не сказал о том, как я получил эти результаты. В следующей статье будет описана короткая программа на Python, которая реализует однослойную нейронную сеть перцептрон, и я также объясню мою процедуру обучения.