Основи нейронних мереж щодо ваг; Упередження

Навчання нейронних мереж може дуже заплутати. Що таке хороший рівень навчання? Скільки прихованих шарів має мати ваша мережа? Чи справді корисний відсів? Чому ваші градієнти зникають?
У цьому дописі ми розв’яжемо завісу за деякими найбільш заплутаними аспектами нейронних мереж і допоможемо прийняти розумні рішення щодо архітектури нейронної мережі.
Ми також побачимо, як ми можемо використовувати ваги та відхилення всередині ядер Kaggle для контролю ефективності та вибору найкращої архітектури для нашої нейронної мережі!
Я настійно рекомендую розігнати це ядро і пограти з різними будівельними блоками, щоб відточити свою інтуїцію.
Якщо у вас є якісь запитання, не соромтеся надсилати мені повідомлення. Удачі!
1. Основна структура нейронної мережі
- Це кількість функцій, яку використовує ваша нейронна мережа для прогнозування.
- Вхідному вектору потрібен один вхідний нейрон на ознаку. Для табличних даних це кількість відповідних функцій у вашому наборі даних. Ви хочете ретельно відібрати ці функції та видалити будь-які, що можуть містити шаблони, які не узагальнюватимуть за межі навчального набору (і спричинять переобладнання). Для зображень це розміри вашого зображення (28 * 28 = 784 у випадку MNIST).
- Це кількість передбачень, які ви хочете зробити.
- Регресія: для завдань регресії це може бути одне значення (наприклад, ціна житла). Для багатоваріантної регресії це один нейрон на передбачуване значення (наприклад, для обмежуючих блоків це може бути 4 нейрони - по одному для обмеження висоти, ширини, координати x, координати y).
- Класифікація: Для двійкової класифікації (спам, а не спам) ми використовуємо один вихідний нейрон на позитивний клас, де вихід представляє ймовірність позитивного класу. Для багатокласової класифікації (наприклад, при виявленні об’єктів, де екземпляр може бути класифікований як автомобіль, собака, будинок тощо), ми маємо по одному вихідному нейрону на клас і використовуємо функцію активації softmax на вихідному рівні, щоб забезпечити остаточна сума ймовірностей до 1.
Приховані шари та нейрони на приховані шари
- Кількість прихованих шарів сильно залежить від проблеми та архітектури вашої нейронної мережі. Ви, по суті, намагаєтесь пробитися в ідеальну нейромережеву архітектуру - не надто великий, не надто маленький, в самий раз.
- Як правило, 1-5 прихованих шарів допоможуть вам вирішити більшість проблем. Працюючи з даними зображень або мови, ви хотіли б, щоб у вашій мережі були десятки-сотні шарів, не всі з яких можуть бути повністю зв’язані. Для цих випадків використання існують попередньо навчені моделі (YOLO, ResNet, VGG), які дозволяють використовувати великі частини їхніх мереж і навчати свою модель поверх цих мереж, щоб вивчати лише функції вищого порядку. У цьому випадку ваша модель все одно матиме лише кілька шарів для тренування.
- Взагалі використання однієї кількості нейронів для всіх прихованих шарів буде достатнім. Для деяких наборів даних наявність великого першого шару та подальшого його використання за меншими шарами призведе до кращої продуктивності, оскільки перший шар може вивчити багато функцій нижчого рівня, які можуть перейти до кількох функцій вищого порядку в наступних шарах.
- Зазвичай ви отримуєте більший приріст продуктивності, додаючи більше шарів, ніж додаючи більше нейронів у кожному шарі.
- Я б рекомендував починати з 1-5 шарів і 1-100 нейронів і повільно додавати більше шарів і нейронів, поки ви не почнете переобладнання. Ви можете відстежувати свої втрати та точність на своїй інформаційній панелі Weights and Biases, щоб побачити, які приховані шари + приховані нейрони комбінують найкращі втрати.
- Щось, про що слід пам’ятати, вибираючи меншу кількість шарів/нейронів, це те, що якщо це число занадто мало, ваша мережа не зможе вивчити основні закономірності ваших даних і, отже, буде марною. Підхід для протидії цьому полягає в тому, щоб почати з величезної кількості прихованих шарів + прихованих нейронів, а потім використовувати відсівання та ранню зупинку, щоб зменшити розмір нейронної мережі для вас. Знову ж таки, я б рекомендував спробувати кілька комбінацій і відстежити ефективність роботи на Вашій панелі ваг та відхилень, щоб визначити ідеальний розмір мережі для вашої проблеми.
- Андрій Карпаті також рекомендує надмірне спорядження, а потім регулюйте підхід - „спочатку отримайте модель, достатньо велику, щоб вона могла переобладнатися (тобто зосередити увагу на втраті тренувань), а потім регулювати її належним чином (відмовитися від деяких втрат під час навчання, щоб покращити втрату під час перевірки).“
- Регресія: Середня квадратична похибка є найпоширенішою функцією втрат для оптимізації, якщо немає значної кількості викидів. У цьому випадку використовуйте середню абсолютну помилку або втрату Губера.
- Класифікація: перехресна ентропія в більшості випадків буде вам корисна.
- Великі розміри партій можуть бути чудовими, оскільки вони можуть використовувати потужність графічних процесорів для обробки більшої кількості навчальних екземплярів за раз. OpenAI виявив, що більший розмір партії (від десятків тисяч для моделювання мов класифікації зображень В та В та мільйонів у випадку RL-агентів) добре слугує для масштабування та паралелізації.
- Однак є також футляр для менших розмірів партії. Згідно з цією роботою Masters та Luschi, перевага, отримана завдяки збільшенню паралельності від запуску великих пакетів, компенсується збільшенням узагальнення продуктивності та меншим обсягом пам'яті, досягнутим меншими партіями. Вони показують, що збільшені розміри партій зменшують прийнятний діапазон темпів навчання, що забезпечує стабільну конвергенцію. Їх винос полягає в тому, що менший, насправді, кращий; і що найкращі показники забезпечуються розмірами міні-партій від 2 до 32.
- Якщо ви не працюєте на масштабних масштабах, я б рекомендував починати з менших розмірів партії та повільно збільшувати розміри та ефективність моніторингу на вашій панелі ваг та відхилень, щоб визначити найкращу відповідність.
Кількість епох
- Я б рекомендував починати з великої кількості епох і використовувати Дочасне зупинення (див. Розділ 4. Зникаючі + Вибухові градієнти), щоб припинити навчання, коли продуктивність перестає покращуватися.
Масштабування ваших функцій
- Коротке зауваження: Перш ніж використовувати їх як вхідні дані до нейронної мережі, переконайтесь, що всі ваші функції мають подібний масштаб. Це забезпечує більш швидку конвергенцію. Коли ваші функції мають різні масштаби (наприклад, зарплати у тисячах років та досвід у десятках), функція витрат буде виглядати як витягнута чаша зліва. Це означає, що вашому алгоритму оптимізації знадобиться багато часу, щоб пройти долину порівняно із використанням нормалізованих функцій (праворуч).