Персептрон: строительный блок искусственной нейронной сети

Исходный узел: 1216283

Если вы энтузиаст машинного обучения и искусственного интеллекта, вы наверняка встречали слово перцептрон. Персептрон изучается в первой главе многих курсов глубокого обучения. Так что же это такое? Что за этим стоит? Как именно это решает проблему классификации? В этой статье мы начнем с биологического вдохновения, лежащего в основе перцептрона, а затем углубимся в его математические детали и, наконец, построим двоичный классификатор с нуля, используя перцептрон.

Биологическое вдохновение нейронных сетей

Нейрон (нервная клетка) - это основной строительный блок нервной системы. Человеческий мозг состоит из миллиардов нейронов, связанных между собой. Они отвечают за получение и отправку сигналов от мозга. Как видно на диаграмме ниже, типичный нейрон состоит из трех основных частей - дендритов, аксона и тела клетки или сомы. Дендриты - это древовидные ветви, отходящие от тела клетки. Они получают информацию от других нейронов. Сома - это ядро ​​нейрона. Он отвечает за обработку информации, полученной от дендритов. Аксон похож на кабель, по которому нейроны отправляют информацию. К концу аксон разделяется на множество ветвей, которые соединяются с другими нейронами через свои дендриты. В связь между аксоном и дендритами других нейронов называется синапсами.

1. Биологический нейрон против искусственной нейронной сети

Image Source: Виллемс, К. (2017 мая 2 г.). Учебник Keras: глубокое обучение на Python.

Поскольку ИНС вдохновлена ​​функционированием мозга, давайте посмотрим, как работает мозг. Мозг состоит из сети из миллиардов нейронов. Они общаются с помощью электрических и химических сигналов через синапс, в котором информация от одного нейрона передается другим нейронам. В процессе передачи используется электрический импульс, называемый «потенциалом действия». Для передачи информации входные сигналы (импульс) должны быть достаточно сильными, чтобы пересечь определенный пороговый барьер, тогда только нейрон активируется и передает сигнал дальше (выход).

Вдохновленный биологическим функционированием нейрона, американский ученый Франк Розенблатт в 1957 году в Корнельской авиационной лаборатории разработал концепцию перцептрона.

  • Нейрон получает информацию от других нейронов в виде электрических импульсов различной силы.
  • Нейрон объединяет все импульсы, которые он получает от других нейронов.
  • Если результирующее суммирование превышает определенное пороговое значение, нейрон «срабатывает», вызывая потенциал действия, который передается другим подключенным нейронам.

Основные компоненты персептрона

Персептрон Розенблатта - это, по сути, двоичный классификатор. Персептрон состоит из 3-х основных частей:

  • Входные узлы или входной слой: входной уровень принимает исходные данные в систему для дальнейшей обработки. Каждый входной узел связан с числовым значением. Он может принимать любую реальную ценность.
  • Веса и смещение: Весовые параметры представляют силу связи между устройствами. Чем выше вес, тем сильнее влияние соответствующего входного нейрона на определение выхода. Смещение играет то же самое, что и точка пересечения в линейном уравнении.
  • Функция активации: функция активации определяет, будет ли нейрон срабатывать или нет. В простейшем случае функция активации является пошаговой, но в зависимости от сценария могут использоваться различные функции активации.

Мы увидим больше об этом в следующем разделе.

Работа перцептрона

На первом этапе все входные значения умножаются на их соответствующие веса и складываются. Полученный результат называется взвешенной суммой. ∑вi*xi, или заявлено иначе,  x1 * w1 + x2 * w2 +… wn * xn. Эта сумма дает соответствующее представление о входах в зависимости от их важности. Кроме того, термин предвзятости b к этой сумме добавляется ∑wi * xi + b. Смещение служит еще одним параметром модели (в дополнение к весам), который можно настроить для повышения производительности модели.

На втором этапе функция активации f применяется к вышеуказанной сумме ∑wi * xi + b, чтобы получить выход Y = f(∑wi * xi + b). В зависимости от сценария и используемой функции активации Результат либо двоичный {1, 0} или непрерывное значение. 

Работа перцептрона

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

Функции активации

Биологический нейрон срабатывает только при превышении определенного порога. Точно так же искусственный нейрон также будет срабатывать только тогда, когда сумма входов (взвешенная сумма) превысит определенное пороговое значение, скажем 0. Интуитивно мы можем думать о подходе, основанном на правилах, например:

Если ∑wi * xi + b> 0: output = 1 else: output = 0

Его график будет примерно таким:

Функции активации

