Методи налаштування гіперпараметрів при глибокому навчанні

Джаваїд Набі

16 березня 2019 р. · 12 хв читання

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

налаштування

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

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

Градієнтний спуск

Gradient des c ent - це техніка оптимізації, яка зазвичай використовується в навчальних алгоритмах машинного навчання. Основна мета навчання алгоритмів ML - це регулювання ваг w, щоб мінімізувати втрати або витрати. Ця вартість є мірою того, наскільки добре працює наша модель, ми представляємо цю вартість J (w). Таким чином, мінімізуючи функцію витрат, ми можемо знайти оптимальні параметри, що забезпечують найкращі показники моделі [1].

Типовий графік функцій втрат для проблем регресії має форму чаші, як показано нижче.

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

Якщо ми позначимо dw і db як градієнти для оновлення наших параметрів W і b для алгоритму градієнтного спуску наступним чином:

Якщо рівень навчання невеликий, то навчання є більш надійним, але це займе багато часу, тому що кроки до мінімуму функції втрат є незначними.

Якщо рівень навчання високий, то навчання може не збігатися і навіть не розходитися. Зміни ваги можуть бути настільки великими, що оптимізатор перевищує мінімум і погіршує втрати. Таким чином, наша мета - знайти оптимальний рівень навчання, який може швидко знайти мінімальну втрату.

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

Залежно від того, де куля починає котитися, вона може спиратися на дно долини. Але не в найнижчому. Це називається локальним мінімумом. Те, як ми ініціалізуємо вагові коефіцієнти моделі, може призвести її до спокою в локальному мінімумі. Щоб уникнути цього, ми ініціалізуємо весові вектори значеннями з випадкового розподілу.

Ми можемо представити поверхню втрат у 2-D, як показано нижче:

Червона крапка - це глобальні мінімуми, і ми хочемо досягти цієї точки. Використовуючи градієнтний спуск, оновлення виглядатимуть так:

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

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

Щоб допомогти нам досягти того, що ми використовуємо Gradient Descent with Momentum [2].

Ми починаємо з нашого градієнтного спуску:

За імпульсом, замість використання dw і db незалежно для кожної епохи, ми беремо експоненціально зважені середні значення dw і db.

Де бета «β» - це ще один гіперпараметр, який називається імпульсом, і коливається від 0 до 1. Він встановлює вагу між середнім значенням попередніх значень і поточним значенням для обчислення нового середньозваженого.

Після обчислення експоненційно зважених середніх показників ми оновимо наші параметри.

Використовуючи експоненціально зважені середні значення dw і db, ми прагнемо усереднити коливання у вертикальному напрямку ближче до нуля. Тоді як у горизонтальному напрямку всі похідні вказують праворуч від горизонтального напрямку, тому середнє значення в горизонтальному напрямку все ще буде досить великим. Це дозволяє нашому алгоритму взяти більш прямий прямий шлях до локальних оптимумів і згладити вертикальні коливання. З цієї причини алгоритм потрапляє до локальних оптимумів з кількома ітераціями.

Мати інтуїцію того, як це працює, означає розглянути приклад кулі, яка котиться вниз з пагорба - Vᵈʷ і Vᵈᵇ забезпечують швидкість руху цієї кульки та змушують її рухатися швидше. Ми не хочемо, щоб наша куля настільки прискорювалася, що вона пропускає глобальні мінімуми, а отже β діє як тертя.

Існує три способи градієнтного спуску:

Пакетний градієнтний спуск: ‘

  • всі приклади одночасно: використовує всі навчальні екземпляри для оновлення параметрів моделі в кожній ітерації.
  • повільно сходиться з точними оцінками градієнта помилок.

Стохастичний градієнтний спуск (SGD):

  • один приклад за раз: Оновлює параметри, використовуючи лише один навчальний екземпляр у кожній ітерації. Навчальний екземпляр зазвичай вибирається випадковим чином.
  • швидко сходиться з шумними оцінками градієнта помилок.

Мініатюрний градієнтний спуск:

  • Приклади «b»: Замість використання всіх прикладів, Mini-batch Gradient Descent розділяє навчальний набір на менший розмір, який називається batch, що позначається «b». Таким чином, міні-пакет «b» використовується для оновлення параметрів моделі на кожній ітерації.

Мініатюрний градієнтний спуск прагне знайти баланс між стійкістю стохастичного градієнтного спуску та ефективністю пакетного градієнтного спуску.

Мініатюрний градієнтний спуск - найпоширеніша реалізація градієнтного спуску, що використовується в галузі глибокого навчання. Недоліком Mini-batch є те, що він додає додатковий гіперпараметр “batch size” або “b” для алгоритму навчання.

Пошук сітки

Під час пошуку в сітці [3] ми пробуємо всі можливі конфігурації параметрів.

  • Визначте сітку з n розмірностей, де кожна з цих карт позначає гіперпараметр. напр. n = (швидкість_навчання, розмір_партії)
  • Для кожного виміру визначте діапазон можливих значень: напр. розмір_партії = [4, 8, 16, 32], швидкість_навчання = [0,1, 0,01, 0,0001]
  • Шукайте всі можливі конфігурації та чекайте результатів, щоб встановити найкращу: напр. C1 = (0,1, 4) -> відповідно = 92%, C2 = (0,01, 4) -> відповідно = 92,3% тощо ...

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

Випадковий пошук

Випадковий пошук [4] робить випадковий пошук на кроці 1, щоб випадково вибрати точку з простору конфігурації. Інтуїція того, як це працює краще, полягає в тому, що ми можемо ширше досліджувати простір гіперпараметрів за допомогою Випадкового пошуку (особливо для більш важливих змінних). Це допоможе нам знайти найкращу конфігурацію за меншу кількість ітерацій. Наприклад, дивіться зображення нижче:

