Навчання шляхом зворотного поширення помилки. Середовище розробки та причини її вибору

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

Для можливості застосування методу зворотного поширення помилки передатна функція нейронів має бути диференційованою. Метод є модифікацією класичного методу градієнтного спуску.

Сигмоїдальні функції активації

Найчастіше як функції активації використовуються наступні видисигмоїд:

Функція Фермі (експоненційна сигмоїда):

Раціональна сигмоїда:

Гіперболічний тангенс:

,

де s – вихід суматора нейрона, – довільна константа.

Найменше, порівняно з іншими сигмоїдами, процесорного часу потребує розрахунок раціональної сигмоїди. Для обчислення гіперболічного тангенсу потрібно найбільше тактів роботи процесора. Якщо порівнювати з пороговими функціями активації, то сигмоїди розраховуються дуже повільно. Якщо після підсумовування в пороговій функції відразу можна починати порівняння з певною величиною (порогом), то у разі сигмоїдальної функції активації потрібно розрахувати сигмоїд (витратити час у найкращому випадкуна три операції: взяття модуля, додавання і поділ), і лише потім порівнювати з граничною величиною (наприклад, нулем). Якщо вважати, що всі найпростіші операції розраховуються процесором приблизно за однаковий час, то робота сигмоїдальної функції активації після проведеного підсумовування (яке займе однаковий час) буде повільнішою за порогову функцію активації як 1:4.

Функція оцінки роботи мережі

У випадках, коли вдається оцінити роботу мережі, навчання нейронних мереж можна як завдання оптимізації. Оцінити – означає вказати кількісно, ​​добре чи погано мережу вирішує поставлені їй завдання. І тому будується функція оцінки. Вона, зазвичай, явно залежить від вихідних сигналів мережі і неявно (через функціонування) - від її параметрів. Найпростіший і найпоширеніший приклад оцінки - сума квадратів відстаней від вихідних сигналів мережі до необхідних значень:

,

де - Необхідне значення вихідного сигналу.

Опис алгоритму

Архітектура багатошарового перцептрону

Алгоритм зворотного поширення помилки застосовується для багатошарового перцептрону. У мережі є безліч входів, безліч виходів Outputs та безліч внутрішніх вузлів. Перенумеруємо всі вузли (включаючи входи та виходи) числами від 1 до N (наскрізна нумерація, незалежно від топології шарів). Позначимо через вагу, що стоїть на ребрі, що з'єднує i-й та j-й вузли, а через - вихід i-го вузла. Якщо нам відомий навчальний приклад (правильні відповіді мережі , ), то функція помилки, отримана методом найменших квадратів , виглядає так:

Як модифікувати ваги? Ми реалізовуватимемо стохастичний градієнтний спуск, тобто підправлятимемо ваги після кожного навчального прикладу і, таким чином, «рухатимемося» в багатовимірному просторі ваг. Щоб «дістатись» до мінімуму помилки, нам потрібно «рухатися» у бік, протилежний градієнту, тобто, на підставі кожної групи правильних відповідей, додавати до кожної ваги

,

де - множник, що задає швидкість руху.

Похідна вважається так. Нехай спочатку , тобто вага, що нас цікавить, входить в нейрон останнього рівня. Спочатку відзначимо, що впливає вихід мережі лише як частина суми , де сума береться по входам j-го вузла. Тому

Аналогічно впливає на загальну помилку тільки в рамках виходу j-го вузла (нагадуємо, що це вихід усієї мережі). Тому

Якщо ж j-й вузол- не на останньому рівні, то він має виходи; позначимо їх через Children(j). В цьому випадку

, .

Ну а - це точно аналогічна поправка, але обчислена для вузла наступного рівня будемо позначати її через - вона відрізняється відсутністю множника . Оскільки ми навчилися обчислювати поправку для вузлів останнього рівня та висловлювати поправку для вузла. низького рівнячерез виправлення вищого, можна вже писати алгоритм. Саме через цю особливість обчислення поправок алгоритм називається алгоритмом зворотного розповсюдження помилки(Backpropagation). Коротке резюме виконаної роботи:

  • для вузла останнього рівня
  • для внутрішнього вузла мережі
  • для всіх вузлів

