Як покращити стабільність нейронної мережі?


11

Я використовую Neuralnet в R, щоб побудувати мережу NN з 14 входами і одним виходом. Я будую / треную мережу кілька разів, використовуючи одні й ті ж вхідні дані навчання та ті ж мережеві архітектури / налаштування.

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

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


Чи можете ви надати трохи детальніше про алгоритм навчання та архітектуру, який ви (або пакет R) використовували? Скільки шарів має NN?
— Лукас

Привіт Лукас, я використовую neuralnet R пакет посилання , яка має хорошу пояснювальну статтю тут посилання . Я використовую один прихований шар з 8 нейронів. Алгоритм навчання - це пружне розмноження із зворотним відстеженням ваги.
— tfb

Відповіді:


8

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

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

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

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


Цікаво, що я переключив тренування мережі на функцію 'nnet' (доступна в однойменному пакеті), і результати на тестовому наборі даних стали набагато стійкішими - можливо, щось пов'язане з іншим способом ваги ініціалізований між двома пакетами?
— tfb

У nnetпочаткових вагах усі ініціалізуються на рівномірне випадкове число між -0,7 і 0,7, якщо я правильно пам'ятаю. І ви можете контролювати величину в параметрі. Я чесно мав міцну удачу з nnetпакетом і ніколи не пробував жодного з інших варіантів. Удачі!
— Ши Паркс

1

Я не працював з R, тому можу дати лише більш загальні поради.

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

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


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

@SheaParkes дякую за коментарі та відповіді Ши. Я фактично використовую пакет neuralnet - дивіться коментар вище. Він використовує пружний алгоритм зворотного розповсюдження з
— зворотним

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