Почему градиентный спуск неэффективен для большого набора данных?

13

Допустим, наш набор данных содержит 1 миллион примеров, то есть , и мы хотим использовать градиентный спуск, чтобы выполнить логистическую или линейную регрессию для этого набора данных.x1,,x106

Что с методом градиентного спуска делает его неэффективным?

Напомним, что шаг градиентного спуска в момент времени определяется как:t

wt+1=wt+ηtf(x)

где - функция потерь.f

Я не вижу ничего необычного с вышеприведенным шагом, который делает алгоритм неэффективным. Это вычисление ? Разве эта операция не может быть предварительно вычислена, т. Е. Каждый уже вычислен, и просто оценивать их в каждой точке данныхff(x) хя?fxxi?

Карлос - Мангуст - Опасность
источник
1
Неэффективно по отношению к ...? Даже наименьших квадратов неэффективно для большого набора данных. Вам нужны большие обозначения O, чтобы иметь осмысленные представления о том, что делает с алгоритмом. Не все алгоритмы GD имеют одинаковый большой О. (не так ли?)n
AdamO

Ответы:

7

Было бы полезно, если бы вы предоставили контекст для утверждения, что градиентный спуск неэффективен. Неэффективно по отношению к чему?

Я предполагаю, что отсутствующий контекст здесь - сравнение со стохастическим или пакетным градиентным спуском в машинном обучении. Вот как можно ответить на вопрос в этом контексте. Вы оптимизируете параметры модели, даже гиперпараметры. Итак, у вас есть функция стоимости , где x i - ваши данные, а Θ - вектор параметров, а L ( ) - функция потерь. Чтобы минимизировать эту стоимость, вы используете градиентный спуск по параметрам θ j : i=1nL(xi|Θ)xiΘL() θj

θji=1nL(Θ|xi)

Итак, вы видите, что вам нужно получить сумму по всем данным . Это прискорбно, потому что это означает, что вы продолжаете просматривать данные для каждого шага вашего градиентного спуска. Вот как происходит пакетное и стохастическое спускание градиента: что если мы произвели выборку из набора данных и вычислили градиент для выборки, а не для полного набора? xi=1,,n Здесьпевявляется число наблюдений в выборкес. Таким образом, если ваша выборка составляет 1/100 от общего набора, вы ускоряете свои вычисления в 100 раз! Очевидно, что это вносит шум, который удлиняет обучение, но шум уменьшается со скоростью

θjk=1nsL(Θ|xk)
nss то время как количество вычислений увеличивается приn, так что этот прием может сработать.nn

С другой стороны , не insteado ждать до полной суммы вычисляются, вы можете разделить это на партию, и сделать шаг для каждой партии Й М сек = 1 Σ п S я ы = 1 . Таким образом, вы бы сделали M шагов к тому времени, когда будет вычислена сумма по всему набору данных. Это были бы более шумные шаги, но шум со временем исчезает.i=1ns=1Mis=1ns

Аксакал
источник
19

Есть два способа, которыми градиентный спуск может быть неэффективным. Интересно, что каждый из них приводит к своему собственному методу исправления, которые являются почти противоположными решениями. Две проблемы:

(1) Требуется слишком много обновлений градиентного спуска.

(2) Каждый шаг градиентного спуска слишком дорогой.

Что касается (1), при сравнении градиентного спуска с методами, которые учитывают информацию о производных второго порядка, градиентный спуск имеет тенденцию быть крайне неэффективным в отношении улучшения потерь на каждой итерации. Очень стандартный метод, метод Ньютона , как правило, требует гораздо меньше итераций для сходимости, то есть для логистической регрессии, 10 итераций метода Ньютона часто будут иметь меньшие потери, чем решение, обеспечиваемое 5000 итерациями градиентного спуска. Для линейной регрессии это еще более экстремально; есть решение в закрытой форме! Однако, так как число предикторов становится очень большим (то есть 500+), метод Ньютона / прямое решение для линейной регрессии может стать слишком дорогим для каждой итерации из-за количества требуемых матричных операций, в то время как градиентный спуск будет иметь значительно меньшую стоимость за итерацию.

O(nk)nkn=106k<100n=1012k=103будет. В этом случае методы, которые аппроксимируют производную на основе меньших подмножеств данных, являются более привлекательными, такие как стохастический градиентный спуск .

Я говорю, что эти исправления почти противоположны: что-то вроде метода Ньютона является более дорогостоящим, но более эффективным (с точки зрения изменения потерь) на обновление, тогда как стохастический градиентный спуск на самом деле менее эффективен, но в вычислительном отношении дешевле на обновление.

Клифф AB
источник
k
2
@Learningonepageatatime: covariates = переменные предиктора.
Клифф AB
10

L(w)f(x)Lwxwx

L(w)=(Lw1,,LwD),
D

wx

L(w)=i=1N(yiwTxi)2.
L(w)wNxN=106
tddevlin
источник
3

Краткий ответ: для расчета градиента необходимо суммировать все точки данных. Если у нас большой объем данных, то это занимает много времени.

У меня есть подробный ответ здесь.

Как стохастический градиентный спуск может сэкономить время по сравнению со стандартным градиентным спуском?


С другой стороны, всегда имейте в виду, что существуют прямые методы в дополнение к итерационным методам (градиентный приличный). Если мы хотим решить задачу наименьших квадратов, прямой метод может быть очень эффективным. Например, QR-разложение. Если у нас не так много функций, это очень быстро.

Когда вы подтвердите это, это может вас удивить: 5 миллионов точек данных с двумя функциями. Решение линейной регрессии / наименьшего квадрата занимает пару секунд!

x=matrix(runif(1e7),ncol=2)
y=runif(5e6)
start_time <- Sys.time()
lm(y~x)
end_time <- Sys.time()
end_time - start_time
# Time difference of 4.299081 secs
Хайтау Ду
источник
1

Хотя два упомянутых вами примера обычно выпуклые, я добавлю один момент о невыпуклых задачах. На мой взгляд, есть две основные причины, по которым (периодический) градиентный спуск можно считать «неэффективным». Первый пункт о вычислительных усилиях по вычислению градиента «большой» суммы функций уже был очень четко изложен в других ответах. Однако для невыпуклых задач GD обычно сталкивается с «близким» локальным минимумом. Этот минимум может быть очень плохим по сравнению с глобальным минимумом. SGD или мини-пакет GD имеют «преимущество» случайного блуждания (хотя бы частично) случайным образом и, таким образом, могут иметь шанс найти лучший локальный минимум. Смотрите этот ответ CV здесь . Или этот другой пост CV обрисовывая в общих чертах, как случайность могла быть выгодна.

XEL
источник