Как определить условие завершения градиентного спуска?


24

На самом деле, я хотел спросить вас, как я могу определить условие завершения градиентного спуска.

Могу ли я остановить его, основываясь на количестве итераций, т.е. учитывая значения параметров, скажем, для 100 итераций?

Или мне следует подождать, чтобы различия в значениях двух параметров 'new' и 'old' были очень малы, скажем, ? Это определенно займет много времени.10-6

Какой самый лучший способ? В моем случае даже одна итерация занимает значительное время. В этой ситуации, если я подожду 2-го условия, это может занять недели, я думаю.

Так какой подход я должен использовать. Как справиться с этим сценарием?


1
Это явно не указано, но я предполагаю, что вы пытаетесь найти MLE. Ваш результат действительно полностью зависит от вашего пространства параметров, вашей функции правдоподобия и ваших потребностей (иначе, «лучшее» не определено). Если вы просто ищете теоретическое обоснование, такое как асимптотическая эффективность; в условиях Le'Cam вы можете просто использовать одношаговую MLE (при дальнейшем предположении вы используете метод Ньютона и функцию оценки для градиентного спуска). Это требует, чтобы ваше начальное значение было таким, чтобы по вероятности. N1/2θ^0θ
Джонатан Лисич

так что подождите, когда вы сказали, что «новый» - «старый» достаточно мал, это неправильное условие завершения градиентного спуска? (если применимы теоремы с фиксированной точкой, такие как условия?)
Чарли Паркер

Остановиться можно, если какое-либо из значений функции или градиентов или параметров перестает двигаться, как относительное, так и абсолютное. Но на практике параметра ... это слишком много, поэтому они свернуты, но каждая программа делает это по-своему. См. Допуски Mathworks и критерии остановки для изображения. еяеяИкся3×2ftolabs ftolrelxtolabs
Денис

Ответы:


19

Хороший вопрос Я видел много правил остановки в литературе, и у каждого есть свои преимущества и недостатки, в зависимости от контекста. optimФункция в R, например, имеет по крайней мере три разные правила останова:

  • maxitзаранее определенное максимальное количество итераций. Еще одна похожая альтернатива, которую я видел в литературе, это максимальное количество секунд до истечения времени ожидания. Если все, что вам нужно, это приблизительное решение, это может быть очень разумным. Фактически, есть классы моделей (особенно линейных моделей), для которых ранняя остановка аналогична установке гауссовского априора в значениях ваших параметров. Частый участник сказал бы, что у вас есть «норма L2», а не априор, но они также считают это разумным поступком. Я только просмотрел эту статью , но она рассказывает о взаимосвязи между ранней остановкой и регуляризацией и может помочь вам получить больше информации. Но короткая версия, да, ранняя остановка может быть вполне респектабельной вещью, в зависимости от того, что вы

  • abstolостановка, когда функция становится «достаточно близкой» к нулю. Это может не относиться к вам (не похоже, что вы ожидаете ноль), поэтому я пропущу это.

  • reltolЭто как ваше второе предложение - прекратите, когда улучшение падает ниже порога. На самом деле я не знаю, насколько много теории на этот счет, но вы, вероятно, будете стремиться получить меньшие минимумы таким образом, чем с небольшим максимальным числом итераций. Если это важно для вас, возможно, стоит выполнить код для дополнительных итераций.

Другое семейство правил остановки связано с оптимизацией функции стоимости для набора данных проверки (или перекрестной проверки), а не для данных обучения. В зависимости от того, для чего вы хотите использовать свою модель, вы, возможно, захотите хорошо остановиться, прежде чем доберетесь до локального минимума в ваших тренировочных данных, поскольку это может привести к переобучению. Я почти уверен, что Тревор Хасти написал о хороших способах сделать это, но я не могу вспомнить цитату.

Другие возможные варианты нахождения более низких минимумов за разумное время могут включать:

  • Стохастический градиентный спуск, который требует только оценки градиентов для небольшой части ваших данных за один раз (например, одна точка данных для «чистого» SGD или небольших мини-пакетов).

  • Более продвинутые функции оптимизации (например, методы типа Ньютона или Conjugate Gradient), которые используют информацию о кривизне вашей целевой функции, чтобы помочь вам указывать в более точных направлениях и делать шаги лучшего размера при движении вниз по склону.

  • Термин «импульс» в вашем правиле обновления, так что ваш оптимизатор лучше справляется с укатом, чем с ограничением стен каньона в вашей целевой функции.

Все эти подходы обсуждаются в лекционных заметках, которые я нашел в Интернете.

Надеюсь это поможет!

Отредактируйте « о», и вы также можете попытаться получить лучшие начальные значения (например, решая более простую версию задачи), так что требуется меньше итераций, чтобы приблизиться к оптимальному с вашего «горячего старта».


проблема с выбором фиксированного числа итераций заключается в том, что, если вы не можете четко построить кривую затрат (и у нее небольшой шум), трудно определить, сколько итераций слишком много, особенно если функция оптимизации сложна и кто знает сколько у него локальных минимумов, и если вы произвели рандомизированную инициализацию, это еще больше усугубит проблему, поскольку еще сложнее будет угадать, что такое хорошее «небольшое» количество итераций. Как вы решаете эти проблемы на самом деле, если хотите использовать раннюю остановку? Как убедиться, что вы не слишком много стреляете и не стреляете?
Чарли Паркер

Я хотел бы уточнить, что reltol(то есть, когда перестает быть «улучшение») означает. Первое улучшение означает уменьшение функции стоимости. Поэтому я предполагаю, что вы имеете в виду, что, когда функция стоимости перестает достаточно уменьшаться (или начинает расти), вы останавливаетесь, верно? На самом деле никто не делает "| старый - новый |" тип правила обновления, верно?
Чарли Паркер

1
abstolПараметр имеет смысл только тогда , когда вы принимаете допуск градиента функции затрат, а не сама функция затрат. В локальном оптимизаторе значение градиента равно нулю; но не значение функции.
Марио Бесерра

«теплый старт» - очень умный трюк! спасибо
Мехди ЛАМРАНИ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.