Pull to refresh

Comments 18

Я бы добавил, что сам по себе метод градиентного спуска с фиксированным шагом является довольно не эффективным алгоритмом оптимизации. На практике, стараются его (шаг) выбирать адаптивно тем или иным образом (например, при помощи line search).
Да, в дальнейшем, перевалив через базовую часть, я сделаю часть с обзором модифицированных градиентных методов и буду использовать что-нибудь модное-молодежное. AdaGrad какой-нибудь.
Очень познавательно, а нелинейные модели будут?
методы Levenberg Marquardt, Let Dog и пр.
>Let Dog
Dog Leg?

Если я правильно понимаю, то квази-Ньютоновские методы и методы второго порядка особо не используются при обучении нейронок на сегодняшний день. Все используют разные модификации SGD.
Похоже на правду, в следующей части я приведу ссылку на презентацию Яна Лекуна, в которой он советует не волноваться насчет выбора методов и просто использовать градиентные. Для нетерпеливых: https://www.cs.nyu.edu/~yann/talks/lecun-20071207-nonconvex.pdf
О! Спасибо!

Заголовок слайда
>Convex Shmonvex
Что-то в голос
А можно немного пояснить комментарий?
Ну т.е. я вроде нигде не говорил что нельзя использовать Gauss-Newton для обучения сетей. Можно, как и большую часть алгоритмов нелинейной оптимизации (SR1, (L)BFGS, CG, etc). Но в большинстве статей по Deep Learning что я встречал народ предпочитает SGD, включая Yann Lecun
Я слабо ориентируюсь в области ИИ, для меня это просто системы функций
у нас хоть функции и сложные(почти всегда нелинейные), но их больше 10 редко бывает + ограничения
с линейкой как автор и говорил в прошлой теме всё просто — решение At * A x= At * b однозначно и на современных машинах затрат особых не представляет(первые программные реализации для геофизиков вроде ещё в конце 80-х появились). Для больших данных где прямой расчёт не получится как автор и писал приходится применять итерационные методы.

С нелинейкой сложнее: локальные минимумы, зависимость от начальных значений. LM в таких случаях становится незаменим как наиболее быстро сходящийся. Но само решение всё равно сводится к расчёту линейной системы на каждом шаге итерации.
Теперь понял. Кажется
Градиентный спуск описанный в посте вполне должен работать и для нелинейных случаев. Не так хорошо как Гаусс-Ньютон, но вполне себе, особенно если сбоку прикрутить что-то типа линейного поиска.
Что касается локальных минимумов (если я не ошибаюсь), что LM, что градиентный спуск сходятся к локальному минимуму.
Градиентный спуск описанный в посте вполне должен работать и для нелинейных случаев. Не так хорошо как Гаусс-Ньютон, но вполне себе, особенно если сбоку прикрутить что-то типа линейного поиска.

на нелинейке гораздо хуже работает к сожалению и имеет слабые места для рада функций, в википедии где-то был разбор какие функции не получится апроксимировать. У меня LM выходил на минимум за 5-15 итераций, а градиентный спуск в районе 30-50, а иногда и нестабильным становился. При этом чем больше функций тем хуже становилось.

Мне вот больше интересно зачем используются многослойные линейные сети, как автор уже писал эту сеть можно представить одной матрицей (в силу ассоциативности произведения матриц). Вот и возникает вопрос зачем городить такой огород.
Разница в 10 раз между итерациями LM и GD это еще хорошо) У меня на некоторых задачах выходило что-то в духе двух-трех порядков.
Тем не менее, надо помнить, что каждая итерация LM это довольно дорогая операция, т.к. надо накопить немаленький якобиан, перемножить его и решить довольно большую СЛАУ
Для задач Deep Learning оказалось, выгодней делать много маленьких и не особо точных шажков.
Да и в целом, для ML сводить ошибку на обучающей выборке к нулю не то чтобы сильно нужно.

А разбор интересно было бы посмотреть.

Там между перемножением матриц есть нелинейные преобразования (ReLU, сигмоида и т.д.), так что схлопнуть (как мне кажется) не выйдет.

Извиняюсь, не увидел, что вы говорили о линейных сетях.
А не подскажите, где в посте они упоминались?
я говорил для нелинейных функций. Для линейных LM бессмысленен наверное, якобиан постоянная матрица.
у меня несколько другие количества уравнений, для линейных я просто в лоб решал At*A*x=At*b. матрица(At*A) небольшая выходит.

но видите, это просто другая область. Нам нужно точное решение за очень короткое время
Можно использовать любые методы второго порядка, конечно же. Оптимизация она и в Африке оптимизация, но проблема в вычислении гессиана, что довольно затратно. Гессиан квадратный, надо вычислять n^2 его элементов, а еще есть и другие операции, что в итоге выливается в проблему.
<зануда>
Гессиан при оптимизации сетей напрямую сейчас никто не вычисляет. Обычно или вычисляют, или аппроксимируют произведение гессиана на вектор, что уже не n^2, а n.
<\зануда>
а можно в дальнейшем подробнее про например nesterov momentum, adam, rmsprop update rule для градиентного спуска?
Sign up to leave a comment.

Articles