Я описував кожен окремий нейрон як запис, що містить всі необхідні частини:
- Список вагових коефіцієнтів для зв'язків між даними нейроном і всіма нейронами попереднього шару (або вхідними даними, якщо нейрон знаходиться у вхідному шарі). Кожен ваговий коефіцієнт - дійсне число (по 1 вагового коефіцієнту на нейрон попереднього шару)
- Граничний рівень (див. Далі) (див. Також примітка перекладача в кінці глави)
- Значення помилки. Використовується тільки на стадії навчання. Ця величина необов'язково дожна бути пов'язана з нейроном, я зробив це тільки для зручності читання коду.
- Зміна помилки. Також використовується тільки під час навчання.
Ось саме опис нейрона:
Вихідний сигнал нейрона зберігається в поле a (так звана активність нейрона). Нейрон повинен відреагувати на вхідний сигнал, що надходить по зваженим зв'язкам, обчисливши при цьому вихідний сигнал. Для трансформації вхідних сигналів у вихідні необхідна функція.
Нижче наведена декларація вузлів за допомогою змінних. Постійні позначають кількість нейронів у вхідному, прихованому і вихідному шарі:
Активаційні (перехідні) функції
Протягом ряду років для перетворення вхідних сигналів у вихідні використовувалося кілька типів функцій. На наведених нижче малюнках показані графіки деяких з найбільш часто використовуваних. По горизонталі - сума вхідних сигналів (див. Нижче), по вертикалі - значення функції. Всі функції видають результат в діапазоні від 0 до 1.
Проста ступінчаста (крокова) функція. Значення активационной функції дорівнює 1 при позитивній сумі вхідних сигналів або 0 при негативній.
Функція, значення якої дорівнює 0 при негативному аргументі, при позитивному аргументі - пропорційно аргументу (тільки до 1).
Так звана сигмоїда. Значення функції прагне до 0 при великих негативних значеннях, до 1 - при великих позитивних, з плавним переходом між тими і іншими. Сигмоїдальна функція описується рівнянням:
Ця функція, як вважається, найбільш точно описує активність справжніх нейронів мозку і найбільш часто використовується в штучних нейронних мережах. Код на Паскалі для цієї функції:
Однак паскалевская функція exp призводить до помилки в програмі, якщо вхідний значення виходить з проміжку -39..38. На щастя, ці настільки значення далеко відстоять від початку координат, що ми можемо вважати: при аргументі <-39 значение функции равно 0, при аргументе> 38, - значення функції дорівнює 1. Для запобігання помилки додамо кілька рядків:
На практиці ці нейрони не спрацьовують (не видають вихідний сигнал) до тих пір, поки рівень вхідного сигналу не досягне деякого граничного значення, тобто на вхід нейрона надходить сума зважених сигналів мінус деяка величина. Отримане значення проходить через активаційну функцію. Таким чином, загальна формула виглядає так:
Кожен шар нейронів базується на виході попереднього шару (за винятком вхідного шару, що базується безпосередньо на пропонованих мережі вхідних даних (в коді - масив test_pat). Це означає, що значення вхідного шару повинні бути повністю розраховані до обчислення значень прихованого шару, які в свою чергу , повинні бути розраховані до обчислення значень вихідного шару.
Виходи нейронної мережі - значення активностей (поле a) нейронів вихідного шару. Програма, що симулює роботу нейронної мережі, в процесі навчання буде порівнювати їх зі значеннями, які повинні бути на виході мережі.
Наприклад, якщо нейронна мережа використовується для того, щоб визначити, персона якої статі відображена на фотографії, то можливе існування двох нейронів у вихідному шарі: для чоловічої статі на виході "М" має з'явитися значення 1, а на виході "Ж" - 0. відповідно, при пред'явленні мережі жіночої фотографії, вихідні нейрони видають зворотні значення ( "М" = 0, "Ж" = 1). На практиці, якщо на виході "М" - число 0.0261, а на виході "Ж" - число 0.9932, то мережу видає висновок про те, що на фотографії - жіноче обличчя (точних значень 1 або 0 навряд чи можна домогтися).
Якщо вам будь-яким чином вже відомі вагові коефіцієнти, то наступну главу можете сміливо пропустити. В іншому випадку, вам все таки доведеться приступити до навчання мережі і зіткнутися з поняттям зворотного поширення помилки.
У літературі більш поширений дещо відрізняється підхід до "порогового рівня". Боулс використовує саме слово "пороговий" (threshold), маючи на увазі біологічну сторону питання (тобто природу реального нейрона). У літературі зазвичай використовують інший термін - "зсув" (bias), обґрунтовуючи необхідність введення такої величини математично (забезпечується зміщення кривої графіка щодо 0, а як наслідок велика гнучкість функції). Така розбіжність, однак, не призводить до корінних розбіжностей в реалізації і математичному апараті.