Перцептрон: Структурний блок штучної нейронної мережі

Вихідний вузол: 1216283

Якщо ви ентузіаст машинного навчання та штучного інтелекту, ви, мабуть, зустрічали слово перцептрон. Персептрон викладають у першому розділі багатьох курсів глибокого навчання. Отже, що саме це таке? Що це натхнення? Як саме він вирішує проблему класифікації? У цій статті ми почнемо з біологічного натхнення, що лежить в основі персептрона, потім заглибимося в його математичну техніку і, нарешті, побудуємо двійковий класифікатор з нуля, використовуючи блок персептрона.

Біологічне натхнення нейронних мереж

Нейрон (нервова клітина) є основним будівельним блоком нервової системи. Людський мозок складається з мільярдів нейронів, які пов’язані між собою. Вони відповідають за прийом і відправку сигналів від мозку. Як показано на діаграмі нижче, типовий нейрон складається з трьох основних частин – дендритів, аксона та тіла клітини або соми. Дендрити - це деревоподібні гілки, що відходять від тіла клітини. Вони отримують інформацію від інших нейронів. Сома є ядром нейрона. Він відповідає за обробку інформації, отриманої від дендритів. Аксон схожий на кабель, по якому нейрони передають інформацію. Ближче до кінця аксон розпадається на багато гілок, які з’єднуються з іншими нейронами через свої дендрити. The Зв'язок між аксоном і дендритами інших нейронів називається синапсами.

1: Біологічний нейрон проти штучної нейронної мережі

Джерело зображення: Віллемс, К. (2017, 2 травня). Підручник Keras: глибоке навчання на Python.

Оскільки ANN надихається функціонуванням мозку, давайте подивимося, як працює мозок. Мозок складається з мережі мільярдів нейронів. Вони спілкуються за допомогою електричних і хімічних сигналів через синапс, в якому інформація від одного нейрона передається іншим нейронам. Процес передачі включає електричний імпульс, званий «потенціалом дії». Для передачі інформації вхідні сигнали (імпульс) повинні бути достатньо сильними, щоб подолати певний пороговий бар'єр, тоді тільки нейрон активується і передає сигнал далі (вихід).

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

  • Нейрон отримує інформацію від інших нейронів у вигляді електричних імпульсів різної сили.
  • Нейрон об'єднує всі імпульси, які отримує від інших нейронів.
  • Якщо результуюча сума перевищує певне порогове значення, нейрон «спрацьовує», запускаючи потенціал дії, який передається іншим підключеним нейронам.

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

Перцептрон Розенблата в основному є двійковим класифікатором. Перцептрон складається з 3 основних частин:

  • Вхідні вузли або вхідний рівень: вхідний рівень приймає вихідні дані в систему для подальшої обробки. Кожен вхідний вузол пов'язаний з числовим значенням. Він може приймати будь-яке реальне значення.
  • Ваги та зміщення: параметри ваги представляють силу зв’язку між одиницями. Чим вища вага, тим сильніший вплив асоційованого вхідного нейрона на визначення виходу. Зміщення грає так само, як перехоплення в лінійному рівнянні.
  • Функція активації: функція активації визначає, чи спрацює нейрон чи ні. У найпростішому вигляді функція активації є поетапною функцією, але залежно від сценарію можна використовувати різні функції активації.

Ми побачимо більше про це в наступному розділі.

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

На першому кроці всі вхідні значення множаться на відповідні ваги та додаються разом. Отриманий результат називається зваженою сумою ∑wi*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: вихід = 1, інакше: вихід = 0

Його графік буде приблизно таким:

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

Насправді це функція активації Unit Step (Threshold), яку спочатку використовував Розенблат. Але, як бачите, ця функція розривна в 0, тому створює проблеми в математичних обчисленнях. Більш згладжена версія наведеної вище функції - сигмоїдна функція. Він виводить значення від 0 до 1. Ще один — гіперболічний тангенс (tanh), яка видає вихідні дані від -1 до 1. Обидві функції sigmoid і 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, centers = 2, n_samples = 1000, random_state = 12)
# Візуалізація набору даних plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Основна правда', розмір шрифту = 18) plt.show()
Персептрон як двійковий класифікатор

Припустимо, сині крапки дорівнюють 1, а зелені — 0. Використовуючи логіку персептрона, ми можемо створити межу рішення (гіперплощина) для класифікації, яка розділяє різні точки даних на графіку.

Перш ніж продовжити, давайте додамо член (одиниці) зсуву до вхідного вектора –

# Додати зсув до вхідного вектора 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 = activation_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 = [activation_func(w.transpose().dot(x)) для x в 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], гіперплощина ([-10, -1], w), lw = 3, c = 'червоний') plt.title('Класифікація перцептрона з межею прийняття рішень') plt.show()
Класифікація перцептрона з межею рішення

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

Якщо ви бачите, тут наші вихідні дані були досить розділені, тому ми можемо отримати таку хорошу точність. Але це не стосується реальних даних. Використовуючи один персептрон, ми можемо побудувати лише лінійну межу прийняття рішень, тому, якщо дані змішуються, алгоритм персептрона працюватиме погано. Це одне з обмежень моделі єдиного перцептрона.

Заголовки

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

Про автора

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

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

Джерело: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Часова мітка:

Більше від Аналітика Vidhya