Модель учится с SGD, но не с Adam

#python #machine-learning #pytorch #adam #sgd

#python #машинное обучение #pytorch #адам #sgd

Вопрос:

Я просматривал здесь базовый пример PyTorch MNIST и заметил, что когда я изменил оптимизатор с SGD на Adam, модель не сходилась. В частности, я изменил строку 106 с

 optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)
  

Для

 optimizer = optim.Adam(model.parameters(), lr=args.lr)
  

Я думал, что это никак не повлияет на модель. С SGD потери быстро упали до низких значений примерно через четверть эпохи. Однако с Adam потеря вообще не уменьшилась даже после 10 эпох. Мне любопытно, почему это происходит; мне кажется, они должны иметь почти одинаковую производительность.

Я запустил это на Win10 / Py3.6 / PyTorch1.01 / CUDA9

И чтобы избавить вас от необходимости копаться в коде, вот гиперпараметры:

  • lr = 0.01
  • импульс = 0,5
  • batch_size= 64

Ответ №1:

Adam известен тем, что работает «из коробки» со своими параметрами по умолчанию, которые почти во всех фреймворках включают скорость обучения 0,001 (см. Значения по умолчанию в Keras, PyTorch и Tensorflow), что действительно является значением, предложенным в статье Adam.

Итак, я бы предложил перейти на

 optimizer = optim.Adam(model.parameters(), lr=0.001)
  

или просто

 optimizer = optim.Adam(model.parameters())
  

чтобы оставить lr значение по умолчанию (хотя я бы сказал, что я удивлен, поскольку MNIST в наши дни славится тем, что работает практически с тем, что вы можете в него добавить).