Почему скорость обучения (LR) не падает ниже 1e-08 в pytorch? - PullRequest
0 голосов
/ 06 марта 2019

Я тренирую модель. Чтобы преодолеть переоснащение, я выполнил оптимизацию, увеличение данных и т. Д. У меня есть обновленный LR (я пробовал и для SGD, и для Адама), и когда есть плато (также пробовал шаг), скорость обучения снижается в несколько раз, пока достигает LR 1e-08, но не опускается ниже этого уровня, и проверка моей модели застревает после этого момента. Я попытался передать параметр epsilon Адаму, чтобы предложить меньшее значение, но он все равно застрял на LR 1e-08. Я также выдерживаю снижение веса, но это не меняет ситуацию. Также не удалось установить для amsgrad значение true.

Я провел некоторое исследование, и люди предполагают, что у оптимизатора Адама есть присущие ему проблемы, но ничего не говорится о скорости обучения - и каждое обсуждение добавляло, что с SGD проблем нет.

Почему это? Это ошибка или она спроектирована так, потому что авторы считают ее бессмысленно малой ценностью после этого? Кажется, что это действительно помогло бы иметь меньшую скорость обучения для моего набора данных, потому что все выглядит хорошо, пока скорость обучения не упадет до LR 1e-08.

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

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

outputs = model(batch)
loss = criterion(outputs, targets)

# Equivalent to lowering the learning rate by a factor of 100
loss = loss / 100

self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
0 голосов
/ 07 марта 2019

Работа Ричарда должна работать довольно хорошо, но я также получил официальный ответ, если кто-нибудь захочет узнать.

Задание меньшего значения для параметра eps планировщика ReduceLROnPlateau (а не Адама) сработало.

eps (float) - минимальное затухание, применяемое к lr. Если разница между новым и старым lr меньше, чем eps, обновление игнорируется. По умолчанию: 1e-8.

...