Чи можна тренувати нейронну мережу поступово?


23

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

Як я можу поетапно тренувати НН, тобто не забуваючи попередньо набуту інформацію протягом попередніх етапів навчання?

Відповіді:


10

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

Сучасним ConvNets потрібно тривати 2-3 тижні, щоб пройти навчання декількох графічних процесорах на ImageNet. Тому звичайно бачити, як люди випускають свої остаточні контрольно-пропускні пункти ConvNet на користь інших, які можуть використовувати мережі для тонкої настройки. Наприклад, у бібліотеці Caffe є модельний зоопарк, де люди діляться своїми мережевими вагами.

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

Слід пам’ятати про декілька речей, які здійснюють трансферне навчання :

  • Обмеження попередньо перевірених моделей. Зауважте, що якщо ви хочете використовувати мережу, що перевіряється, ви можете бути дещо обмежені з точки зору архітектури, яку ви можете використовувати для нового набору даних. Наприклад, ви не можете довільно витягувати шари Conv з попередньо перевіреної мережі. Однак деякі зміни прямолінійні: завдяки спільному доступу до параметрів можна легко запустити попередньо перевірену мережу на зображеннях різної просторової величини. Це чітко видно у випадку шарів Conv / Pool, оскільки їх функція перемоги не залежить від просторового розміру вхідного об'єму (до тих пір, поки «підходять»).

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

Додаткова довідка, якщо вас цікавить ця тема: Наскільки передані функції в глибоких нейронних мережах?


Трансферне навчання - не єдиний спосіб виконання поступового навчання.
nbro

7

Ось один із способів ви могли це зробити.

Навчивши свою мережу, ви можете зберегти її ваги на диску. Це дозволяє завантажувати цю вагу, коли нові дані стають доступними та продовжувати тренуватись майже з того місця, де закінчився ваш останній тренінг. Однак, оскільки ці нові дані можуть надходити з додатковими класами, тепер ви здійснюєте попередню підготовку або точну настройку в мережі з попередньо збереженими вагами. Єдине, що вам потрібно зробити, це зробити так, щоб останній шар (и) вміщував нові класи, які тепер були введені з появою нового нового набору даних, головне, щоб включити додаткові класи (наприклад, якщо ваш останній шар) спочатку було 10 класів, а тепер ви знайшли ще 2 класи, як частину вашої попередньої підготовки / тонкої настройки ви замінюєте її на 12 класів). Коротше, повторіть це коло:

Повторіть


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