складність 2/5 Безкоштовно
Gradient descent
Раз у раз робити крок у напрямку найшвидшого спадання втрат, на величину, задану темпом навчання, — алгоритм, що лежить в основі майже всього навчання моделей.
Інтуїція
Ви десь на поверхні втрат і хочете дістатися дна. Ви його не бачите. Обчислити ви можете нахил там, де стоїте.
Отже: подивіться на нахил, зробіть крок униз, подивіться знову. Повторюйте. Це весь алгоритм, і саме він навчає майже кожну модель, яку ви зустрінете. Його сила в тому, що йому не потрібен загальний огляд — лише локальний нахил, знову й знову.
Формальне визначення
Кожна ітерація віднімає від поточних параметрів градієнт, помножений на темп навчання η. Мінус стоїть тому, що градієнт указує вгору; η вирішує, наскільки йому довіряти.
Звичайний градієнтний спуск обчислює градієнт по всьому навчальному набору перед кожним оновленням — середнє градієнтів усіх прикладів, ціною, що зростає лінійно з кількістю прикладів [1, §12.4.1]. Тому його ще називають batch gradient descent [1, §12.5].
Як це працює
Уся складність — у темпі навчання. Замалий — і поступ льодовиковий: кожен крок безпечний, але їх потрібні тисячі. Завеликий — і крок перестрибує мінімум, приземляється вище на протилежному схилі й може розбігтися [1, §12.3.1.1]. Коли навчання розбігається, темп навчання — перше, що варто перевірити.
Гарантії збіжності існують, але стосуються опуклих функцій, де будь-який локальний мінімум є глобальним [1, §12.2.2.1]. Втрати нейронних мереж не опуклі, тож на практиці градієнтний спуск знаходить якийсь добрий мінімум, а не той самий. І цього виявляється досить частіше, ніж обіцяє теорія: «експерти нині підозрюють, що для досить великих нейронних мереж більшість локальних мінімумів мають низьке значення функції вартості» [2, §8.2.2].
Де застосовується
- Як базовий алгоритм. SGD, мінібатчевий SGD, momentum і Adam — усе це модифікації цього правила оновлення.
- Опуклі задачі. Логістична регресія та лінійні SVM, де гарантії справді діють.
- Малі набори даних. Коли весь набір уміщається в пам’ять, а градієнти дешеві, повний градієнт — найменш зашумлений доступний напрямок.
- Навчання людей. Це найкоротший шлях до розуміння того, чому темп навчання й ландшафт втрат мають значення.
Чому і коли
Обирайте full-batch gradient descent, коли набір даних малий, ціль опукла, а вам потрібен якомога стабільніший спуск. Кожен крок використовує всю інформацію, тож шлях гладкий і відтворюваний.
Беріть щось інше на будь-якому реалістичному наборі даних. Кожне оновлення коштує проходу по всіх прикладах, тож ціна кроку зростає разом із набором даних; стохастичний градієнтний спуск зводить її до одного прикладу на крок [1, §12.4.1], а на практиці моделі навчає мінібатчевий компроміс між ними [1, §12.5].
Практичний приклад
Python 10 рядків Показати код Сховати код
import numpy as np
def loss(w): return (w - 3.0) ** 2
def grad(w): return 2 * (w - 3.0)
for eta in (0.1, 0.5, 0.9, 1.05):
w = 0.0
for _ in range(12):
w -= eta * grad(w)
print(f"eta={eta:<5} w={w:10.4f} loss={loss(w):.4g}")Вивід
eta=0.1 w= 2.7938 loss=0.0425
eta=0.5 w= 3.0000 loss=0
eta=0.9 w= 2.7938 loss=0.0425
eta=1.05 w= -6.4153 loss=88.65Мінімум лежить у 3.0, і кожен крок множить відстань до нього на 1 − 2η. За η = 0.1 цей множник 0.8: шлях повзе до 3 з одного боку. За η = 0.5 він 0, і перший же крок потрапляє точно в мінімум. За η = 0.9 він −0.8: кожен крок перестрибує на інший бік (5.4, 1.08, 4.54, …), але відстань зменшується так само швидко, як за 0.1, тож обидва запуски закінчуються в тому самому місці. Понад η = 1 модуль множника перевищує 1, і за 1.05 кожен перестрибок більший за попередній: після 12 кроків запуск розбігся до −6.4.
Типові помилки
Темп навчання — перше, що варто перевірити, коли навчання зривається. Втрати, що йдуть у NaN, зазвичай означають завелике η: за надто великого кроку «ми не можемо гарантувати, що ітерація ... зможе зменшити значення» функції [1, §12.3.1.1].
Немасштабовані ознаки перетворюють поверхню на ущелину. Якщо одна ознака охоплює тисячі, а інша — частки, поверхня втрат стає довгою вузькою долиною. Тоді крок мусить бути досить малим, щоб не перестрибувати вздовж крутого напрямку, а це «зазвичай означає, що крок замалий для помітного поступу в інших напрямках» [2, §4.3.1]. Масштабування тут не косметика: воно може змінити кількість ітерацій на порядки.
Сталий темп навчання — компроміс. Достатньо великий, щоб рухатися на початку, зазвичай завеликий, щоб осісти в кінці. Саме для цього існують розклади темпу навчання [1, §12.11].
Збіжність — до локального мінімуму. На неопуклих задачах те, звідки ви почали, впливає на те, де опинитеся.
Ще не прочитаноДочитайте сторінку до кінця — і вона вважатиметься прочитаною.
Зберігайте свій прогресЗ доступом назавжди кожна дочитана сторінка позначається, і ви продовжуєте з того місця, де зупинилися, на всіх своїх пристроях.
Відкрити доступПеревірте себе
3 запитання
Кожну відповідь пояснено: який розділ вона перевіряє і з якого джерела.
Джерела
- Dive into Deep Learningbook · звірено 2026-08-31https://d2l.ai/
- Deep Learning (2016)book · звірено 2026-10-06https://www.deeplearningbook.org/