Градиентный спуск - это локальный метод поиска для минимизации функции.Когда он достигнет локального минимума в пространстве параметров, он не сможет идти дальше.Это делает градиентный спуск (и другие локальные методы) склонным к застреванию в локальных минимумах, а не достижению глобального минимума.Местные минимумы могут или не могут быть хорошими решениями для того, чего вы пытаетесь достичь.Что ожидать, будет зависеть от функции, которую вы пытаетесь минимизировать.
В частности, многомерные NP-полные задачи могут быть сложными.У них часто экспоненциально много локальных оптимумов, причем многие из них почти так же хороши, как глобальный оптимум с точки зрения стоимости, но со значениями параметров, ортогональными к значениям для глобального оптимума.Это сложные проблемы: обычно вы не ожидаете, что сможете найти глобальный оптимум, а просто ищете достаточно хороший локальный минимум.Это также релевантные проблемы: многие интересные проблемы имеют именно эти свойства.
Я бы предложил сначала протестировать вашу реализацию градиентного спуска с простой проблемой.Вы можете попытаться найти минимум в полиноме.Поскольку это проблема с одним параметром, вы можете построить график изменения значений параметров вдоль кривой многочлена.Вы должны быть в состоянии увидеть, если что-то не так, а также наблюдать, как поиск застревает в локальных минимумах.Вы также должны увидеть, что первоначальный выбор параметров может иметь большое значение.
Для решения более сложных задач вы можете изменить свой алгоритм, чтобы он избежал локальных минимумов.Несколько общих подходов:
Добавьте шум.Это снижает точность найденных вами параметров, что может «размывать» локальные минимумы.Поиск может затем выпрыгнуть из локальных минимумов, которые являются небольшими по сравнению с шумом, но все еще остаются в более глубоких минимумах.Хорошо известным подходом для добавления шума является имитация отжига .
Добавить импульс.Наряду с использованием текущего градиента для определения шага также продолжайте в том же направлении, что и предыдущий шаг.Если вы возьмете часть предыдущего шага в качестве члена импульса, есть тенденция продолжать движение, что может привести к тому, что поиск превысит локальный минимум.При использовании дроби шаги затухают экспоненциально, поэтому плохие шаги не являются большой проблемой.Это всегда было популярной модификацией градиентного спуска при обучении нейронных сетей, где градиентный спуск известен как обратное распространение.
Используйте гибридный поиск.Сначала используйте глобальный поиск (например, генетические алгоритмы, различные методы Монте-Карло), чтобы найти хорошие начальные точки, затем примените градиентный спуск, чтобы воспользоваться информацией о градиенте в функции.
Я не буду давать рекомендации по использованию.Вместо этого я предлагаю провести небольшое исследование, чтобы увидеть, что другие сделали с проблемами, связанными с тем, над чем вы работаете.Если это просто опыт обучения, импульс, вероятно, легче всего начать работать.