Дві проблеми на обох кінцях навчання [BLOCK_TYPE SECTION/STEP]
Проблема на ранніх кроках: свіжі ваги не можуть робити великі кроки
[BLOCK_TYPE SECTION/STEP]На кроці 0 кожна вага починається як невелике випадкове число, вибране з розподілу, близького до нуля. Активації залишаються близькими до нуля. Градієнти майже не несуть інформації про остаточне рішення. Застосування пікової швидкості навчання до цих градієнтів змушує модель стрибати далеко від початкових значень у напрямках, які не кодують значущу структуру. [BLOCK_TYPE SECTION/STEP]
[BLOCK_TYPE SECTION/STEP]
ANDREA-120M v1 припустилася цієї помилки. Без розігріву. На кроці 1 використовувалася lr = 0.0003 на щойно ініціалізованих вагах. Результат: модель потрапила в поганий параметричний басейн протягом кількох сотень кроків. Значення втрат виглядали прийнятними; зразки почали повторювати цикли до кроку 80K і ніколи не відновилися.
Проблема на пізніх етапах: Великі кроки не можуть відшліфувати рішення
До кроку 100K модель уже засвоїла грубу структуру. Градієнти тепер несуть дрібнозернистий сигнал: які ваги токенів потребують невеликого коригування, яку голову уваги потрібно трохи збалансувати. Застосування максимальної швидкості навчання на цьому етапі перевищує кожне дрібне коригування, викликаючи коливання навколо оптимуму без стабілізації.
Дві проблеми на протилежних кінцях навчання. Один графік, дві зони: плавне наростання, плавне зменшення.
Лінійне розігрівання: перші 2000 кроків
Формула
ANDREA-120M v2 використовує лінійне розігрівання протягом 2000 кроків:
lr(t) = lr_scheduled(t) * min(1, (t + 1) / warmup_steps)
де t — номер кроку (нумерація з 0), warmup_steps = 2000, а lr_scheduled(t) — значення, яке задає косинусний графік, якщо ігнорувати розігрів.
Пояснення формули:
- При t = 0: lr = lr_scheduled(0) min(1, 1/2000) = lr_scheduled(0) 0.0005. Дуже маленький перший крок.
- При t = 1000: lr = lr_scheduled(1000) min(1, 1001/2000) = lr_scheduled(1000) 0.5. Половина сили.
- При t = 2000: lr = lr_scheduled(2000) min(1, 2001/2000) = lr_scheduled(2000) 1.0. Повна сила.
- При t > 2000: clamp тримає множник на 1, розігрів більше не впливає, cosine decay працює самостійно.
Лінійне зростання від нуля дає моделі 2000 кроків для формування грубих уявлень, перш ніж AdamW та gradient clipping отримають оновлення повної сили. До кроку 2000 ваги вже достатньо змінилися, тому пік lr не виштовхує їх у погану область.
Обчислення LR під час Warmup
Косинусне згасання після розігріву
Крива
Після завершення розігріву на кроці 2000 швидкість навчання слідує косинусній кривій від піку до нуля протягом решти кроків:
lr(t) = lr_min + (lr_peak - lr_min) 0.5 (1 + cos(pi * progress))
де progress = (t - warmup_steps) / (total_steps - warmup_steps). При progress = 0 (відразу після warmup), cos(0) = 1, lr = peak. При progress = 1 (останній крок), cos(pi) = -1, lr = lr_min (зазвичай 0 або дуже мала нижня межа).
Чому косинус, а не лінійний чи експоненціальний?
Косинусне згасання починається повільно (крива майже плоска біля піку), прискорюється в середині, а потім знову сповільнюється біля нуля. Три переваги:
1. Плато біля піку. Перші кроки після warmup все ще отримують майже повний lr, дозволяючи моделі використовувати довгий період високого learning rate для побудови представлень.
2. Плавний перехід через середину. Немає різких стрибків, які має поглинати AdamW.
3. Плато біля нуля. На останніх кроках lr стає дуже малим для тонкого доопрацювання, подібно до симульованого відпалу.
ANDREA-120M тренується загалом 200K кроків; 198K з них припадають на область косинусного згасання після 2000-крокового розігріву.
Теплий перезапуск ANDREA-12M на кроці 25K
Плато
ANDREA-12M тренувалася 60K кроків з косинусним згасанням від піку lr = 0.0004. Близько кроку 22K втрата вийшла на плато з EMA ~2.4. Косинусне згасання знизило lr до ~0.00015. Бандит продовжував подавати різноманітні дані; модель перестала покращуватися.
Діагноз: lr занадто сильно зменшився, і модель не могла вийти з поточної улоговини. Дані Hermes мали незабаром увійти в навчальну програму (крок 25K), додаючи 590K нових розмов. Моделі потрібна була енергія, щоб поглинути цей шок даних.
Перезапуск
На кроці 25K розклад виконав теплий перезапуск: стрибок lr з 0.00015 (зменшене) назад до 0.0004 (початковий пік), а потім продовження косинусного зменшення на решту кроків.
Loshchilov & Hutter (2017) назвали цю техніку «SGDR» (стохастичний градієнтний спуск із теплими перезапусками). Інтуїція: високий lr додає достатньо кінетичної енергії, щоб вийти з локальної улоговини та дослідити сусідні; подальше косинусне зменшення повторно відпалює модель у кращу улоговину.
Результат. EMA втрат зменшилася з 2.40 до 2.10 за наступні 10K кроків після перезапуску. Модель була випущена на кроці 43.6K з втратою SMMA 2.0, демонструючи когерентну структуру черги запитань-відповідей.
ANDREA-120M v2 вирішила НЕ використовувати теплі перезапуски: маючи 200K кроків і значно більшу кількість параметрів, плавне монотонне зменшення забезпечило стабільнішу збіжність. Перезапуск найкраще працює, коли тренування коротке і плато збігається з відомим зсувом даних.
Діагностика невдачі v1
Вибір розкладу на практиці
Суміжні активності
Три споріднені посилання на LR-розклад:
- Activity 10: AdamW. Розігрів дає корекції зміщення AdamW час стабілізуватися. Без розігріву 10-кратне посилення на кроці 1 множить будь-який шум, який несуть градієнти; з розігрівом множник потрапляє на реальний сигнал.
- Activity 12: Gradient clipping. Обрізання обмежує L2-норму градієнта значенням 1.0 ДО AdamW. Розігрів послаблює lr; обрізання послаблює g. Разом вони роблять ранні кроки безпечними навіть на нестабільних навчальних програмах.
- Activity 22: Checkpointing. Теплий перезапуск потребує завантаження стану оптимізатора (m, v, лічильник кроків) із чекпойнту, а потім зміни розкладу під час виконання. Перезапуск ANDREA-12M на кроці 25K демонструє це; знадобилося дві спроби, щоб правильно реалізувати логіку завантаження стану.
Розклад, оптимізатор і обрізання градієнтів утворюють трикутник стабільності. Якщо прибрати одну вершину, ANDREA повторить свій колапс v1.