Фактически, это функция активации Unit Step (Threshold), которая изначально использовалась Rosenblatt. Но, как вы можете видеть, эта функция не является непрерывной при 0, поэтому она вызывает проблемы в математических вычислениях. Более гладкая версия вышеупомянутой функции - сигмовидная функция. Он выводит от 0 до 1. Другой - гиперболический тангенс (tanh), которая выдает результат в диапазоне от -1 до 1. И сигмоидальная, и tanh-функция страдают от проблем с исчезающими градиентами. В настоящее время ReLU и Leaky ReLU являются наиболее часто используемыми функциями активации. Они относительно стабильны в глубоких сетях.

Персептрон как двоичный классификатор

До сих пор мы видели биологическое вдохновение и математику перцептрона. В этом разделе мы увидим, как перцептрон решает задачу линейной классификации.

Импорт некоторых библиотек -

from sklearn.datasets import make_blobs import matplotlib.pyplot as plt import numpy as np% matplotlib inline

Создание фиктивного набора данных с использованием make_blobs функциональность, предоставляемая scikit learn -

# Создать набор данных X, Y = make_blobs (n_features = 2, center = 2, n_samples = 1000, random_state = 12)
# Визуализировать набор данных plt.figure (figsize = (6, 6)) plt.scatter (X [:, 0], X [:, 1], c = Y) plt.title ('Основная правда', fontsize = 18) plt.show ()
Персептрон как двоичный классификатор

Допустим, синие точки - это единицы, а зеленые точки - это нули. Используя логику персептрона, мы можем создать границу принятия решения (гиперплоскость) для классификации, которая разделяет разные точки данных на графике.

Прежде чем мы продолжим, давайте добавим член смещения (единицы) к входному вектору -

# Добавить смещение к входному вектору X_bias = np.ones ([X.shape [0], 3]) X_bias [:, 1: 3] = X

Набор данных будет выглядеть примерно так – 

Набор данных

Здесь каждая строка вышеприведенного набора данных представляет входной вектор (точку данных). Чтобы создать границу решения, нам нужно найти соответствующие веса. Веса «изучаются» во время тренировки, используя следующее правило:

w = w + (ожидаемый - прогнозируемый) * x

Персептрон ж

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

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

# инициализировать веса случайными значениями w = np.random.rand (3, 1) print (w)

Вывод:

[[0.37547448] [0.00239401] [0.18640939]]

Определите функцию активации перцептрона -

def Activation_func (z): если z> = 1: вернуть 1 иначе: вернуть 0

Затем мы применяем правило обучения перцептрона -

for _ in range (100): for i in range (X_bias.shape [0]): y = activate_func (w.transpose (). dot (X_bias [i,:])) # Обновить веса w = w + (( Y [i] - y) * X_bias [i,:]). Reshape (w.shape [0], 1)

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

Теперь, когда мы получили оптимальные веса, мы спрогнозируйте класс для каждой точки данных, используя Y = f(∑wi * xi + b) или Y = wT.x в векторной форме.

# прогнозирование класса точек данных result_class = [activate_func (w.transpose (). dot (x)) for x in X_bias]

Визуализируйте границу решения и предсказанные метки классов -

# преобразовать в единичный вектор w = w / np.sqrt (w.transpose (). dot (w))
# Визуализировать результаты plt.figure (figsize = (6, 6)) plt.scatter (X [:, 0], X [:, 1], c = result_class) plt.plot ([- 10, -1], hyperplane ([-10, -1], w), lw = 3, c = 'red') plt.title ('Классификация персептронов с границей решения') plt.show ()
Классификация персептрона с границей решения

Вы можете сравнить исходное изображение с изображением прогнозируемого результата и увидеть некоторые неверно классифицированные точки. Если посчитать точность, она составляет около 98% (оставляю это читателям в качестве упражнения).

Если вы видите, здесь наши исходные данные были довольно разделены, поэтому мы можем получить такую ​​хорошую точность. Но это не относится к реальным данным. Используя один перцептрон, мы можем построить только линейную границу решения, поэтому, если данные перемешиваются, алгоритм перцептрона будет работать плохо. Это одно из ограничений модели одного персептрона.

Сноски

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

Об авторе

Пратик Набрия Квалифицированный специалист по анализу данных, в настоящее время работает в компании, занимающейся аналитикой и искусственным интеллектом, из Нойды. Он хорошо разбирается в машинном обучении, глубоком обучении, NLP, анализе временных рядов, обработке данных, SQL, Python и знаком с работой в облачной среде. В свободное время он любит участвовать в хакатонах и писать технические статьи.

Материалы, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению Автора.

Источник: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Отметка времени:

Больше от Аналитика Видхья