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


23

Мені було цікаво, які різні випадки використання для двох алгоритмів, Координатного спуску та Градієнтного Спуску .

Я знаю, що спуск координат має проблеми з негладкими функціями, але він використовується в популярних алгоритмах, таких як SVM і LASSO.

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

Моє запитання: Який тип проблем підходить одній, а не іншій, і в цьому відношенні, що робить координатне спускання для SVM та LASSO, але градієнтне спуск для ANN?

Як слід обирати між ними, обираючи алгоритм оптимізації?

Відповіді:


7

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

Іноді набагато простіше знайти точне рішення проблеми у випадку з однією єдиною змінною (або блоком або змінними), ніж опрацювати її для всіх змінних одночасно. Інші часи для обчислення градієнта досить дорого порівняно з окремими похідними. Крім того, збіжність координатного спуску така ж, як і для ista, 1/k2 , де k - кількість ітерацій, але іноді вона може бути кращою порівняно з ISTA та FISTA, див., Наприклад, http: //statweb.stanford. edu / ~ tibs / порівняння.txt .

Такі речі впливатимуть, наприклад, на вибір координатного спуску та ISTA / FISTA.


То в яких випадках коли координатний спуск (CD) буде швидшим? Чи є певні типи функцій, на яких компакт-диск буде кращим кандидатом?
Бар

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

Чому CD швидше, ніж GD? Здається протилежна логіка.
Рой

3

Координатний спуск оновлює один параметр, а спуск градієнта намагається оновити всі параметри одночасно.

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

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

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

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

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

α


0

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

k

  • Усі ймовірності повинні бути позитивними.
  • Усі елементи набору ймовірностей повинні скласти до одного

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

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

pi

  • pik+1=pikηJpi
  • pi=min(max(pi,0),1)
  • Оновіть усі p_i:Pj+1=Pj1i=1npi

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

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

Я сподіваюся, що це додало трохи розуміння.

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