Виходить алгоритм представлений нижче. На вхід алгоритму, крім зазначених параметрів, потрібно подавати в якомусь форматі структуру мережі. Насправді дуже хороші результати показують мережі досить простий структури, які з двох рівнів нейронів - прихованого рівня (hidden units) і нейронов-выходов (output units); кожен вхід мережі з'єднаний з усіма прихованими нейронами, а результат роботи кожного прихованого нейрона подається на вхід кожному з нейронів-виходів. У такому разі достатньо подавати на вхід кількість нейронів прихованого рівня.

Алгоритм

Алгоритм: BackPropagation

де - коефіцієнт інерційності для згладжування різких стрибків при переміщенні по поверхні цільової функції

Математична інтерпретація навчання нейронної мережі

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

Навчання нейронної мережі характеризується чотирма специфічними обмеженнями, що виділяють навчання нейромереж загальних завданьоптимізації: астрономічне число параметрів, необхідність високого паралелізму під час навчання, багатокритеріальність розв'язуваних завдань, необхідність знайти досить широку область, у якій значення всіх функцій, що мінімізуються, близькі до мінімальних. Загалом проблему навчання можна, зазвичай, сформулювати як завдання мінімізації оцінки. Обережність попередньої фрази («як правило») пов'язана з тим, що насправді нам невідомі і ніколи не будуть відомі всі можливі завдання для нейронних мереж, і, можливо, десь у невідомості є завдання, які не зводяться до мінімізації оцінки. Мінімізація оцінки - складна проблема: параметрів астрономічно багато (для стандартних прикладів, що реалізуються на РС - від 100 до 1000000), адаптивний рельєф (графік оцінки як функції від параметрів, що підлаштовуються) складний, може містити багато локальних мінімумів.

Недоліки алгоритму

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

Параліч мережі

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

Локальні мінімуми

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

Розмір кроку

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

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

Див. також

  • Алгоритм швидкісного градієнта

Література

  1. Уоссермен Ф.Нейрокомп'ютерна техніка: Теорія та практика. – М.: «Світ», 1992.
  2. Хайкін С.Нейронні мережі: Повний курс. Пров. з англ. Н. Н. Куссуль, А. Ю. Шелестова. 2-ге вид., Випр. - М: Видавничий дім Вільямс, 2008, 1103 с.

Посилання

  1. Копосов А. І., Щербаков І. Б., Кісленко Н. А., Кисленко О. П., Варивода Ю. В. та ін.. - М: ВНИИГАЗ, 1995.

У багатошарових нейронних мережах оптимальні вихідні значення нейронів всіх шарів, крім останнього, як правило, невідомі трьох або більше шаровий персептрон вже неможливо навчити, керуючись лише величинами помилок на виходах мережі

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

здається простоту, вимагає громіздких рутинних обчислень І, нарешті, третій, більше прийнятний варіант- розповсюдження сигналів помилки від виходів нейронної мережі до її входів, у напрямку, зворотному до прямого поширення сигналів у звичайному режимі роботи Цей алгоритм навчання отримав назву процедури зворотного поширення помилки (error back propagation) Саме він розглядається нижче

Алгоритм зворотного поширення помилки – це ітеративний градієнтний алгоритм навчання, який використовується з метою мінімізації середньоквадратичного відхиленняпоточних від необхідних виходів багатошарових нейронних мереж із послідовними зв'язками

Відповідно до методу найменших квадратів, що мінімізується цільовою функцією помилки нейронної мережі є величина

де - реальний вихідний стан нейрона у вихідного шару нейронної мережі при подачі на її входи образу, необхідний вихідний стан цього нейрона

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

де - ваговий коефіцієнт синаптичного зв'язку, що з'єднує нейрон шару нейроном шару - коефіцієнт швидкості навчання,

Відповідно до правила диференціювання складної функції

