Зближення ваг нейронної мережі


10

Я потрапив у ситуацію, коли ваги моєї Нейронної мережі не збігаються навіть після 500 ітерацій. Моя нейронна мережа містить 1 вхідний шар, 1 прихований шар та 1 вихідний шар. Вони містять близько 230 вузлів у вхідному шарі, 9 вузлів у прихованому шарі та 1 вихідний вузол у вихідному шарі. Мені хотілося дізнатись, чи стану я на ранній зупинці (скажімо, припиняю тренування нейронної мережі після 100 ітерацій). Який ефект матиме це на моделі?

Також хотіли дізнатись, яким є галузевий стандарт роботи, якщо ваги в нейронній мережі не збігаються?


Чи нормалізуються ваші дані? Зазвичай це причина такої поведінки.
sashkello

Зазвичай кількість нейрона в прихованому шарі має бути такого ж розміру, ніж у вхідному шарі. Я думаю, що 9 нейронів занадто мало. Ви намагалися збільшити до 200-300 нейронів?
ThiS

@sashkello Так, дані нормалізуються належним чином.
Учень

1
@juampa Немає причини для 9 вузлів у прихованому шарі. ми відчували, що наявність більшої кількості вузлів у прихованому шарі збільшить складність мережі та переобладнає дані.
Учень

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

Відповіді:


13

Ви можете задати ряд питань:

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

Що ви можете дати на шляху ефемерів? Чи можете ви сказати нам щось про характер даних?

Ви могли б створити градієнтне підсилене дерево нейронних мереж.

Ви запитали, що станеться, якщо зупинитись рано.

Ви можете спробувати себе. Запустіть 300x там, де ви починаєте з випадкових ініціалізованих ваг, а потім зупиніться на заданій кількості ітерацій, скажімо, 100. У цей момент обчисліть помилку ансамблю, помилку підмножини тренінгу та помилку набору тестів. Повторіть. Після того, як у вас з'явиться 300 значень, щоб повідомити, що таке помилка, ви можете отримати уявлення про розподіл помилок за 100 ітерацій навчання. Якщо вам подобається, ви можете випробувати цей розподіл за кількома іншими значеннями навчання. Я пропоную 200, 500 та 1000 ітерацій. Це дасть вам уявлення про те, як змінюється ваш SNR з часом. Сюжет підрахунку SNR vs ітерації може дати вам уявлення про "скелі" або "досить добре". Іноді трапляються скелі, де помилка падає. Іноді помилка є прийнятною в той момент.

Для вашої системи потрібні "відносно прості" дані або "досить хороша" удача, щоб послідовно збільшитись за 100 ітерацій. І те, і інше - ні про повторюваність, ні про їх узагальнення.

Чому ви думаєте з точки зору сходження ваг, а не помилки бути нижче певного порогу. Ви коли-небудь чули про парадокс голосування? ( посилання ) Коли у вас є циклічна взаємодія у вашій системі (наприклад, зворотній зв'язок у нейронних мережах), ви можете мати парадокси голосування, пов'язані із змінами. Я не знаю, чи є лише ваги достатнім показником для конвергенції мережі.

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

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

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

Тож як ти дізнаєшся, чи є ти там, де ти "досить хороший"?

Ось короткий тест, який ви могли зробити:

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

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

Ви запитали, що станеться, якщо ваги не збігаються.

Нейронні мережі є одним із інструментів. Вони не єдиний інструмент. Є й інші. Я хотів би поглянути на використання одного з них.

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

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

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

Іноді добре, що вони не сходяться

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

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

Примітка:

Використання лише 500 ітерацій може бути проблемою. У мене були NN, де 10000 повторень ледве вистачало. Кількість ітерацій, які мають бути "достатніми", залежить, як я вже зазначив, від даних, NN-топології, функцій передачі вузлів, функції навчання / навчання і навіть апаратного забезпечення комп'ютера. Ви повинні добре розуміти, як вони взаємодіють з вашим рахунком ітерації, перш ніж сказати, що ітерацій було "достатньо" або "занадто багато". Інші міркування, такі як час, бюджет та те, що ви хочете робити з NN, коли ви закінчите навчання, також слід врахувати.

Chen, RB, Chang, SP, Wang, W., & Wong, WK, (2011, вересень). Оптимальні експериментальні проекти за допомогою методів оптимізації рою частинок (додрук), отримано 25 березня 2012 року з веб-сайту http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf


2

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

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

Щоб детально ознайомитись з технікою та хитрощами торгівлі, подивіться на цей (обов'язково прочитаний) документ від Ян Лекун .


1

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

Одне можливе рішення - використовувати адаптивний оптимізатор, такий як AdaGrad або Adam.

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

Кілька посилань: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA


0

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

Я написав власний C ++ NN-аналізатор, і за допомогою нього я можу змінювати рівень навчання для кожної ваги. Для кожної ваги на кожному краю я роблю дві речі, які допомагають деяким.

По-перше, я помножую кожну швидкість навчання на рівномірно розподілене випадкове число з [0,1]. Я здогадуюсь, що це допомагає при проблемі кореляції.

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

Я не маю особливих обґрунтувань для жодної з цих хитрощів, але вони, здається, працюють досить добре.

Сподіваюсь, це допомагає.

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