Это 6-й день, я участвую в вызове августа, подробности о событии представление:Испытание августовского обновления
Концепция импульса пришла из физики и может быть понята как инерция, так как же она помогает нам найти оптимальное решение?
Если метод градиентного спуска сравнить с процессом спуска маленького шарика со склона холма в долину, то его конкретный процесс выглядит следующим образом: стартуя из начальной точки А, вычислить текущий уклон А, скользить по дороге в направлении наибольшего уклона, остановитесь. Спуститесь к B, снова посмотрите на окружающий склон от B, скользите в другую сторону в направлении наибольшего уклона, снова остановитесь и повторяйте эту операцию, пока не достигнете долины. Но так ли движется настоящий мяч? Когда настоящий мяч катится из точки А в точку Б, мяч имеет определенное ускорение, обычно он не останавливается, и мяч будет катиться все быстрее и быстрее ко дну долины. Momentum имитирует этот процесс, чтобы ускорить оптимизацию нейронной сети. Следующий рисунок интуитивно объясняет все содержание импульса
Основная формула глубокого обучения:
Теперь определим выражение
представляет собой сумму импульса, накопленного за все предыдущие шаги,это коэффициент, который делает градиент затухать.Этот подход может сделать ранний градиент все меньше и меньше влияет на текущий градиент.Если нет значения затухания, модель имеет тенденцию к колебаниям, и трудно сходиться или даже расходиться, поэтому новый формула обновления параметра становится
Расширение есть
Такой шаг за шагом вниз, возьмите мяч на ранней скорости, он будет быстро приближаться к дну
Возьмем более практический пример
На следующем рисунке показано, когда импульс не задан, сеть просто обновляется до локального оптимального решения и останавливается, и мы видим, что направление первых нескольких итераций очень случайно, потому что его направление обновления зависит только от направления градиента текущая позиция
На следующем рисунке показана ситуация с заданным импульсом: по сравнению с отсутствием импульса обновление сети происходит быстрее, и глобальное оптимальное решение почти найдено.Но следует отметить, что не все модели подходят для добавления импульса, а некоторые замедлены (потому что учитываются предыдущие исторические факторы)
Очень удобно добавлять параметры импульса в pytorch, просто добавьте его в функцию настройки оптимизатора
optimizer = torch.optim.SGD(model.parameters(), args.lr, # learning_rate
momentum=args.momentum, # momentum
weight_decay=args.weight_decayt_decay) # L2-regularization
Но следует отметить, что для оптимизатора Adam у него нет параметра импульса, потому что он имеет встроенный механизм импульса, только SGD требует дополнительных настроек