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

Производная ReLU в нуле

Вопрос

Функция ReLU(x) = max(0, x) не дифференцируема в нуле. Как с этим живут фреймворки и почему это не проблема?

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

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

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

Коротко

Правильный ответ: Берут значение из субградиента [0, 1], обычно 0; точно в 0 попасть почти невероятно. Для выпуклой функции в точке излома есть множество субградиентов, у ReLU в нуле это отрезок [0, 1].

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

  1. Фреймворк выбрасывает исключение, если вход ReLU оказался ровно нулём
  2. В точке ноль ReLU подменяют сигмоидой, у которой производная 0.5
  3. Берут значение из субградиента [0, 1], обычно 0; точно в 0 попасть почти невероятноправильный ответ
  4. Используют численный градиент центральной разностью только в этой одной точке излома функции

Разбор

Для выпуклой функции в точке излома есть множество субградиентов, у ReLU в нуле это отрезок [0, 1]. PyTorch возвращает 0. Вход ровно 0.0 у float-активации встречается редко, а на сходимость стохастического обучения выбор значения практически не влияет. Похоже обрабатываются |x| и L1-регуляризация.

  • Исключений никто не бросает.
  • Подмены функций нет.
  • Численный градиент в автодиффе не используется.

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

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