Відповідь на ваше запитання .. (починається тут)
Коли нам дають завдання глибокого навчання, скажімо, таке, яке передбачає навчання конволюційної нейронної мережі (Covnet) на наборі даних, нашим першим інстинктом було б навчати мережу з нуля. Однак на практиці такі глибокі нейронні мережі, як Covnet, мають величезну кількість параметрів, часто в межах мільйонів. Навчання Covnet на невеликому наборі даних (той, який менший за кількістю параметрів) сильно впливає на здатність Covnet узагальнювати, що часто призводить до перевиконання.
Тому, частіше на практиці, можна вдосконалити існуючі мережі, які навчаються на великому наборі даних, як ImageNet (зображення з міткою 1.2M), продовжуючи його тренування (тобто запуск зворотного розповсюдження) на менший набір даних, який ми маємо. За умови, що наш набір даних різко не відрізняється за контекстом до початкового набору даних (наприклад, ImageNet), заздалегідь підготовлена модель вже засвоїла функції, що відповідають нашої власної проблеми класифікації.
Загалом, якщо наш набір даних різко не відрізняється від контексту набору даних, на якому тренується попередньо підготовлена модель, ми повинні вдатися до тонкої настройки. Заздалегідь підготовлена мережа на великому та різноманітному наборі даних, як ImageNet, фіксує універсальні функції, такі як криві та ребра у своїх ранніх шарах, які є актуальними та корисними для більшості проблем класифікації.
Звичайно, якщо наш набір даних представляє якийсь дуже специфічний домен, скажімо, медичні зображення або китайські рукописні символи, і що заздалегідь підготовлених мереж на такому домені не знайти, ми повинні розглянути можливість підготовки мережі з нуля.
Ще одне занепокоєння полягає в тому, що якщо наш набір даних невеликий, точна настройка заздалегідь підготовленої мережі на невеликому наборі даних може призвести до переозброєння, особливо якщо останні кілька шарів мережі є повністю зв'язаними шарами, як у випадку з мережею VGG. Якщо говорити з мого досвіду, якщо у нас є кілька тисяч необроблених зразків, із застосованими загальними стратегіями збільшення даних (переклад, обертання, гортання тощо), точна настройка зазвичай дасть нам кращий результат.
Якщо наш набір даних насправді невеликий, скажімо, менше тисячі зразків, кращим підходом є отримання виходу проміжного шару перед повністю пов'язаними шарами як функції (вузькі місця) та тренування лінійного класифікатора (наприклад, SVM) поверх це. SVM особливо добре малює межі рішення на невеликому наборі даних.
Поширена практика полягає у врізанні останнього шару (шару softmax) заздалегідь підготовленої мережі та заміни його на наш новий шар softmax, який відповідає нашій власній проблемі. Наприклад, заздалегідь підготовлена мережа в ImageNet постачається з softmax шаром з 1000 категорій.
Якщо наше завдання - класифікація на 10 категорій, новий рівень softmax мережі буде складатися з 10 категорій замість 1000 категорій. Потім ми запускаємо розповсюдження в мережі для тонкої настройки попередньо підготовлених ваг. Переконайтеся, що виконується перехресне підтвердження, щоб мережа змогла добре узагальнити.
Використовуйте менший коефіцієнт навчання для навчання мережі. Оскільки ми очікуємо, що попередньо підготовлені ваги будуть досить хорошими вже порівняно з випадково ініціалізованими вагами, ми не хочемо їх спотворювати занадто швидко і занадто сильно. Поширена практика - зробити початковий рівень навчання в 10 разів меншим, ніж той, який використовується для тренувань з подряпин.
Також поширена практика заморожування ваг перших кількох шарів попередньо підготовленої мережі. Це тому, що перші кілька шарів охоплюють такі універсальні особливості, як криві та ребра, які також стосуються нашої нової проблеми. Ми хочемо зберегти ці ваги недоторканими. Натомість, ми змусимо мережу зосередитись на вивченні особливостей, пов'язаних із набором даних, у наступних шарах.
У цьому випадку вам потрібно знову навчити їх так, як ніби я не помиляюся, то шпалери не є класом моделей Image-net. Це не складе труднощів побудувати модель з нуля (бажано, щоб це було дрібніше також зробіть тут ..)