Выбор ответа Senior Производные и градиент обновлено
Производная ReLU в нуле
Вопрос
Функция ReLU(x) = max(0, x) не дифференцируема в нуле. Как с этим живут фреймворки и почему это не проблема?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Берут значение из субградиента [0, 1], обычно 0; точно в 0 попасть почти невероятно. Для выпуклой функции в точке излома есть множество субградиентов, у ReLU в нуле это отрезок [0, 1].
Варианты ответа
- Фреймворк выбрасывает исключение, если вход ReLU оказался ровно нулём
- В точке ноль ReLU подменяют сигмоидой, у которой производная 0.5
- Берут значение из субградиента [0, 1], обычно 0; точно в 0 попасть почти невероятноправильный ответ
- Используют численный градиент центральной разностью только в этой одной точке излома функции
Разбор
Для выпуклой функции в точке излома есть множество субградиентов, у ReLU в нуле это отрезок [0, 1]. PyTorch возвращает 0. Вход ровно 0.0 у float-активации встречается редко, а на сходимость стохастического обучения выбор значения практически не влияет. Похоже обрабатываются |x| и L1-регуляризация.
- Исключений никто не бросает.
- Подмены функций нет.
- Численный градиент в автодиффе не используется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.