У макеті сітки легко помітити, що, навіть якщо ми навчили 9 (n = 3) моделей, ми використовували лише 3 значення для змінної. Тоді як при випадковому макеті надзвичайно малоймовірно, що ми будемо обирати одні й ті ж змінні більше одного разу. Зрештою, з другим підходом ми навчимо 9 моделей, використовуючи 9 різних значень для кожної змінної. Для детального аналізу Grid vs Random, будь ласка, зверніться до цієї статті.

Хоча випадковий пошук працює ефективніше, ніж пошук у сітці, обидва ці підходи все ще обчислювально дорогі та трудомісткі. У 2018 році Леслі Н. Сміт вийшов з докладним звітом про різні підходи до визначення оптимальних гіперпараметрів у його класиці папір . Ми швидко пройдемо підхід, запропонований Смітом [5]. Підхід заснований на пошуку балансу між недооснащенням та переоснащенням шляхом вивчення втрат на перевірку/перевірку тренувань щодо підказок недооснащення та переобладнання з метою досягнення оптимального набору гіперпараметрів.

Процес налаштування гіперпараметрів - це натяжний шлях для досягнення балансу між недооснащенням та переобладнанням.

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

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

Підхід

  1. Дотримуйтесь та розумійте підказки, доступні під час навчання, контролюючи перевірку/втрату тесту На початку тренінгу налаштуйте свою архітектуру та гіперпараметри на короткі проміжки кількох епох.
  2. Ознаки недообладнанняабо переобладнаннявтрати тесту або перевірки на початку тренувального процесу корисні для налаштування гіперпараметрів.

Швидкість навчання (LR)

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

Експерименти Леслі показують, що зміна швидкості навчання під час навчання є загалом корисною, і, отже, пропонує циклічно змінювати швидкість навчання в межах діапазону значень, а не встановлювати його на фіксовану величину. Суть цієї політики щодо рівня навчання випливає із спостереження, що збільшення рівня навчання може мати короткочасний негативний ефект і все ж досягти більш довгострокового корисного ефекту. Це спостереження приводить до ідеї дозволити швидкості навчання змінюватися в межах діапазону значень, а не приймати поетапне, фіксоване або експоненціально зменшується значення. Тобто встановлюється мінімальна та максимальна межі, і швидкість навчання циклічно змінюється між цими межами.

Як можна оцінити розумні мінімальні та максимальні граничні значення?

Тест діапазону LR: Запустіть свою модель протягом декількох епох, дозволяючи швидкості навчання лінійно зростати між низькими та високими значеннями LR. Цей тест надзвичайно цінний, коли ви стикаєтеся з новою архітектурою або набором даних. Для дрібної 3-шарової архітектури велике значення становить 0,01, тоді як для реснет - велике значення 3,0, ви можете спробувати більше одного.

Використовуючи 1-циклічну політику LR з максимальною швидкістю навчання, визначеною на основі тесту діапазону LR, мінімальна швидкість навчання як десята частина максимальної, здається, працює добре [6].

Розмір партії

На відміну від гіперпараметра швидкості навчання, коли його значення не впливає на обчислювальний час, розмір партії повинен досліджуватися у поєднанні з часом виконання навчання. Розмір партії обмежений пам’яттю вашого обладнання, тоді як швидкість навчання - ні. Леслі рекомендує використовувати розмір партії, який відповідає пам’яті вашого обладнання, і дозволяти використовувати більші показники навчання.

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

Циклічний імпульс

Імпульс і швидкість навчання тісно пов’язані. Оптимальна швидкість навчання залежить від імпульсу, а імпульс - від швидкості навчання. Оскільки швидкість навчання розглядається як найважливіший гіперпараметр для настройки, тоді також важливий імпульс. Як і темпи навчання, цінним є встановлення якнайбільшого імпульсу, не викликаючи нестабільності під час навчання.

Процедура пошуку комбінації Швидкість та Імпульс навчання

  • Використання курсу циклічного навчання: Оптимальна процедура навчання - це поєднання зростаючого циклічного темпу навчання, де початковий малий рівень навчання дозволяє почати збіжність, і зменшуваного циклічного моменту, коли зменшується імпульс дозволяє швидкості навчання збільшуватися на ранніх до середніх частинах навчання . Використання зменшуваного циклічного імпульсу при збільшенні рівня навчання забезпечує швидшу початкову конвергенцію та стабілізує навчання, щоб забезпечити більші темпи навчання.

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

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

З циклічною швидкістю навчання або постійною швидкістю навчання гарною процедурою є перевірка значень імпульсу в діапазоні від 0,9 до 0,99 і вибір значення, яке найкраще працює.

Зниження ваги

Розпад ваги є однією з форм регуляризації, і він відіграє важливу роль у навчанні, тому його значення потрібно правильно встановити [7]. Зниження ваги визначається як множення кожної ваги в градієнтному спуску в кожну епоху на коефіцієнт λ [0 циклічний спад ваги не корисний).

Якщо ви не уявляєте розумного значення для зменшення ваги, протестуйте 1/10³, 1/10⁴, 1/10⁵ і 0. Менші набори даних та архітектури вимагають більших значень для зменшення ваги, тоді як більші набори даних та більш глибокі архітектури вимагають менші значення. Наша гіпотеза полягає в тому, що складні дані забезпечують власну регуляризацію, а інші регуляризації слід зменшити.

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