Персептрон являє з себе найпростішу нейронну мережу, відповідно потребує три базові компоненти для своєї роботи:
- Декілька шарів нейронів В нашому випадку ми маємо базовий багатошаровий персептрон, що складається з 3-х шарів: вхідний, прихований та вихідний.
- Навчаюча множина Навчаюча множина генерується програмно. Випадковим чином вибираються точки у прямокутному зображенні заданого розміру та формують геометричну фігуру. В нашому випадку це трикутник, прямокутник та лінія.
- Алгоритм корекції помилки Використаний класичний алгоритм зворотного поширення помилки (backpropagation), що зустрічається у більшості простий нейронних мереж.
Також слід перерахувати кілька важливих характеристик розробленої нами нейронної мережі:
-
Функція активації
Використовується стандартна функція – сигмоїд
Де α = 1
-
Функція градієнту
Для вихідного шару
Де:
- OUT – вихід нейрона
- T – очікувана вихідна величина
- δ – просто змінна, що тримає в собі коефіцієнт. Використовується для корекції ваги як у поточному шарі, так і в наступному
Для прихованих шарів
Де:
- ω – вага зв’язку між двома нейронами (поточного та попереднього шару)
- n – номер поточного шару
- i – ітератор
Нарешті:
-
Вхідний шар Зображення перетворюється у двовимірний масив з нулів та одиниць розмірністю 20х20 для зручнішої візуалізації у консолі. Навчаюча множина відразу формується у цьому вигляді. Для того, щоб подати дані на вхід, масив перетворюється з двовимірного у одновимірний. У приведеній програмі вхідний шар містить 400 нейронів (20*20)
-
Прихований шар Складається з 50-ти нейронів
-
Вихідний шар 3 нейрона. 1 – трикутник, 2 – прямокутник, 3 – лінія.
-
Коефіцієнт навчання Підлаштовується динамічно, початкове значення – 0.1. Під час навчання, якщо значення помилки залишається менше заданого рівня, коефіцієнт трохи зменшується. Це дозволяє точніше налаштувати ваги.
Код написаний на мові Javascript ES6 Перше завантаження (навчання нейронної мережі) може тривати кілька хвилин, але розпізнавання працює миттєво.