Почему функция модуль не подходит для градиентного спуска
Что проверяют
Понимаете ли вы, какие требования градиентный спуск предъявляет к функции, и отличаете ли «недифференцируема в одной точке» от «оптимизировать невозможно». Вопрос с подвохом: модуль в машинном обучении используется постоянно.
Как отвечать
Функция f(x) = |x| дифференцируема всюду, кроме нуля: слева производная равна минус единице, справа плюс единице, в самой точке скачок. Формально это нарушает условие гладкости, на которое опираются оценки сходимости градиентного спуска.
Но практическая проблема не в самой точке: попасть ровно в ноль почти невозможно, а библиотеки автоматического дифференцирования вернут там одно из односторонних значений и шаг всё равно сделают. Проблема в поведении рядом: модуль градиента не убывает при приближении к минимуму. У квадратичной функции градиент затухает и шаги сами становятся мельче, у модуля длина шага остаётся прежней, и итерации начинают колебаться вокруг минимума с амплитудой порядка скорости обучения. Сходимость появляется только при убывающем шаге.
Что делают на практике: сглаживают окрестность нуля (Huber или smooth L1: квадрат вблизи нуля и линейный хвост дальше), используют субградиентные и проксимальные методы, для L1-регуляризации это мягкое пороговое правило, либо просто снижают скорость обучения по расписанию.
Стоит добавить, что средняя абсолютная ошибка и L1-регуляризация живут в проде: первая устойчива к выбросам, вторая даёт разреженные веса. Правильная формулировка не «модуль нельзя», а «модуль требует другой техники и другого расписания шага».
Где спотыкаются
Говорят, что обучение «сломается» в нуле. Никакого исключения не будет, градиент вернётся. Симптом другой: лосс перестаёт снижаться и дрожит на плато, и по этому признаку проблему и узнают.
Делают вывод «значит всегда берём квадрат». Квадратичная ошибка штрафует выбросы квадратично, и один аномальный объект утащит модель за собой. Именно поэтому абсолютную ошибку и Huber выбирают осознанно.
Путают негладкость с невыпуклостью. Модуль выпуклый, минимум у него один, локальных ловушек нет. Невыпуклость это отдельный сюжет про нейросети, и смешивать две темы в одном ответе плохо.