де - зважена сума вхідних сигналів нейрона аргумент активаційної функції Так як похідна активаційної функції повинна бути визначена на всій осі абсцис, то функція одиничного стрибка та інші активаційні функції з неоднорідностями не підходять для нейронних мереж, що розглядаються У них застосовуються такі гладкі функції, як гіперболічний танген класичний сигмоїд з експонентою (див. табл 1 1) Наприклад, у разі гіперболічного тангенсу

Третій множник дорівнює виходу нейрона попереднього шару

Що стосується першого множника (1.11), він легко розкладається наступним чином:

Тут підсумовування виконується серед нейронів шару Ввівши нову змінну:

отримаємо рекурсивну формулу для розрахунків величин шару з величин старшого шару

Для вихідного шару:

Тепер можна записати (1.10) у розкритому вигляді:

Іноді для надання процесу корекції ваги деякої інерційності, що згладжує різкі стрибки при переміщенні поверхні цільової функції, (1.17) доповнюється значенням зміни ваги на попередній ітерації.

де коефіцієнт інерційності; номер поточної ітерації.

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

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

де - Число нейронів у шарі з урахуванням нейрона з постійним вихідним станом задає зсув; вхід нейрона у шару

де - сигмоїд,

де компонент вектора вхідного образу.

КРОК 4. Скоригувати всі ваги в нейронній мережі:

КРОК 5. Якщо помилка мережі істотна, перейти на крок 1. Інакше кінець.

Мережі на етапі 1 поперемінно в випадковому порядкупред'являються всі тренувальні образи, щоб мережа, образно кажучи, не забувала одні з запам'ятовування інших.

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

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

де - число ваг, що підлаштовуються, - число нейронів у вихідному шарі.

Цей вираз отримано з урахуванням деяких обмежень. По-перше, число входів і нейронів у прихованому шарі повинно задовольняти нерівності По-друге, Однак наведена оцінка виконана для мереж з активними пороговими функціями нейронів, а ємність мереж з гладкими активаційними функціями, наприклад (1.23), зазвичай більше. Крім того, детерміністський термін означає, що отримана оцінка ємності підходить для всіх вхідних образів, які можуть бути представлені входами. Насправді розподіл вхідних образів, як правило, має деяку регулярність, що дозволяє нейронної мережі проводити узагальнення і, таким чином, збільшувати реальну ємність. Оскільки розподіл образів, загальному випадку, Заздалегідь не відомо, можна говорити про реальну ємність тільки ймовірно, але зазвичай вона в два рази перевищує детерміністську ємність.

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

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

відбуватися неприйнятно повільно. З іншого боку, занадто великі корекції ваги можуть призвести до постійної нестійкості процесу навчання. Тому як коефіцієнт швидкості навчання 1] зазвичай вибирається число менше 1 (наприклад, 0,1), яке поступово зменшується в процесі навчання. Крім того, для виключення випадкових попадань мережі в локальні мінімуми іноді, після стабілізації значень вагових коефіцієнтів, 7 короткочасно значно збільшують, щоб розпочати градієнтний спуск з нової точки. Якщо повторення цієї процедури кілька разів приведе мережу в той самий стан, можна припустити, що знайдено глобальний мінімум.

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

Дамо викладеному геометричну інтерпретацію.

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

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

Зазвичай цей алгоритм видозмінюється таким чином, щоб включати доданок імпульсу (або інерції). Це сприяє просуванню у фіксованому напрямку, тому, якщо було зроблено кілька кроків у тому самому напрямку, то алгоритм збільшує швидкість, що іноді дозволяє уникнути локального мінімуму, і навіть швидше проходити плоскі ділянки.

На кожному кроці алгоритму на вхід мережі почергово подаються всі навчальні приклади, реальні вихідні значення мережі порівнюються з необхідними значеннями і обчислюється помилка. Значення помилки, а також градієнта поверхні помилок

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

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

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

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

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

Як вибрати правильний ступінь складності мережі? Майже завжди складніша мережа дає меншу помилку, але це може свідчити не про хорошій якостімоделі, а про перенавчання мережі.

