У наші дні зростає необхідність в системах, які здатні не тільки виконувати одного разу запрограмовану послідовність дій над заздалегідь певними даними, але і здатні самі аналізувати знову інформацію, що надходить, знаходити в ній закономірності, проводити прогнозування і т.д. У цій області програм найкращим чином зарекомендували себе так звані нейронні мережі - самонавчання системи, що імітують діяльність людського мозку. Розглянемо докладніше структуру штучних нейронних мереж (НС) та їх застосування в конкретних завданнях.
Штучний нейрон.
Незважаючи на велику різноманітність варіантів нейронних мереж всі вони мають спільні риси. Так всі вони, також як і мозок людини, складаються з великої кількості однотипних елементів - нейронів, які імітують нейрони головного мозку, пов'язаних між собою. На рис.1 показана схема нейрона
З малюнка видно, що штучний нейрон, так само як і живий, складається з синапсів, що пов'язують входи нейрона з ядром, ядра нейрона, яке здійснює обробку вхідних сигналів і аксона, який пов'язує нейрон з нейронами наступного шару. Кожен синапс має вагу, який визначає наскільки відповідний вхід нейрона впливає на його стан. Стан нейрона визначається за формулою
(1)
де
n - число входів нейрона
xi - значення i-го входу нейрона
wi - вага i-го синапсу
Потім визначається значення аксона нейрона за формулою
Y = f (S) (2)
Де f - деяка функція, яка називається активаційний. Найбільш часто як активаційний функції використовується так званий сігмоід, який має такий вигляд:
(3)
Основна перевага цієї функції в тому, що вона диференційовних на всій осі абсцис і має дуже просту похідну:
(4)
При зменшенні параметра?? Сігмоід стає пологішим, виродилися в горизонтальну лінію на рівні 0,5 при? = 0. При збільшенні? сігмоід все більше наближається до функції одиничного стрибка.
Нейронні мережі зворотного поширення.
Нейронні мережі зворотного поширення - це потужний інструмент пошуку закономірностей, прогнозування, якісного аналізу. Таку назву - мережі зворотного поширення (back propagation) вони отримали через використовуваного алгоритму навчання, в якому помилка поширюється від вихідного шару до вхідного, тобто в напрямку, протилежному напрямку розповсюдження сигналу при нормальному функціонуванні мережі.
Нейронна мережу зворотного поширення складається з декількох шарів нейронів, причому кожен нейрон шару i пов'язаний з кожним нейроном шару i +1, тобто мова йде про повно-НС.
У загальному випадку задача навчання НС зводиться до знаходження певної функціональної залежності Y = F (X) де X-вектор вхідний, а Y-вихідний вектори. У загальному випадку така задача, при обмеженому наборі вхідних даних має нескінченну безліч рішень. Для обмеження простору пошуку при навчанні ставиться завдання мінімізації цільової функції помилки НС, яка знаходиться за методом найменших квадратів:
(5)
де
yj - значення j-го виходу нейросети
dj-цільове значення j-го виходу
p - число нейронів у вихідному шарі
Навчання нейросети проводиться методом градієнтного спуску, тобто на кожній ітерації зміна ваги здійснюється за формулою
(6)
де? - параметр визначає швидкість навчання
(7)
де
yj-значення виходу j-го нейрона
Sj - зважена сума вхідних сигналів, що визначається за формулою (1). При цьому множник
(8)
де xi - значення i-го входу нейрона
Далі розглянемо визначення перший множника формули (7)
(9)
де k - число нейронів у шарі n +1.
Введемо допоміжну змінну
(10)
Тоді ми зможемо визначить рекурсивну формулу для визначення n-ного шару якщо нам відомо наступного n +1- го шару.
(11)
Знаходження ж для останнього шару НС не представляє труднощі, тому що нам відомий цільової вектор, тобто вектор тих значень, які повинна видавати НС при даному наборі вхідних значень.
(12)
І нарешті запишемо формулу (6) у розгорнутому вигляді
(13)
Розглянемо тепер повний алгоритм навчання нейросети
1. подати на вхід НС один із потрібних образів і визначити значення виходів нейронів нейросети
2. розрахувати для вихідного шару НС за формулою (12) і розрахувати зміни ваг вихідного шару N за формулою (13)
3. Розрахувати за формулами (11) та (13) відповідно і для інших верств НС, n = N-1 .. 1
4. Скорегувати всі ваги НС (14)
5. Якщо помилка істотна, то перейти на крок 1
На етапі 2 мережі по черзі у випадковому порядку пред'являються вектора з навчальної послідовності.
Підвищення ефективності навчання НС зворотного поширення
Найпростіший метод градієнтного спуску, розглянутий вище, дуже неефективний у випадку, коли похідні за різними ваг сильно відрізняються. Це відповідає ситуації, коли значення функції S для деяких нейронів близька за модулем до 1 або коли модуль деяких ваг багато більше 1. У цьому випадку для плавного зменшення помилки треба вибирати дуже маленьку швидкість навчання, але при цьому навчання може зайняти неприпустимо багато часу.
Найпростішим методом удосконалення градієнтного спуску є введення моменту?, Коли вплив градієнта на зміну ваг змінюється з часом. Тоді формула (13) набуде вигляду
(13.1)
Додатковою перевагою від введення моменту є здатність алгоритму долати дрібні локальні мінімуми.
Представлення вхідних даних
Основна відмінність НС в тому, що в них всі вхідні і вихідні параметри представлені у вигляді чисел з плаваючою точкою зазвичай в діапазоні [0 .. 1]. У той же час дані предметної області часто мають інше кодування. Так це можуть бути числа в довільному діапазоні, дати, символьні рядки. Таким чином дані про проблему можуть бути як кількісними так і якісними. Розглянемо спочатку перетворення якісних даних у числові, а потім розглянемо спосіб перетворення вхідних даних в необхідний діапазон.
Якісні дані ми можемо розділити на дві групи: впорядковані (ордінальние) і неврегульовані. Для розгляду способів кодування цих даних ми розглянемо задачу про прогнозування успішності лікування якого-небудь захворювання. Прикладом впорядкованих даних можуть наприклад бути дані, наприклад, про додаткові фактори ризику при цьому захворюванні.
Ні Ожиріння Алкоголь Куріння Гіпертонія
А також можливим прикладом може бути наприклад вік хворого
До 25 років 25-39 років 40-49 років 50-59 років 60 і старше
Небезпека кожного фактора зростає в таблицях при русі зліва направо.
У першому випадку ми бачимо, що у хворого може бути кілька факторів ризику одночасно. У такому випадку нам необхідно використовувати такий кодування, при якому відсутня ситуація, коли різних комбінацій факторів відповідає одне і те ж значення. Найбільш поширений спосіб кодування, коли кожному фактору ставиться у відповідність розряд двійкового числа. 1 в цьому розряді говорить про наявність фактора, а 0 про його відсутність. Параметри ні можна поставити відповідно число 0. Таким чином для подання всіх факторів досить 4-х розрядного двійкового числа. Таким чином число 10102 = 1010 означає наявність у хворого гіпертонії і вживання алкоголю, а кількістю 00002 відповідає відсутність у хворого факторів ризику. Таким чином фактори ризику будуть представлені числами в діапазоні [0 .. 15].
У другому випадку ми також можемо кодувати всі значення двійковими вагами, але це буде недоцільно, тому що набір можливих значень буде дуже нерівномірним. У цьому випадку більш правильним буде встановлення у відповідність кожному значенню своєї ваги, що відрізняється на 1 від ваги сусіднього значення. Так число 3 буде відповідати віку 50-59лет. Таким чином вік буде закодований числами в діапазоні [0 .. 4].
У принципі аналогічно можна чинити і для невпорядкованих даних, поставивши у відповідність кожному значенню будь-яке число. Однак це вводить небажану впорядкованість, яка може спотворити дані, і сильно ускладнити процес навчання. Як один із способів вирішення цієї проблеми можна запропонувати поставити у відповідність кожному значенням одного з входів НС. У цьому випадку за наявності цього значення відповідний йому вхід встановлюється в 1 або в 0 при іншому випадку. На жаль цей спосіб не є панацеєю, бо при великій кількості варіантів вхідного значення числом входів НС розростається до величезної кількості. Це різко збільшить витрати часу на навчання. Як варіант вирішення цієї проблеми можна використовувати декілька інше рішення. У відповідність кожному значенню вхідного параметра ставиться бінарний вектор, кожен розряд якого відповідає окремого входу НС. Наприклад якщо число можливих значень параметра 128, то можна використовувати 7 розрядний вектор. Тоді 1 значенням буде відповідати вектор 0000000 а 128 - вектор 1111111, а, наприклад, 26 значенню - 0011011. Тоді число необхідних для кодування параметрів входів можна визначити як
N = log2n (15)
Де
n-кількість значень параметра
N-кількість входів
Перетворення числових вхідних даних
Для НС необхідно щоб вхідні дані лежали в діапазоні [0 .. 1], у той час як дані проблемної області можуть лежати в будь-якому діапазоні. Припустимо що дані по одному з параметрів лежать в діапазоні [Min .. Max]. Тоді паіболее простим способом нормування буде
(16)
де x-початкове значення параметра
-значення, що подається на вхід НС
На жаль цей спосіб кодування не позбавлений недоліків. Так у випадку якщо той розподіл даних на вході може прийняти вигляд
Тобто розподіл вхідних параметрів буде вкрай нерівномірним, що призведе до погіршення якості навчання. Тому в подібних ситуаціях, а також у випадку, коли значення входу лежить в діапазоні можна використовувати нормування за допомогою функції виду
(17)