Выбор ответа Senior Производные и градиент обновлено
Проверка градиента
Вопрос
Вы написали аналитический градиент сложной функции потерь. Как надёжнее всего проверить его численно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Центральной разностью (f(x+h) - f(x-h)) / 2h с h около 1e-5 в float64, по относительной ошибке. Центральная разность имеет ошибку O(h²) против O(h) у прямой.
Варианты ответа
- Прямой разностью (f(x+h) - f(x)) / h с h = 1e-12: чем меньше шаг h, тем точнее приближение производной
- Центральной разностью (f(x+h) - f(x-h)) / 2h с h около 1e-5 в float64, по относительной ошибкеправильный ответ
- Центральной разностью в float16 с h = 1e-3, чтобы проверка шла быстрее на больших тензорах
- Сравнить итоговый 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 ошибок.