Лучшая визуализация регуляризации L1 и L2

Интуитивное объяснение того, почему регуляризация L1 уменьшает веса до 0.

Регуляризация - популярный метод предотвращения переобучения моделей. Идея проста: я хочу, чтобы веса моей модели были небольшими, поэтому я добавлю штраф за большие веса. Двумя наиболее распространенными методами регуляризации являются регуляризация Лассо (или L1) и регуляризация Риджа (или L2). Они наказывают модель либо ее абсолютным весом (L1), либо квадратом ее веса (L2). Возникает вопрос: что же мне выбрать? и почему Лассо выполняет выбор функций?

По старому

Вы часто слышите поговорку L1-регуляризация имеет тенденцию сокращать коэффициенты неважных функций до 0, а L2 - нет во всех лучших объяснениях регуляризации, как видно из здесь и здесь. Визуальные объяснения обычно состоят из диаграмм, подобных этой очень популярной картинке из Elements of Statistical Learning Хасти, Тибширани и Фридмана:

также можно найти здесь в статье Распознавание образов и машинное обучение от Бишопа:

Я нашел эти диаграммы не интуитивно понятными, и поэтому сделал более простую диаграмму, которая кажется намного более легкой для понимания.

Новый путь

Вот мой шаг за шагом с визуализацией. Во-первых, изображения выше на самом деле трехмерны, что плохо переносится на книгу или экран. Вместо этого давайте вернемся к основам с линейным набором данных.

Сначала мы создаем действительно простой набор данных с одним весом: y = w * x. Наша линейная модель попытается узнать вес w.

Притворяясь, что мы не знаем правильного значения w, мы случайным образом выбираем значения w. Затем мы вычисляем потери (среднеквадратичную ошибку) для различных значений w. Потери равны 0 при w = 0,5, что является правильным значением w, как мы определили ранее. По мере удаления от w = 0,5 потери возрастают.

Теперь мы построим наши функции потерь регуляризации. Потери L1 равны 0, когда w равно 0, и линейно возрастают по мере удаления от w = 0. Потери L2 нелинейно возрастают по мере удаления от w = 0.

Теперь самое интересное. Регуляризованный убыток рассчитывается путем добавления вашего срока убытка к вашему сроку регуляризации. Выполнение этого для каждого из наших потерь выше дает нам синюю (регуляризованные потери L1) и красную (регуляризованные потери L2) ниже кривые.

В случае регуляризованных потерь L1 (синяя линия) значение w, которое минимизирует потери, равно w = 0. Для регуляризованных потерь L2 (красная линия) значение w, которое минимизирует потери, ниже фактического значения (0,5), но не достигает 0.

Вот и все, для тех же значений лямбда регуляризация L1 уменьшила вес функции до 0!

Другой способ думать об этом - использовать градиентный спуск для минимизации функции потерь. Мы можем проследить градиент функции потерь до точки, где потери сведены к минимуму. Затем регуляризация добавляет градиент к градиенту нерегулярных потерь. Регуляризация L1 добавляет фиксированный градиент к потерям при каждом значении, отличном от 0, в то время как градиент, добавленный регуляризацией L2, уменьшается по мере приближения к 0. Следовательно, при значениях w, которые очень близки к 0, градиент спуск с регуляризацией L1 продолжает подталкивать w к 0, в то время как градиентный спуск на L2 ослабевает по мере приближения к 0.

Блокнот и код, использованные для создания этих визуализаций, можно найти в моем репозитории на github! Вы также можете подписаться на меня в Twitter @ninjanugget или linkedin