Як зрозуміти Gradient Descent, найпопулярніший алгоритм ML

Градієнтний спуск - один із найпопулярніших та широко використовуваних алгоритмів для навчання моделей машинного навчання.

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

Наприклад, якщо передбачення рівне p , цільове значення t , а наша метрика помилок - квадратична помилка, тоді функція витрат J (W) = (p - t) ² .

Зверніть увагу , що передбачене значення р залежить від вхідного X , а також моделей машинного навчання та (поточних) значень параметрів W . Під час навчання наша мета - знайти набір значень для W таких, щоб (p - t) ² було мало. Це означає, що наш прогноз p буде близьким до цільового t .

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

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

Повторюючи цей крок тисячі разів, ми будемо постійно мінімізувати свою функцію витрат.

Псевдокод для градієнтного спуску

Метод найшвидшого спуск використовуються для мінімізації витрат на функції J (w) параметризрвані з допомогою параметрів моделі W .

Градієнт (або похідна) повідомляє нам про нахил або нахил функції витрат. Отже, щоб мінімізувати функцію витрат, ми рухаємось у напрямку, протилежному градієнту.

  1. Ініціалізуйте ваги W випадковим чином.
  2. Розрахувати градієнти G параметрів функції витрат wrt. Це робиться за допомогою часткової диференціації: G = ∂J (W) / ∂W. Значення градієнта G залежить від вхідних даних, поточних значень параметрів моделі та функції витрат. Можливо, вам доведеться переглянути тему диференціації, якщо ви розраховуєте градієнт вручну.
  3. Оновіть ваги на величину, пропорційну G, тобто W = W - ηG
  4. Повторюйте, поки вартість J ( w ) не припинить зменшуватися або не буде виконано деякі інші заздалегідь визначені критерії припинення .

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

Популярним вибором для критеріїв припинення є те, що вартість J ( w ) перестає зменшуватися на наборі даних перевірки.

Інтуїція для градієнтного спуску

Уявіть, що вам зав'язали очіна пересіченій місцевості, і ваша мета - досягти найнижчої висоти.

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

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

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

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

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

До речі, - як невеличка сторона - цей посібник є частиною безкоштовного курсу науки про дані та безкоштовного курсу машинного навчання на Commonlounge. Курси включають багато практичних завдань та проектів. Якщо ви зацікавлені в вивченні Data Science / ML, однозначно рекомендуємо перевірити його.

Варіанти градієнтного спуску

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

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

  • Пакетний градієнтний спуск обчислює градієнт функції витрат wrt до параметра W для всіх навчальних даних . Оскільки нам потрібно розрахувати градієнти для всього набору даних, щоб виконати оновлення одного параметра, пакетний градієнтний спуск може бути дуже повільним.
  • Стохастичний градієнтний спуск (SGD) обчислює градієнт для кожного оновлення, використовуючи одну точку навчальних даних x_i (вибрану випадковим чином). Ідея полягає в тому, що розрахований таким чином градієнт є стохастичним наближенням до градієнта, розрахованого з використанням усіх навчальних даних. Кожне оновлення зараз обчислюється набагато швидше, ніж при пакетному градієнтному спуску, і протягом багатьох оновлень ми рухатимемось в тому ж загальному напрямку.
  • У міні-партійному градієнтному спуску ми розраховуємо градієнт для кожної невеликої міні-партії навчальних даних. Тобто спочатку ми поділяємо навчальні дані на невеликі партії (скажімо, M зразків на партію). Ми виконуємо одне оновлення на міні-пакет. М зазвичай знаходиться в межах 30–500, залежно від проблеми. Зазвичай використовується міні-пакетний GD, оскільки обчислювальна інфраструктура - компілятори, центральні процесори, графічні процесори - часто оптимізована для виконання векторних додавань та векторних множень.

З них SGD та міні-пакет GD є найбільш популярними.

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

Вибір швидкості навчання

Як правило, значення швидкості навчання вибирається вручну. Зазвичай ми починаємо з невеликого значення, такого як 0,1, 0,01 або 0,001, і адаптуємо його, виходячи з того, чи зменшується функція витрат дуже повільно (збільшити швидкість навчання) чи вибухає / є непостійною (зменшити рівень навчання).

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

Співавтори Кешав Дандханія та Саван Вісалпара.

Спочатку опубліковано в рамках безкоштовного курсу машинного навчання та безкоштовного курсу науки про дані на www.commonlounge.com.