четверг, 30 августа 2018 г.

Регуляризация для разреженных данных: L1 регуляризация

Разреженные векторы часто содержат много измерений. Создание пересечения свойств приводит к еще большему количеству измерений. Если передать такие многомерные вектора в модель, то ее размер может стать огромным и потребует огромное количество RAM.

В многоразмерном разреженном векторе хорошо бы стимулировать веса так, чтобы уменьшить их до нуля, где это возможно. Вес равный нулю удаляет соответствующее свойство из модели. Зануление свойств сохраняет RAM и может уменьшить шум в модели.

Например, рассмотрим набор данных о домах, который покрывает не только Калифорнию, а весь земной шар. Складывание широты в корзины по минутам (60 минут в одном градусе) даст около 10 000 измерений в разреженном кодировании; складывание долготы по минутам даст около 20 000 измерений. Пересечение этих двух свойств приведет примерно к 200 000 000 измерений. Многие из 200 000 000 измерений представляют области с крайне малым населением (например, в середине океана), так что будет крайне затруднительно использовать эти данные, чтобы генерализоваться эффективно. Будет глупо тратить RAM для хранения этих ненужных измерений. Поэтому, было бы хорошо, сделать веса не значимых измерений равными нулю, что позволит нам избежать траты ресурсов во время использования модели.

Мы можем кодировать эту идею в опитимизационную проблему, выполненную во время тренировки модели, добавив подходящую регуляризацию.

Справится ли L2 регуляризация с этой задачей? К сожалению, нет. L2 регуляризация стимулирует веса быть маленькими, но не приводит их к нулю.

Альтернативная идея будет попробовать применить регуляризацию, которая угнетает модели по количеству ненулевых коэффициентных значений. Увеличение этого количества будет нормализоваться только при достаточной способности модели прогнозировать результаты. К сожалению, хотя такой подход интуитивно приемлем, на деле он оказывается вычислительно-трудным. Поэтому, эта идея, известная как L0 регуляризация, не используется на практике.

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

L1 и L2 регуляризация

L1 и L2 угнетает веса по-разному:

  • L2 угнетает квадрат веса
  • L1 угнетает модуль веса

Следовательно, L1 и L2 имеют разные производные:

  • Производная L2 равна 2*вес
  • Производная L1 равна k (константа, чье значение не зависимо от веса)

Производную L2 можно рассматривать как намеренное удаление x% веса каждый раз. Удаление x процентов даже миллион раз никогда не приведет вес к нулю. Поэтому L2 при любой скорости не приводит веса до 0.

Производную L1 можно рассматривать как намеренное удаление константы от веса каждый раз. Однако, благодаря абсолютным значениям, L1 пересекает 0 при вычитании, но при отрицательном значении просто приводит его к нулю. Например, вычитание уменьшило вес с +0.1 до -0.2, L1 установит вес равным 0. В итоге, L1 приводит веса к нулю.

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

Следует отметить, что это описание истинно для одно-мерных моделей.