Пакетний градієнтний спуск порівняно зі стохастичним градієнтом


101

Припустимо, у нас є якийсь навчальний набір для . Припустимо також, що ми використовуємо певний тип алгоритму керованого навчання на навчальному наборі. Гіпотези представлені у вигляді . Нам потрібно знайти параметри які мінімізують "відстань" між і . Нехай(x(i),y(i))i=1,,mhθ(x(i))=θ0+θ1x(i)1++θnx(i)nθy(i)hθ(x(i))

J(θ)=12i=1m(y(i)hθ(x(i))2

Тоді ми хочемо знайти що мінімізує . У градієнтному спуску ми ініціалізуємо кожен параметр і виконуємо наступне оновлення:θJ(θ)

θj:=θjαθjJ(θ)

У чому полягає ключова відмінність спуску градієнта партії від стохастичного градієнта спуску?

Обидва використовують вищезазначене правило оновлення. Але хіба один кращий за інший?

Відповіді:


121

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

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

Стохастичний градієнтний спуск (SGD) обчислює градієнт, використовуючи один зразок. Більшість застосувань SGD насправді використовують міні-партію з декількох зразків з причин, які будуть пояснені трохи пізніше. SGD працює добре (я не думаю, але, але краще, ніж пакетний градієнт спуску) для колекторів помилок, у яких багато локальних максимумів / мінімумів. У цьому випадку дещо шумніший градієнт, розрахований за допомогою зменшеної кількості зразків, має тенденцію виштовхувати модель з локальних мінімумів в область, яка, сподіваємось, є більш оптимальною. Одиночні зразки дійсно галасливі, в той час як мініатюри, як правило, трохи випромінюють шум. Таким чином, кількість ривків зменшується при використанні мінібатів. Хороший баланс досягається, коли розмір міні-партії є досить малим, щоб уникнути деяких з бідних місцевих мінімумів, але досить великих, щоб це не було ' t уникайте глобальних мінімумів або кращих показників місцевих мінімумів. (Між іншим, це передбачає, що найкращі мінімуми мають більший і глибший басейн привабливості, і тому їм легше потрапляти.)

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

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

Те, як мені подобається думати, як працює SGD, - це уявити, що у мене є одна точка, яка представляє мій розподіл вхідних даних. Моя модель намагається навчитися розподілу входу. Навколишній вхідний розподіл - це затінена область, яка представляє вхідні розподіли всіх можливих мініатюр, які я міг би пробувати. Зазвичай справедливо припущення, що розподіли вхідних мініатюр знаходяться близько до справжнього вхідного розподілу. Пакетний градієнт спуску, на всіх кроках, проходить самим крутим маршрутом, щоб досягти справжнього вхідного розподілу. З іншого боку, SGD вибирає випадкову точку в затіненій області і прямує найкрутішим шляхом до цієї точки. Однак при кожній ітерації він обирає нову точку. Середнє значення всіх цих кроків буде приблизним до справжнього розподілу вводу, як правило, досить добре.


13
На практиці ніхто не використовує Batch Gradient Descent. Це просто занадто обчислювально дорого, щоб не так багато прибутку. (Виграш полягає в тому, що ви насправді знижуєте "справжній" градієнт.) Коли у вас є сильно невипукла функція втрат, вам просто потрібно вступити в основному в правильному напрямку, і ви, зрештою, сходите на локальному мінімумі. Таким чином, міні-партія SGD.
сабалаба

@Jason_L_Bens Чи є у вас будь-які довідки (статті чи тексти в Інтернеті), де я можу прочитати більше про ці алгоритми?
користувач110320

1
@ user110320 Не з голови, ні, хоча вони дуже поширені алгоритми, і тому в темі має бути доступно тонну ресурсів, трохи пошукавши. Якщо ви шукаєте загальний підхід, рекомендую ознайомитися з деякими з навчальних глибоких архітектур Йошуа Бенджо для AI. Тут я почав працювати.
Jason_L_Bens

6

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

  1. Чому minibatch працює .

Математика, що стоїть за цим, полягає в тому, що "справжній" градієнт функції витрат (градієнт для помилки узагальнення або для безлічі великого набору вибірок) - це очікування градієнта над справжніми даними, що генерують розподіл ; фактичний градієнт, обчислений на партії вибірок, завжди є наближенням до справжнього градієнта з емпіричним розподілом даних . pdatap^data

g=Epdata(J(θ)θ)
Пакетний градієнт спуск може принести вам можливий "оптимальний" градієнт, враховуючи всі ваші вибірки даних, однак це не "справжній" градієнт. Менша партія (minibatch), ймовірно, не настільки оптимальна, як повна партія, але вони є обома наближеннями - так само і з одним зразком міні-партії (SGD). Різниця між стандартними помилками їх обернено пропорційна розмірам міні-партії. Тобто
SE(g^(n))SE(g^(m))=mn
Тобто, зменшення стандартної помилки є квадратним коренем збільшення розміру вибірки. Наведене рівняння стосується градієнтів, обчислених за один крок мініатюрного градієнта спуску. Коли ви повторюєте етапи оновлення градієнта міні-партії та використовуєте нарешті всі навчальні зразки в одну епоху, ви практично обчислюєте середнє значення градієнтів на основі всіх заданих зразків. Тобто, для міні-партії розміром , З рівнянь вище можна зробити висновок, що за одну епоху ваші усереднені градієнти з різними розмірами міні-партіїm
Ep^data(g^(m))=Ep^data(J(θ)θ)
m (від однієї до повної партії) мають однакову стандартну помилку, і що ще важливіше, всі вони є лояльними наближеннями до "справжнього" градієнта, тобто рухаються в потрібному напрямку "справжнього" градієнта.
  1. Чому міні-партія може працювати краще .

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

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

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

Нарешті, при градієнтному спуску ви не досягаєте глобальних мінімумів за один крок, а повторюєте на колекторі помилок. Градієнт багато в чому дає вам лише напрямок до ітерації. За допомогою minibatch ви можете ітератувати набагато швидше. У багатьох випадках, чим більше ітерацій, тим кращого ви можете досягти. Вас не цікавить будь-яка погода, точка оптимальна в усьому світі чи навіть локально. Ви просто хочете отримати розумну модель, яка приносить вам прийнятну помилку узагальнення. Minibatch робить це простіше.

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


Для проблем з опуклою оптимізацією те, що ви сказали, добре. Але для використання градієнтних методів для невипуклих функцій ви пропустили дуже критичну причину, що SGD кращий, ніж пакетний GD. Дивіться мою відповідь datascience.stackexchange.com/questions/16807/…
horaceT

@horaceT Дякуємо за ваш коментар Оскільки точку, яку ви згадали, описав Jason_L_Bens вище з деталями, я не намагався повторити, а посилався на його відповідь в останньому третьому абзаці з належною повагою. Для вирішення проблеми оптимізації спуску градієнта невипуклий відображається локальними мінімумами, включаючи точку сідла (див. Останній третій абзац); і для опису моя відповідь описує SGD як міні-партію, але з розміром партії 1 (див. третій параграф).
Сяо-Фен Лі

3

Для мене пакетний градієнт нагадує похилий градієнт. У нахиленому градієнті розмір партії вибирається, тому кожен параметр, який повинен бути оновлений, також змінюється незалежно, але не обов'язково ортогонально, в партії. Наприклад, якщо партія містить 10 експериментів, 10 рядків, то можна сформувати незалежних стовпців. 10 рядків дозволяє незалежне, але не ортогональне оновлення 512 параметрів.2101=512

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.