Вихід полягає у використанні контрольної крос-перевірки. Для цього резервується частина навчальної вибірки, яка використовується не для навчання мережі алгоритму зворотного поширення помилки, а для незалежного контролю результату в ході алгоритму. На початку роботи помилка мережі на навчальному та

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

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

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

З метою прискорення процесу навчання мережі запропоновано численні модифікації алгоритму зворотного розповсюдження помилки, пов'язані з використанням різних функцій помилки, процедури визначення напрямку та величин кроку.

1) Функції помилки:

Інтегральні функції помилки у всій сукупності навчальних прикладів;

Функції помилки цілих та дробових ступенів

2) Процедури визначення величини кроку кожної ітерації

Дихотомія;

Інерційні співвідношення (див. вище);

3) Процедури визначення напряму кроку.

з використанням матриці похідних другого порядку (метод Ньютона);

З використанням напрямків на кількох кроках (партан метод).

Отже, сьогодні ми продовжимо обговорювати тему нейронних мережна нашому сайті, і, як я і обіцяв у першій статті (), мова підепро навчанні мереж. Тема ця дуже важлива, оскільки одним із основних властивостейнейронних мереж є саме те, що вона не тільки діє відповідно до якогось чітко заданого алгоритму, а ще й удосконалюється (навчається) на основі минулого досвіду. І у цій статті ми розглянемо деякі форми навчання, і навіть невеликий практичний приклад.

Давайте для початку розберемося, у чому взагалі полягає мета навчання. А все просто – у коригуванні вагових коефіцієнтів зв'язків мережі. Одним із самих типових способівє кероване навчання. Для його проведення нам необхідно мати набір вхідних даних, а також відповідні вихідні дані. Встановлюємо вагові коефіцієнти рівними деяким малим величинам. А далі процес протікає так…

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

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

Дельта правило (правило Видроу-Хоффа).

Визначимо помилку:

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

Дельта-правило полягає в наступному - зміна величини вагового коефіцієнта має бути рівним:

Де – норма навчання. Це число ми самі задаємо перед початком навчання. - це сигнал, що приходить до елемента kвід елемента j. А – помилка елемента k.

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

З коригуванням терезів все зрозуміло, залишилося визначити, яким саме чином і за яким алгоритмом відбуватимуться розрахунки під час навчання мережі. Давайте розглянемо навчання за алгоритмом зворотного розповсюдження помилок.

Алгоритм зворотного розповсюдження помилок.

Цей алгоритм визначає два “потоки” у мережі. Вхідні сигнали рухаються у прямому напрямку, внаслідок чого ми отримуємо вихідний сигнал, з якого отримуємо значення помилки. Величина помилки рухається в зворотному напрямкув результаті відбувається коригування вагових коефіцієнтів зв'язків мережі. Наприкінці статті ми розглянемо приклад, який наочно демонструє ці процеси.

Отже, для коригування вагових значень ми використовуватимемо дельта-правило, яке ми вже обговорили. Ось тільки необхідно визначити універсальне правилодля обчислення помилки кожного елемента мережі після власне проходження через елемент (при зворотному поширенні помилок).

Я, мабуть, не наводитиму математичні висновкиі розрахунки (попри мою любов до математики 🙂), щоб не перевантажувати статтю, обмежимося лише підсумковими результатами:

Функція – це функція активності елемента. Давайте використовувати логістичну функцію для неї:

Підставляємо в попередню формулу та отримуємо величину помилки:

У цій формулі:

Напевно, зараз ще все це здається не зовсім зрозумілим, але не переживайте, при розгляді практичного прикладувсе стане на свої місця 😉

Власне, давайте до нього і перейдемо.

Перед навчанням мережі необхідно задати початкові значення ваги – зазвичай вони ініціалізуються невеликими за величиною випадковими значеннями, наприклад з інтервалу (-0.5, 0.5). Але для нашого прикладу візьмемо для зручності цілі числа.

