Метрики Tensorflow резко снижаются после перезапуска с сохраненной контрольной точки - PullRequest
0 голосов
/ 27 сентября 2019

Это вопрос, который не давал покоя коллегам в прошлом и настоящем в течение достаточно долгого времени.Если я уничтожу и обучу экземпляр tenorflow и перезапущу, в документации говорится, что он возобновит работу с последней контрольной точки, сохраненной в model_dir.Обычно, однако, мы видим значительное падение в таких показателях, как AUC, logloss и т. Д. Я никогда не понимал причину такого падения.Вся соответствующая информация сохраняется в файле контрольных точек для тензорного потока, чтобы восстановить состояние до его уничтожения, за исключением, возможно, итератора входного набора данных (в рамках структуры оценки).Исторически это отговаривало меня и других от возобновления обучения тензорному потоку путем загрузки с существующих контрольных точек, потому что показатели почти гарантированно ухудшатся.

Сегодня я сделал кое-что несколько более агрессивное, подняв учебный экземпляр с 1 руководителем и 7 работниками.на одной машине, без параметров сервера.Предполагается, что это выполняется в соответствии со стратегией распространения STANDALONE, при которой руководитель создает несколько рабочих потоков.Однако, когда я прекратил обучение и перезапустился с последней контрольной точки с той же распределенной настройкой, показатели с самого начала снизились почти вдвое по сравнению со всей выигрышем!Обратите внимание, что многократные скачки на графиках тензорной доски ниже являются результатом многократного перезапуска, который я инициировал с одной и той же сохраненной контрольной точки.

Затем я начал смотреть на градиентные гистограммы / графики распределения и заметил, что градиент всех смещенийвеса, особенно последний смещение_3, значительно увеличились в дисперсии после перезапуска.Ясно, что что-то не так, но сравнение переменных в контрольных точках до и после перезапуска показывает, что значения все еще непрерывно изменяются, хотя и с скачком, превышающим нормальный.Чтобы предотвратить непреднамеренное переоснащение, я перетасовал свои входные файлы (около 100 из них) другим случайным начальным числом, чтобы перезапуск не возвращался к началу исходной эпохи обучения.В любом случае, обучение длилось более нескольких эпох, так что маловероятно, что это будет случай переобучения видимых тренировочных данных.

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

Обновление:

Любопытно, что я обнаружил, что Adagrad вектора смещения последнего слоя моего DNN остается постоянным на уровне 0,1, хотя градиенты явно ненулевые, хотя и очень малые.Я не думаю, что это объясняет скачок после перезапуска, потому что сериализованное значение Adagrad должно быть близко к значению, хранящемуся в памяти.

python -m inspect_checkpoint --file_name model.ckpt-720730 --tensor_name bias_3/Adagrad
tensor_name:  bias_3/Adagrad
[0.1]

python -m inspect_checkpoint --file_name model.ckpt-591678 --tensor_name bias_3/Adagrad
tensor_name:  bias_3/Adagrad
[0.1]

Для сравнения, Adagrad of bias2, по-видимому, резко изменяется за 200k шагов (размер партии 1024).

python -m inspect_checkpoint --file_name model.ckpt-720730 --tensor_name bias_2/Adagrad
tensor_name:  bias_2/Adagrad
[80.608215    1.0615484   1.1355964  89.86574    90.919426   80.83253
  1.7569603   1.2538469  69.11257    77.651375   89.71191     0.7492978
...

python -m inspect_checkpoint --file_name model.ckpt-591678 --tensor_name bias_2/Adagrad
tensor_name:  bias_2/Adagrad
[47.73241     1.0530229   1.1187999  50.532574   51.123966   40.66552
  1.7377361   1.2532469  36.016315   45.788876   50.346928    0.7473773
...

Для полноты, я использую отсев по всему DNN, но никакой регуляризации любого рода.Нет причудливого множителя градиента, функции затухания градиента и т. Д. Просто старый Адаград.Любая помощь или предложение высоко ценится.

enter image description here

enter image description here enter image description here enter image description here

enter image description here

enter image description here

enter image description here

...