Чи повинні нейронні мережі завжди сходитись?


16

Вступ

Крок перший

Я написав стандартну нейромережу, що працює на зворотному ходу, і, щоб перевірити її, я вирішив створити її на карті XOR.

Це мережа 2-2-1 (з функцією активації tanh)

X1  M1
        O1
X2  M2

B1  B2

З метою тестування я вручну встановив верхній середній нейрон (M1) як ворота AND, а нижній нейрон (M2) - ворота АБО (обидва вихідні 1, якщо істинні, і -1, якщо помилкові).

Тепер я також вручну налаштував з'єднання M1-O1 на -5, M2-O1 на 1, а B2 на -75

Отже, якщо M1 = 1 і M2 = 1, сума дорівнює (-0,5 +1 -0,75 = -,25) tanh (0,25) = -0,24

якщо M1 = -1 і M2 = 1, сума дорівнює ((-0.5) * (- 1) +1 -0.75 = .75) tanh (0.75) = 0.63

якщо M1 = -1 і M2 = -1, сума дорівнює ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8

Це порівняно хороший результат для "першої ітерації".

Крок другий

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

Для тестування я встановив, що ваги будуть і .5 .4 .3 (відповідно для M1, M2 та зміщення)

Тут, однак, у мене виникають проблеми.


Моє запитання

Я встановив рівень навчання 2 і дозволю програмі повторювати дані тренувань (ABA ^ B) на 10000 ітерацій або більше.

Більшу частину часу ваги сходяться до хорошого результату. Однак часом такі ваги сходяться до (скажімо) 1,5, 5,7 та .9, що призводить до виведення +1 (рівного) до входу {1, 1} (коли результат повинен бути -1).

Чи можливий порівняно простий ANN, який має рішення взагалі не збігатися або є помилка в моїй реалізації?

Відповіді:


13

(Я припускаю, що під "поширенням помилок" ви маєте на увазі те, що я називаю " повернення помилок - розмноження.")

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

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

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

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


Всі ваги збільшуються (вага для АБО нейрона збільшується швидше), що мінімізує помилку при введенні {1,0}, {0,1}, {0,0}, але максимізує помилку, коли {1,1}. Це проблема з он-лайн навчанням через пакетне навчання?

@Shmuel: і онлайн, і партія збираються в напрямку градієнта. Якщо цей градієнт в неправильному напрямку, вони обидва йдуть у неправильному напрямку. Сторінка Вікіпедії на Скелелазіння на Хілл має деякі способи обійти це, якщо вас цікавить.
Xodarap

6

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.