Смешанная точность и масштабирование потерь

Как модели на самом деле обучаются — от обычного градиентного спуска до Adam

Обучение со смешанной точностью использует более компактные числовые форматы ради скорости и экономии памяти. Вместо того чтобы хранить каждое вычисление с полной точностью (стандартные 32-битные числа с плавающей точкой), многие операции используют float16 или bfloat16: 16-битные форматы, занимающие вдвое меньше памяти в обмен на меньшую точность и, для float16, более узкий диапазон представимых величин.

Риск связан с числовым диапазоном. Некоторые градиенты крошечные. Если крошечное число округляется до нуля, оптимизатор теряет информацию. Масштабирование потерь защищает такие маленькие градиенты, умножая потерю перед обратным распространением, а затем деля градиенты обратно.

Кухонные весы, округляющие до целых граммов, могут не заметить крошечную щепотку специй. Но если взвесить десять одинаковых щепоток вместе, весы увидят их сумму. Затем вы делите на десять, чтобы получить одну щепотку. Масштабирование потерь использует тот же трюк: сделать маленькое значение легче представимым, а затем масштабировать его обратно. Фигура ниже — напоминание о том, что стоит на кону. Спуск работает, только если градиент на каждом шаге переживает арифметику; точность не меняет сам цикл — она решает, останутся ли видны для него крошечные наклоны вблизи минимума.

Где это встречается в MLСмешанная точность — одна из причин, почему крупные нейронные сети быстро обучаются на современном оборудовании. Оптимизаторам по-прежнему нужны те же понятия, но числовой масштаб становится частью рецепта обучения.
▶ Смешанная точность и масштабирование потерь
← Чередующиеся наименьшие квадратыМасштабирование размера пакета →