Розглянемо нейронну мережу та вручну проведемо розрахунки для прямого та зворотного “потоків” у мережі.

На вхід ми маємо подати зразок, хай це буде (0.2, 0.5) . Очікуваний вихід мережі – 0.4 . Норма навчання нехай буде рівна 0.85 . Проведемо всі розрахунки поетапно. До речі, зовсім забув, як функцію активності ми будемо використовувати логістичну функцію:

Отже, приступаємо…

Обчислимо комбіноване введення елементів 2 , 3 і 4 :

Активність цих елементів дорівнює:

Комбіноване введення п'ятого елемента:

Активність п'ятого елемента і водночас виведення нейронної мережі дорівнює:

З прямим потоком розібралися, тепер перейдемо до зворотного потоку. Всі розрахунки будемо проводити відповідно до формул, які ми вже обговорили. Отже, обчислимо помилку вихідного елемента:

Тоді помилки для елементів 2 , 3 і 4 рівні відповідно:

Тут значення -0.014, -0.028 і -0.056 виходять внаслідок проходу помилки вихідного елемента – 0.014 за зваженими зв'язками у напрямку до елементів 2 , 3 і 4 відповідно.

І, нарешті, розраховуємо величину, яку необхідно змінити значення вагових коефіцієнтів. Наприклад, величина коригування для зв'язку між елементами 0 і 2 дорівнює добутку величини сигналу, що надходить в елементі 2 від елемента 0 , помилки елемента 2 та норми навчання (все за дельта-правилом, яке ми обговорили на початку статті):

Аналогічним чином проводимо розрахунки й інших елементів:

Тепер нові вагові коефіцієнти дорівнюватимуть сумі попереднього значення та величини поправки.

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

На прохання читачів блогу я вирішив додати короткий прикладнавчання мережі з двома прихованими шарами:

Отже, додаємо в нашу мережу два нових елементи (X та Y), які тепер виконуватимуть роль вхідних. На вхід також подаємо зразок (0.2, 0.5) . Розглянемо алгоритм у разі:

1. Прямий прохід мережі. Тут все так само як і для мережі з одним прихованим шаром. Результатом буде значення.

2. Обчислюємо помилку вихідного елемента:

3. Тепер потрібно обчислити помилки елементів 2, 3 і 4.

Для навчання багатошарової мережі в 1986 р. Руммельхартом і Хінтоном (Rummelhart D.E., Hinton G.E., Williams RJ, 1986) було запропоновано алгоритм зворотного розповсюдження помилок (error back propagation). Численні публікації про промислові застосування багатошарових мереж із цим алгоритмом навчання підтвердили його принципову працездатність на практиці.

На початку виникає резонне питання – а чому для навчання багатошарового персептрону не можна застосувати вже відоме -правило Розенблатта (див. Лекцію 4)? Відповідь у тому, що з застосування методу Розенблатта необхідно знати як поточні виходи нейронів y, а й необхідні правильнізначення Y. У разі багатошарової мережі ці правильні значення є лише для нейронів. вихідногошару. Необхідні значення виходів для нейронів прихованих шарів невідомі, що обмежує застосування-правила.

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

Перейдемо до детального розгляду цього алгоритму. Для спрощення позначень обмежимося ситуацією, коли мережа має лише один прихований шар. Матрицю вагових коефіцієнтів від входів до прихованого шару позначимо W, а матрицю ваг, що з'єднують прихований і вихідний шар - як V. Для індексів приймемо наступні позначення: входи нумеруватимемо тільки індексом i, елементи прихованого шару - індексом j, а виходи, відповідно, індексом k.

Нехай мережа навчається на вибірці (X,Y),=1..p. Активності нейронів позначатимемо малими літерами y з відповідним індексом, а сумарні зважені входи нейронів - малими літерами x.

Загальна структура алгоритму аналогічна до розглянутої в Лекції 4, з ускладненням формул підстроювання ваг.

Таблиця 6.1. Алгоритм зворотного розповсюдження помилки.

