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


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.