L1-регуляризатор. Отличия между L1- и L2-регуляризаторами

Практический курс по ML: https://stepik.org/course/209247/

Смотреть материал на YouTube | RuTube

На предыдущем занятии мы с вами подробно познакомились с принципом L2-регуляризации коэффициентов модели и увидели, что эта эвристика действительно позволяет заметно уменьшить переобучение модели и увеличить ее обобщающие свойства. Но раз L2-регуляризатор – это всего лишь эвристика, то почему бы не попробовать и другие подходы, например, вместо квадрата нормы вектора весовых коэффициентов:

взять модули – норму первой степени:

В машинном обучении это называется L1-регуляризацией. Чтобы ее применить на практике, например, в градиентных алгоритмах, нам нужно уметь вычислять производную по функции потерь. Но, как вы знаете из курса математики, функция  не имеет производной в точке . Поэтому найти оптимальные коэффициенты аналитически у нас не получится. В этом случае применяют численные методы, например, градиентный спуск. Градиент функции потерь с L1-регуляризатором будет иметь вид:

,

где

В итоге, стохастический градиентный алгоритм (SGD) можно записать, следующим образом:

Формально, конечно, нужно было умножить последнее слагаемое на , но я просто переобозначил параметр .

Давайте посмотрим, как будет работать такой L1-регуляризатор в уже знакомой нам простой задаче классификации гусениц и божьих коровок. Изначально, у нас есть следующие результаты измерений:

Ширина

Длина

Жук

1

10

50

гусеница

-1

2

20

30

божья коровка

+1

3

25

30

божья коровка

+1

4

20

60

гусеница

-1

5

15

70

гусеница

-1

6

40

40

божья коровка

+1

7

30

45

божья коровка

+1

8

20

45

гусеница

-1

9

40

30

божья коровка

+1

10

7

35

гусеница

-1

Это обучающая выборка с двумерными входными векторами:

и целевыми ответами:

Давайте теперь расширим пространство признаков, но специально сделаем их линейно-зависимыми, например, такими:

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

Следующим шагом построим модель и определим функционал качества для обучения модели. Как всегда, выберем простой линейный классификатор вида:

который выдает -1 гусениц и +1 – для божьих коровок. А эмпирический риск:

будем минимизировать уже знакомой нам сигмоидной функцией потерь:

с производной по , равной:

Такую задачу мы с вами уже решали. Добавим сюда L1-регуляризатор и стохастический градиентный алгоритм примет вид:

Реализуем его на Python:

machine_learning_12_L1.py

Смотрите, если поставить значение параметра , то коэффициенты принимают значения:

[ 1.94650481e-05  3.18980823e-05  6.43046505e-02 -3.38310192e-02   3.46815652e-04]

А если убрать регуляризатор (), то получим уже такой вектор весовых коэффициентов:

[ 0.00804764 -0.00525472  0.0804764  -0.05254715  0.01396463]

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

Вы можете подумать, что ослабление признаков через коэффициенты можно добиться любым регуляризатором, например L2. Давайте проверим. Для этого достаточно последнее слагаемое в производной функции потерь записать в виде:

После запуска программы видим результат:

[ 0.00798617 -0.00536355  0.07986168 -0.05363546  0.01311311]

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

Но почему эти два регуляризатора ведут себя так по-разному? Объяснить этот эффект можно несколькими способами. Первый, самый простой – графический.

Давайте для простоты рассмотрим двумерное признаковое пространство с двумя весовыми коэффициентами :

В этом пространстве есть точка минимума  функционала  и когда мы работаем без регуляризаторов, то именно ее и стараемся обнаружить. Но, добавляя регуляризацию, возникает дополнительное условие со множеством точек, удовлетворяющих L1-регуляризатору, в виде ромба, и множеством точек для L2-регуляризатора виде круга. Так вот, суммируя первую область для  и вторую – для регуляризатора, у нас получается более сложная форма поверхности оптимизируемой функции в пространстве признаков, с новой точкой минимума , находящейся на пересечении кривых уровня этих двух составляющих. И градиентный алгоритм устремляется к этой новой точке.

К чему это приводит, я думаю, вы уже догадались? При L1-регуляризаторе вероятность соприкоснуться функционалу качества  с одним из углов ромба гораздо выше, чем с его стороной. Но, в углах ромба мы имеем один не нулевой признак, а второй – строго нулевой. Именно поэтому происходит явное обнуление неинформативных признаков при L1-регуляризации весовых коэффициентов. Используя L2-регуляризатор, мы имеем круг и результирующая точка минимума уже не лежит строго на осях, она равновероятно может оказаться в любом другом положении. Отсюда следует, что нерелевантные коэффициенты не обнуляются, а могут лишь несколько уменьшаться, не более того.

И, обратите внимание, применение L1-регуляризатора не гарантирует обнуление всех не значимых признаков. Этот эффект проявляется лишь с некоторой большой вероятностью. Но вполне может так получиться, что точка пересечения областей придется на грань ромба и некоторые признаки не устремятся к нулю, даже если будут линейно-зависимыми.

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

,

где . И затем проанализируем, как будут меняться квадрат нормы  и единичная норма  вектора  при изменении эти координат на небольшое значение :

Вначале будем менять первую координату:

При изменении второй координаты:

Смотрите, когда мы уменьшаем большее значение , то квадратичная норма уменьшается быстрее, чем при изменении малого второго значения . А в случае с единичной нормы – без разницы какое из значений уменьшать. В обоих случаях она будет меняться на одну и ту же величину. Из этого следует, что при использовании L2-регуляризаторов предпочтение будет отдаваться уменьшению больших величин, а при использовании L1-регуляризаторов – все значения вектора  меняются с одинаковыми приоритетами. Поэтому мы вполне можем увидеть не просто малые значения, а величины, стремящиеся к нулю.

Я думаю этих двух объяснений вполне достаточно, чтобы понять отличия в поведении этих двух регуляризаторов. Если вам все же этого недостаточно, то в литературе можно найти и другие объяснения особенностей работы L1 и L2-регуляризаторов.

Практический курс по ML: https://stepik.org/course/209247/

Видео по теме