Выбор ответа Senior Производные и градиент обновлено

Проверка градиента

Вопрос

Вы написали аналитический градиент сложной функции потерь. Как надёжнее всего проверить его численно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Центральной разностью (f(x+h) - f(x-h)) / 2h с h около 1e-5 в float64, по относительной ошибке. Центральная разность имеет ошибку O(h²) против O(h) у прямой.

Варианты ответа

  1. Прямой разностью (f(x+h) - f(x)) / h с h = 1e-12: чем меньше шаг h, тем точнее приближение производной
  2. Центральной разностью (f(x+h) - f(x-h)) / 2h с h около 1e-5 в float64, по относительной ошибкеправильный ответ
  3. Центральной разностью в float16 с h = 1e-3, чтобы проверка шла быстрее на больших тензорах
  4. Сравнить итоговый loss после эпохи с моделью, обученной другим фреймворком

Разбор

Центральная разность имеет ошибку O(h²) против O(h) у прямой. Слишком маленький h проигрывает из-за ошибок округления: вычитаются почти равные числа. Поэтому берут h порядка 1e-5..1e-6 в float64 и смотрят относительную ошибку |a - n| / max(|a|, |n|): около 1e-7 и меньше хорошо, около 1e-2 явная ошибка. Так делают gradient checking.

  • h = 1e-12 сломается на округлении.
  • float16 даёт всего около 3 значащих цифр, проверка бессмысленна.
  • Итоговый loss может совпасть и при ошибке в градиенте части параметров.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.