Початкові значення ваги всіх нейронів всіх шарів V(t=0) і W(t=0) покладаються випадковими числами.

Мережі пред'являється вхідний образ X, у результаті формується вихідний образ yY. При цьому нейрони послідовно від шару до шару функціонують за такими формулами:

прихований шар

вихідний шар

Тут f(x) - сигмоїдальна функція, яка визначається за формулою (6.1)

Функціонал квадратичної помилки мережі для цього вхідного образу має вигляд:

Цей функціонал підлягає мінімізації. Класичний градієнтний метод оптимізації полягає в ітераційному уточненні аргументу згідно з формулою:

Функція помилки в явному вигляді не містить залежності від ваги Vjk, тому скористаємося формулами неявного диференціювання складної функції:

Тут враховано корисна властивістьсигмоїдальної функції f(x): її похідна виражається тільки через саме значення функції, f'(x) = f(1-f). Таким чином, всі необхідні величини для підстроювання ваги вихідного шару V отримані.

На цьому кроці виконується підстроювання ваги прихованого шару. Градієнтний метод, як і раніше, дає:

Обчислення похідних виконуються за тими самими формулами, крім деякого ускладнення формули для помилки  j .

При обчисленні  j тут і був застосований принцип зворотного розповсюдження помилки: приватні похідні беруться лише за змінними наступногошару. За отриманими формулами модифікуються ваги нейронів прихованого шару. Якщо в нейронній мережі є кілька прихованих шарів, процедура зворотного розповсюдження застосовується послідовно для кожного з них, починаючи з шару, що передує вихідному, і далі шару, що йде за вхідним. При цьому формули зберігають свій вигляд із заміною елементів вихідного шару на елементи відповідного прихованого шару.

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

Як очевидно з опису кроків 2-3, навчання зводиться до розв'язання завдання оптимізації функціоналу помилки градієнтним методом. Вся “сіль” зворотного поширення помилки у тому, що її оцінки для нейронів прихованих шарів можна прийняти зважену суму помилок наступного шару.

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

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

На завершення лекції зробимо зауваження щодо налаштування порогів нейронів. Легко помітити, що поріг нейрона може бути зроблений еквівалентним додатковій вазі, з'єднаній з фіктивним входом, що дорівнює -1. Справді, вибираючи W 0 =, x 0 =-1 і починаючи підсумовування з нуля, можна розглядати нейрон з нульовим порогом та одним додатковим входом:

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

Зворотне поширення помилки - стандартний спосіб навчання нейронної мережі, хоча існують інші методи (про них в одному з наступних розділів). Принцип роботи приблизно такий:

1. Вхідний набір даних, на якому мережа має бути навчена, подається на вхідний шар мережі, та мережа функціонує у нормальному режимі (тобто обчислює вихідні дані).

2. Отримані дані порівнюються з відомими вихідними даними для вхідного набору, що розглядається. Різниця між отриманими та відомими (досвідченими) даними – вектор помилки.


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

4. Потім так само модифікуються вагові коефіцієнти прихованого шару, цього разу порівнюються вихідні сигнали нейронів прихованого шару і вхідні сигнали нейронів вихідного шару, метою даного порівняння є формування вектора помилки для прихованого шару.

5. Нарешті, якщо в мережі існує вхідний шар (саме шар, а не ряд вхідних значень), то проводяться аналогічні дії з ним.

Слід зауважити, що помилка може бути поширена на будь-який бажаний рівень (тобто в нейронній мережі може бути необмежену кількість прихованих шарів, для яких ми розраховуємо вектор помилки за тією ж схемою). Метод зворотного поширення помилки нагадує мені хвилі прибою - вхідні сигнали рухаються у бік вихідного шару (тобто берега), а помилки - у зворотному напрямку (як і морська хвиля змушена зрештою відступити від суші).

Мережа навчається шляхом пред'явлення кожного вхідного набору даних та подальшого поширення помилки. Цей цикл повторюється багато разів. Наприклад, якщо ви розпізнаєте цифри від 0 до 9, спочатку обробляється символ "0", символ "1" і так далі до "9", потім весь цикл повторюється багато разів. Не слід чинити інакше, зокрема, навчати мережу окремо спочатку символу "0" (n-е кількість разів), потім "1", потім "2" і т.д., т.к. мережа виробляє дуже "чіткі" вагові коефіцієнти для останнього вхідного набору (тобто для "9"), "забуваючи" попередні. Наприклад, до тисячного повтору навчання символу "1" втрачаються вагові коефіцієнти для розпізнавання символу "0". Повторюючи весь цикл всього словникового набору вхідних даних, ми припускаємо, кожен символ надає рівноправне впливом геть значення вагових коефіцієнтів.

Запам'ятайте
Позначимо через змінну NUM_HID кількість нейронів у прихованому шарі (нумерація починається з індексу 1). NUM_OUT – кількість нейронів у вихідному шарі.

Зворотне поширення та формули.
А тепер, налаштуйтеся! Я збираюся навести нижче безліч математичних викладок.

    По-перше, ініціалізуємо порогові значення та вагові коефіцієнти невеликими випадковими величинами (не більше 0.4)

    Тепер проженемо мережу в режимі прямого функціонування - процедура run_network (див. попередній розділ)

    Обчислимо помилки вихідного шару. При цьому ми використовуємо таку формулу для кожного i-ого значення вихідного шару (тобто проходимо по всіх вузлах вихідного шару):

    E i = (t i - a i).a i .(1 - a i)

    Тут E i - помилка для i-ого вузла вихідного шару, a i - активність даного вузла, t i - необхідна активність для нього ж (тобто вихідне значення).

    Ось код на паскалі:

    procedure calculate_output_layer_errors; var i: byte; (for loop variable) починається з i: = 1 до NUM_OUT до ol[i] до E: = (desired_output[i] - a) * a * (1 - a) end ;

    Тут видно, чому я ввів змінну для помилки безпосередньо в опис нейрона. Завдяки цьому стає непотрібним створення окремого масиву для значень помилки.

    Наразі ми можемо використовувати значення помилок вихідного шару для визначення помилок у прихованому шарі. Формула практично та сама, але тепер не визначені бажані вихідні значення. - Ми обчислюємо зважену суму значень помилок вихідного шару:

    E i = a i. (1 - a i). S j E j .w ij

    Сенс змінних проти минулої формулою змінився незначно. індекс i використовується для нейронів прихованого шару (а не вихідного), E i , отже, значення помилки для нейрона прихованого шару, а і - сигнал на виході нейрона. Індекс j відноситься до нейронів вихідного шару: wij - вага (ваговий коефіцієнт) зв'язку між i-им прихованим нейроном і j-им вихідним нейроном, а E j - значення помилки для вихідного нейрона j. Підсумовування проводиться для всіх ваг зв'язків між окремо взятим i-им нейроном і всіма нейронами вихідного шару.

    І знову турбо паскаль. Зверніть увагу, що сума включає зважені зв'язки тільки між аналізованим в Наразінейроном прихованого шару та всіма нейронами вихідного шару.

    procedure calculate_hidden_layer_errors; var i,j: byte; sum: real; begin for i: = 1 to NUM_HID do (обраховуємо весь прихований шар) with hl[i] do begin sum: = 0; (sum error values ​​from O/P layer) for j: = 1 to NUM_OUT do sum: = sum + ol [j]. E * ol [j]. w [i] (тільки ваги, що відносяться до нейрону i) E: = a * (1 - a) * sum (no other w value) end; end;
  • Отримані значення помилок для вихідного шару ми використовуємо для зміни вагових коефіцієнтів між прихованим і вихідним шарами. Якщо ж ми обчислимо спочатку вагові коефіцієнти, а потім - значення помилок, то процес навчання застопориться.

    Застосовуємо рівняння:

    new w ij= old w ij+ h.d j .x i

    де w ij- вага зв'язку між нейроном i прихованого шару та нейроном j вихідного, d j- збільшення помилки для вихідного нейрона j і x i- Сигнал на виході прихованого нейрона i, h - константа. Ця константа використовується для того, щоб навчання не проводилося занадто швидко, тобто вагові коефіцієнти не змінювалися надто сильно за один крок навчання (що є причиною стрибків збіжності при навчанні мережі).

    А як щодо порогових рівнів нейронів? Вони також ініціалізуються невеликими випадковими числами та потребують навчання. Порогові рівні трактуються так само, як і вагові коефіцієнти, за винятком того, що вхідні значення для них завжди рівні -1 (знак мінуса - тому що рівні віднімаються під час функціонування мережі):

    New threshold = old threshold + h.d j.(-1)

    або (у зручнішому вигляді):

    New threshold = old threshold - h.d j

    Ця процедура навчає вагові коефіцієнти та порогові рівні:

    У цьому коді я використовував j для індексування вузлів вихідного шару, щоб привести у відповідність до рівняння (тобто E відповідає d j ). Так само hl[i].out відповідає x iа w[i] - w ij .

  • Нарешті ми повинні модифікувати ваги прихованого шару. Насправді, якщо є додаткові шари, наведений код також працює.

    procedure update_hidden_weights; const LEARNING_RATE = 0.025; (немає жодних причин, щоб це значення не відрізнялося від використаного для вихідних вузлів) var i,j: byte; begin for j : = 1 to NUM_HID do (обходимо всі приховані вузли) with hl[j] do begin (Обробляємо всі зв'язки від вхідного шару до цього вузла) for i: = 1 to NUM_INP do w[i]: = w[i] + LEARNING_RATE * E * test_pat[i]; (модифікуємо граничний рівень цього вузла) threshold: = threshold - LEARNING_RATE * E end end;

Все те саме на JAVA
Нижче наведено реалізацію нейронної мережі, що навчається методом зворотного поширення помилки на JAVA:

Якщо вам потрібен початковий текст, то клацніть . Звичайно, змінюйте його як хочете.

Якщо вам потрібний скомпільований код, який ви, звичайно ж, можете включити у свою веб-сторінку, то клацніть .

Мережа, як вона представлена, має фіксовану кількість входів (6) і фіксовану кількість виходів (5). Приховані вузли у середині зображені синіми кружками.

Навчальні набори представлені по лівий бік. Щоб змінити вхідні набори, бажані вихідні набори, клацніть на стовпець із шести вхідних квадратів або на стовпець із п'яти вихідних квадратів. Кожен клік мишею затемняє квадрат (білий – 0, світло-сірий – 0.3, темно-сірий – 0.7, чорний – 1).

Ця комбінація, наприклад, означає, що для вхідного набору встановлено дані (1, 0, 0, 0.3, 0, 0.7), а для вихідного набору - (0, 0, 0.7, 0.7, 0). Клацніть на символ + або - (біля словосполучення "Training patterns"), щоб змінити кількість наборів.

Для того, щоб навчити мережу, натисніть кнопку "Train". Для тестування мережі введіть значення компонента вхідного набору в слот нагорі, а потім натисніть компонент вхідного набору (на одне з тих текстових значеньу рамці зліва на структурній схемі мережі). Запустіть мережу - кнопка "Run"



Останні матеріали розділу:

Як правильно заповнити шкільний щоденник
Як правильно заповнити шкільний щоденник

Сенс читацького щоденника в тому, щоб людина змогла згадати, коли і які книги вона читала, який їх сюжет. Для дитини це може бути своєю...

Рівняння площини: загальне, через три точки, нормальне
Рівняння площини: загальне, через три точки, нормальне

Рівняння площини. Як скласти рівняння площини? Взаємне розташування площин. Просторова геометрія не набагато складніше...

Старший сержант Микола Сиротінін
Старший сержант Микола Сиротінін

5 травня 2016, 14:11 Микола Володимирович Сиротинін (7 березня 1921 року, Орел – 17 липня 1941 року, Кричев, Білоруська РСР) – старший сержант артилерії. У...