- Отбор признаков в машинном обучении
- Даниил Дятченко
- инженер-программист компании «Рексофт»
- Сильно коррелированные переменные
- P-значения
- Прямой отбор
- Обратный отбор
- Рекурсивное исключение признаков
- Диаграмма важности признаков
- Регуляризация
- L1 и L2 регуляризация
- Регуляризация
- Содержание
- Мотивация [ править ]
- На примере линейной регрессии [ править ]
- На примере логистической регрессии [ править ]
- Основные виды регуляризации [ править ]
- Эластичная сеть [ править ]
- Вероятностная интерпретация регуляризации [ править ]
- Эквивалентная вероятностная задача [ править ]
- Принцип максимума совместного правдоподобия данных и модели [ править ]
- Нормальный регуляризатор [ править ]
- Лапласовский регуляризатор [ править ]
- Регуляризация в линейной регрессии [ править ]
- Гребневая регрессия [ править ]
- Лассо регрессия [ править ]
- Сравнение гребневой и лассо регрессий [ править ]
- Регуляризация в алгоритмах [ править ]
- Градиентный спуск [ править ]
- Метод опорных векторов [ править ]
- Другие использования регуляризации [ править ]
- Логистическая регрессия [ править ]
- Нейронные сети [ править ]
- L1- и L2-регуляризация в машинном обучении
- Общая структура программы
- Понимание регуляризации
- Зачем нужны два вида регуляризации?
- Реализация регуляризации
- Нахождение хороших весовых значений регуляризации
- Заключение
Отбор признаков в машинном обучении
Даниил Дятченко
инженер-программист компании «Рексофт»
В реальном мире данные не всегда такие чистые, как порой думают бизнес-заказчики. Именно поэтому востребован интеллектуальный анализ данных (data mining и data wrangling). Он помогает выявлять недостающие значения и паттерны в структурированных с помощью запросов данных, которые не может определить человек. Для того, чтобы найти и использовать эти паттерны для предсказания результатов с помощью обнаруженных связей в данных пригодится машинное обучение (Machine Learning).
Для понимания любого алгоритма необходимо просмотреть все переменные в данных и выяснить, что эти переменные представляют. Это крайне важно, потому что обоснование результатов основывается на понимании данных. Если данные содержат 5 или даже 50 переменных, можно изучить их все. А что если их 200? Тогда просто не хватит времени изучить каждую отдельную переменную. Более того, некоторые алгоритмы не работают для категориальных данных, и тогда придется привести все категориальные колонки к количественным переменным (они могут выглядеть количественными, но метрики покажут, что они категориальные), чтобы добавить их в модель. Таким образом, количество переменных увеличивается, и их становится около 500. Что теперь делать? Можно подумать, что ответом будет снижение размерности. Алгоритмы снижения размерности уменьшают число параметров, но негативно влияют на интерпретируемость. Что если существуют другие техники, которые исключают признаки и при этом позволяют легко понять и интерпретировать оставшиеся?
В зависимости от того, основан анализ на регрессии или классификации, алгоритмы отбора признаков могут отличаться, но главная идея их реализации остается одной и той же.
Сильно коррелированные переменные
Сильно коррелированные друг с другом переменные дают модели одну и ту же информацию, следовательно, для анализа не нужно использовать их все. Например, если набор данных (dataset) содержит признаки «Время в сети» и «Использованный трафик», можно предположить, что они будут в некоторой степени коррелированы, и мы увидим сильную корреляцию, даже если выберем непредвзятый образец данных. В таком случае в модели нужна только одна из этих переменных. Если использовать обе, то модель окажется переобучена (overfit) и предвзята относительно одного отдельного признака.
P-значения
В таких алгоритмах, как линейная регрессия, начальная статистическая модель — это всегда хорошая идея. Она помогает показать важность признаков с помощью их p-значений, которые были получены этой моделью. Установив уровень значимости, мы проверяем полученные p-значения, и если какое-то значение оказывается ниже заданного уровня значимости, то данный признак объявляется значимым, то есть изменение его значения, вероятно, приведет к изменению значения цели (target).
Прямой отбор
Прямой отбор — это техника, заключающаяся в применении пошаговой регрессии. Построение модели начинается с полного нуля, то есть пустой модели, а затем каждая итерация добавляет переменную, которая вносит улучшение в строящуюся модель. То, какая переменная добавляется в модель, определяется ее значимостью. Это может быть рассчитано с использованием различных метрик. Самым распространенным способом является применение p-значений, полученных в изначальной статистической модели с использованием всех переменных. Иногда прямой отбор может приводить к переобучению модели, потому что в модели могут оказаться сильно коррелированные переменные, даже если они предоставляют одну и ту же информацию модели (но модель при этом показывает улучшение).
Обратный отбор
Обратный отбор тоже заключается в пошаговом исключении признаков, однако в противоположном направлении по сравнению с прямым. В данном случае начальная модель включает в себя все независимые переменные. Затем переменные исключаются (по одной за итерацию), если они не несут ценности для новой регрессионной модели в каждой итерации. В основе исключения признаков лежат показатели p-значений начальной модели. В этом методе тоже присутствует неопределенность при удалении сильно коррелированных переменных.
Рекурсивное исключение признаков
RFE является широко используемой техникой/алгоритмом для выбора точного числа значимых признаков. Иногда метод используется, чтобы объяснить некоторое число «самых важных» признаков, влияющих на результаты; а иногда для уменьшения очень большого числа переменных (около 200-400), и оставляются только те, которые вносят хоть какой-то вклад в модель, а все остальные исключаются. RFE использует ранговую систему. Признакам в наборе данных выставляются ранги. Затем эти ранги используются для рекурсивного исключения признаков в зависимости от коллинеарности между ними и значимости этих признаков в модели. Кроме ранжирования признаков, RFE может показать, важны ли эти признаки или нет даже для заданного числа признаков (потому что очень вероятно, что выбранное число признаков может являться не оптимальным, и оптимальное число признаков может быть как больше, так и меньше выбранного).
Диаграмма важности признаков
Говоря об интерпретируемости алгоритмов машинного обучения, обычно обсуждают линейные регрессии (позволяющие проанализировать значимость признаков с помощью p-значений) и деревья решений (буквально показывающие важность признаков в форме дерева, а заодно и их иерархию). С другой стороны, в таких алгоритмах, как Random Forest, LightGBM и XG Boost, часто используется диаграмма значимости признаков, то есть строится диаграмма переменных и «количества их важности». Это особенно полезно, когда нужно предоставить структурированное обоснование важности признаков с точки зрения их влияния на бизнес.
Регуляризация
Регуляризация делается для контроля за балансом между предвзятостью (bias) и отклонением (variance). Предвзятость показывает, насколько модель переобучилась (overfit) на тренировочном наборе данных. Отклонение показывает, насколько различны были предсказания между тренировочным и тестовым датасетами. В идеале и предвзятость, и дисперсия должны быть маленькими. Тут на помощь приходит регуляризация! Существует две основных техники:
L1 Регуляризация — Лассо: Лассо штрафует весовые коэффициенты модели для изменения их важности для модели и может даже обнулить их (т.е. убрать эти переменные из конечной модели). Обычно Лассо используется, если набор данных содержит большое число переменных и требуется исключить некоторые из них, чтобы лучше понять, как важные признаки влияют на модель (т.е. те признаки, которые были выбраны Лассо и у которых установлена важность).
25 февраля в 09:00, Москва и онлайн, От 4900 до 12 900 ₽
L2 Регуляризация — методом Ridge: Задачей Ridge является сохранение всех переменных и в то же время присвоение им важности на основе вклада в эффективность модели. Ridge будет хорошим выбором, если набор данных содержит небольшое число переменных и все они необходимы для интерпретации выводов и полученных результатов.
Так как Ridge оставляет все переменные, а Лассо лучше устанавливает их важность, был разработан алгоритм, объединяющий лучшие особенности обеих регуляризаций и известный как Elastic-Net.
Существует еще множество способов отбора признаков для машинного обучения, но главная идея всегда остается одной и той же: продемонстрировать важность переменных и затем исключить некоторые из них на основе полученной важности. Важность — это очень субъективный термин, так как это не одна, а целый набор метрик и диаграмм, который может использоваться для нахождения ключевых признаков.
Источник
L1 и L2 регуляризация
Feb 13, 2020 · 5 min read
Меня зовут Леонид, и я врач, который пытается разобраться в базовых принципах машинного обучения. И это мой первый пост, наверно вообще в жизни.
Дисклеймер: я не претендую на академичность или точные определения в своем посте. Все что тут написано лично мой опыт который (так же как и все остальное в интернете) не надо брать за истину. Nullius in verba.
Я уже пол года прохожу различные обучающие онлайн курсы, ни одного не завершил по обстоятельствам основной работы. Поэтому хотел создать небольшой блог с памятками, чтобы материал который я пытался вспомнить оставался тут.
“Коротко об основных остановках на дороге машинного обучения.”
Один из с а мых закрытых вопросов касается регуляризации. Все основные формулы, не похожи друг на друга и поэтому можно узнать как устроен тот или иной этап (от входного нейрона до обратного распространения ошибки), просто посмотрев различные источники которые объяснят на примерах или под другим углом. Но вот регуляризация остается всегда регуляризацией, почувствовать ее для меня было очень трудно. То есть я понимал что для некоторых задач она значима, но не мог представить как она работает.
Сперва нужно определить, что перееобучение — это когда какие то веса (w) имеют слишком большой показатель (нейроны с большими весами “стягивают” на себя все признаки, сужая “просвет”, что не позволяет сети работать в полевых условиях).
По рисунку мы можем сказать, что некоторая нейросеть которая имеет очень много признаков (весов) которые имеют пики и хорошо подходят для тестовых данных, не сможет работать на новых данных.
Получается чем более линейная функция, тем более она недообучена. И чтобы сделать функцию “более линейной” прибавляются суммы весов к ошибке.
Чтобы понять регуляризацию, начал с того, что часик побаловался в песочнице tensorflow. Стало понятно что L1 регуляризация стабильно выключает ненужные нейроны зануляя весы. Получается тренировка максимально быстро и точно.
В итоге, регуляризация:
Короче, это про упрощение и сглаживание.
В ML есть два основных вида регуляризации. Википедия их описывает так:
L1-регуляризация (англ. lasso regression), или регуляризация через манхэттенское расстояние:
Если короче, то прибавление к лосс-функции суммы весов в модуле. Она добавляет « критическую величину» коэффициента, как дополнение к функции потерь. То есть, если весы на расстоянии лямбда ближе к нулю, то они становятся равными нулю и уходят в игнор, тем самым отбирая только важные признаки и в следствии уменьшая саму сеть, что экономит ресурсы.
В графике расстояние лямбда прижимается к нулю. Это расстояние и выключает низкие веса.
Меня на самом деле беспокоит до сих пор вопрос про переобучение. Понятно, что система с большим количеством признаков и пиками на этих признаках обращает внимание только на них. Реуляризация же наоборот избавляется от ненужных признаков (шумов) и упрощает саму модель. Но не будет ли такая модель упрощена до степени переобучения на определенной цели. То есть для чего то одного простого такая сеть подойдет, но стоит внести какие то дополнения (это легко понять если представить более сложное изображение с дополнительными признаками, допустим цветовой эмоции) то достигнуть цели станет просто невозможно. Поэтому наверно нужно быть предельно осторожным с регуляризацией и не быть довольными только тестовыми данными.
L2- регуляризация, или регуляризация Тихонова (в англоязычной литературе — ridge regression или Tikhonov regularization), для интегральных уравнений позволяет балансировать между соответствием данным и маленькой нормой решения:
Тут получается что функция занижает пики прибавляя сумму весов в квадрате с множителем лямбда.
В графике происходит легкое смещение (не дисперсия) добавляя статистическую ошибку, которая не влияет на точность, но позволяет не переобучиться. Соответственно если вы поставите большую коэффициент (лямбда) L2, то система никогда не обучится, просто из-за того что сильно сместиться. Но если лямбда будет маленькой то и смещение будет маленьким, и весь смысл регуляризации так же будет минимальным.
Член λ называется параметром сглаживания. Он балансирует кросс-энтропийную функцию ошибок и регуляризационный штраф. Если значение λ велико, весовые коэффициенты будут стремиться к нулю, если же значение λ мало или равно нулю, то весовые коэффициенты будут просто стремиться к минимизации кросс-энтропийной функции ошибок. Как правило, значение параметра λ устанавливают 0,1 или 1, или в районе между этими значениями, но в основном его значение зависит от конкретных данных. Вам нужно попробовать разные значения и понаблюдать за поведением функции затрат и конечным результатом. Не существует универсальной методики определения значения параметра λ. (craftappmobile.com )
В сумме можно посмотреть на этот рисунок
Регуляризация создает некое абстрактное поле (зеленое) в градиентном спуске (слоистые овалы) из которого не может выйти обучение сети. Когда на самом деле абсолютное дно обучения (B с шапочкой) находится за пределами этого поля. При этом логически если мы увеличиваем Лямбду, то поле сужается, то есть с увеличением шкалы нормализации весов, найти какое либо дно станет труднее (возникнет “пересглаженность” 🙂 ).
По идее регуляризация выдрана из контекста сглаживающих методов среди которых есть еще и генетические методы, LARS и даже полный перебор.
Спасибо за внимание! Если интересно, то буду писать дальше…
Источник
Регуляризация
Определение: |
Регуляризация (англ. regularization) в статистике, машинном обучении, теории обратных задач — метод добавления некоторых дополнительных ограничений к условию с целью решить некорректно поставленную задачу или предотвратить переобучение. Чаще всего эта информация имеет вид штрафа за сложность модели. |
Содержание
Мотивация [ править ]
Как говорилось ранее, регуляризация полезна для борьбы с переобучением. Если вы выбрали сложную модель, и при этом у вас недостаточно данных, то легко можно получить итоговую модель, которая хорошо описывает обучающую выборку, но не обобщается на тестовую.
На примере линейной регрессии [ править ]
На Рис. 1 представлена зависимость, которая хорошо подходит для описания данных, а на Рис. 2 — модель, слишком сильно заточенная под обучающую выборку.
Однин из способов бороться с негативным эффектом излишнего подстраивания под данные — использование регуляризации, т. е. добавление некоторого штрафа за большие значения коэффициентов у линейной модели. Тем самым запрещаются слишком «резкие» изгибы, и предотвращается переобучение.
На примере логистической регрессии [ править ]
Необходимость регуляризации можно увидеть и на другом примере — при использовании логистической регресии. Представьте, что ваша обучающая выборка была линейно разделима. В таком случае в процессе оптимизации значения весов модели уйдут в бесконечность, и вместо сигмойды получится «ступенька», представленная на Рис. 3.
Это плохо, ибо произошло затачивание под обучающую выборку. Как и в предыдущем примере, побороться с этим можно путем добавления регуляризатора, не дающего весам принимать слишком большие значения.
Основные виды регуляризации [ править ]
В представленных ниже формулах для эмпирического риска [math]Q[/math] : [math]\mathcal
Запишем задачу настройки вектора параметров [math]\beta[/math] :
где [math]\mathcal
[math]\begin
В новых переменных функционал становится гладким, но добавляются ограничения-неравенства:
Эластичная сеть [ править ]
Вероятностная интерпретация регуляризации [ править ]
Эквивалентная вероятностная задача [ править ]
Перед нами стоит задача — минимизировать эмпирический риск:
[math]Q(\beta, X^l)=\sum\limits _^l\mathcal
[math]p(X^l|\beta)=\prod\limits_^lp(x_,y_|\beta) \rightarrow \max\limits_<\beta>[/math]
Удобнее рассматривать логарифм правдоподобия:
[math]L(\beta, X^l)=\ln p(X^l|\beta)=\sum\limits_^l \ln p(x_, y_|\beta) \rightarrow \max\limits_<\beta>[/math]
Можно заключить, что задачи в исходном и вероятностном представлении эквивалентны, если положить:
[math]-\ln p(x_, y_|\beta)=\mathcal
Принцип максимума совместного правдоподобия данных и модели [ править ]
[math]p(X^l, \beta; \gamma)=p(X^l|\beta)p(\beta;\gamma)[/math]
Таким образом, приходим к принципу максимума совместного правдоподобия данных и модели:
[math]L_<\gamma>(\beta, X^l)=\ln p(X^l, \beta;\gamma)=\sum\limits_^l \ln p(x_, y_|\beta) + \ln p(\beta; \gamma) \rightarrow \max\limits_<\beta>[/math]
Функционал [math]L_<\gamma>[/math] распадается на два слагаемых: логарифм правдоподобия и регуляризатор, не зависящий от данных. Второе слагаемое ограничивает вектор параметров модели, не позволяя ему быть каким угодно.
В итоге мы получили, что с байесовской точки зрения многие методы регуляризации соответствуют добавлению некоторых априорных распределений на параметры модели. При этом можно определить распределения, которые соответствуют представленным ранее [math]L_<1>[/math] и [math]L_<2>[/math] регуляризаторам.
Нормальный регуляризатор [ править ]
[math]\beta \sim N(0, \sigma^2)[/math]
Логарифмируя, получаем квадратичный регуляризатор:
Лапласовский регуляризатор [ править ]
[math]\beta \sim Laplace(0, C)[/math]
Регуляризация в линейной регрессии [ править ]
$g(x, \beta) = \sum\limits_
В итоге оптимизируемый функционал эмпирического риска выглядит следующим образом:
Гребневая регрессия [ править ]
Итоговый минимизируемый функционал с поправкой:
Оценим эффект, который оказывает добавление гребня. Выразим регуляризованное МНК-решение через сингулярное разложение:
Теперь найдём регуляризованную МНК-аппроксимацию целевого вектора y:
Поэтому данный метод называют также сжатие или сокращение весов.
В нерегуляризованном случае:
В случае с гребнем:
Лассо регрессия [ править ]
Итоговый минимизируемый функционал с поправкой:
Сравнение гребневой и лассо регрессий [ править ]
В случае с гребневой регрессией:
В случае с лассо регрессией:
$\beta_
Регуляризация в алгоритмах [ править ]
Градиентный спуск [ править ]
[math]Q(w, X^l)=\sum\limits_^l\mathcal
где [math]\eta \gt 0[/math] — величина шага в направлении антиградиента.
Регуляризация — одна из эвристик улучшения градиентных методов обучения. Основным способом уменьшить переобучение является квадратичная регуляризация, называемая также сокращением весов. Чтобы ограничить рост абсолютных значений весов, к минимизируемому функционалу [math]Q(w)[/math] добавляется штрафное слагаемое:
Это приводит к появлению аддитивной поправки в градиенте:
В результате правило обновления весов принимает вид:
Регуляризация предовтращает паралич, повышает устойчивость весов в случае мультиколлинеарности, повышает обобщающую способность алгоритма и снижает риск переобучения. Однако есть и недостатки — параметр [math]\tau[/math] необходимо выбирать с помощью кросс-валидации, что связано с большими вычислительными затратами.
Метод опорных векторов [ править ]
Метод опорных векторов (SVM) используется для задач классификации и регрессии. В нем строится гиперплоскость, разделяющая объекты выборки оптимальным образом.
Другие использования регуляризации [ править ]
Логистическая регрессия [ править ]
Как было показано в мотивационном примере, для логистической регрессии может быть полезно использовать регуляризацию.
Аналогично можно использовать и другие регуляризаторы.
Нейронные сети [ править ]
Для нейронной сети помимо добавления штрафного слагаемого к эмпирическому риску активно используют и другой метод борьбы с переобучением — прореживание сети (англ. dropout), в ходе которого упрощают сеть, руководствуясь правилом — если функция ошибки не изменяется, то сеть можно упрощать и дальше. Подробнее об этом можно почитать в статье, рассказывающей о практике реализации нейронных сетей.
Источник
L1- и L2-регуляризация в машинном обучении
L1- и L2-регуляризация — эта два тесно связанных метода, которые можно применять в алгоритмах машинного обучения (machine learning, ML) для уменьшения степени переобучения модели (model overfitting). Исключение переобучения приводит к генерации модели, которая обеспечивает более качественное прогнозирование. В этой статье я расскажу, что такое регуляризация с точки зрения разработчика ПО. Объяснить идеи, лежащие в основе регуляризации, весьма непросто — и не потому, что они трудны, а скорее потому, что существует несколько не связанных друг с другой идей.
Я проиллюстрирую регуляризацию с помощью классификации по логистической регрессии (logistic regression, LR), но регуляризацию можно использовать со многими типами машинного обучения, в частности для классификации нейронной сети. Цель LR-классификации — создать модель, предсказывающую значение переменной, которая принимает одно из двух возможных значений. Допустим, вам требуется спрогнозировать результат футбольной команды (проигрыш = 0, выигрыш = 1) в предстоящей игре, основываясь на текущей доле выигрышей команды (x1), расположении поля (x2) и количестве игроков, отсутствующих из-за травм (x3).
Если Y — прогнозируемое значение, то LR-модель для этой задачи принимает вид:
Здесь b0, b1, b2 и b3 — веса, которые являются просто числовыми значениями, которые нужно определить. Если на словах, то вы вычисляете значение z, которое представляет собой сумму входных значений, помноженных на b-веса, потом добавляете константу b0 и передаете значение z в уравнение, которое использует математическую константу e. Оказывается, что Y всегда будет находиться между 0 и 1. Если Y меньше 0.5, вы заключаете, что прогнозируемый вывод равен 0, а если Y больше 0.5 — что такой вывод равен 1. Заметьте, что для n функций (features) будет n+1 b-весов.
Например, доля выигрышей команды на данный момент составляет 0.75, она будет играть на поле противника (–1), а три игрока выбыли из-за травм. Теперь предположим, что b0 = 5.0, b1 = 8.0, b2 = 3.0, and b3 = –2.0. Тогда z = 5.0 + (8.0)(0.75) + (3.0)(–1) + (–2.0)(3) = 2.0, а значит Y = 1.0 / (1.0 + e^–2.0) = 0.88. Поскольку Y больше 0.5, вы прогнозируете, что команда победит в предстоящей игре.
Полагаю, что лучший способ объяснить регуляризацию — исследовать конкретный пример. Взгляните на экранный снимок демонстрационной программы (рис. 1). Вместо использования реальных данных демонстрационная программа начинает с генерации 1000 элементов синтетических данных. В каждом элементе имеется 12 переменных-предикторов (часто называемых функциями [features] в терминологии ML). Значение зависимой переменной находится в последнем столбце. После создания 1000 элементов данных этот набор случайным образом разбивается на обучающий набор с 800 элементами (для нахождения b-весов модели) и проверочный (тестовый) набор с 200 элементами (для оценки качества получаемой модели).
Рис. 1. Регуляризация с классификацией по логистической регрессии
Затем программа обучила LR-классификатор без применения регуляризации. Полученная модель имела точность 85.00% на обучающих данных и 80.50% на проверочных. Величина в 80.50% более релевантна из этих двух значений и является примерной оценкой того, какую точность вы могли бы ожидать от модели на новых данных. Как я вскоре поясню, модель была переобучена, что привело к посредственной точности прогнозирования.
Потом программа выполнила кое-какую обработку, чтобы найти хорошее весовое значение L1-регуляризации и хорошее весовое значение L2-регуляризации. Веса регуляризации — это отдельные числовые значения, используемые в процессе регуляризации. В демонстрации хорошее L1-весовое значение было определено равным 0.005, а хорошее L2-весовое значение — 0.001.
Сначала программа выполнила обучение с использованием L1-регуляризации, а затем повторила его с применением L2-регуляризации. В случае L1-регуляризации полученная LR-модель давала точность 95.00% на проверочных данных, а в случае L2-регуляризации LR-модель обеспечивала точность 94.50% на тех же данных. Оба вида регуляризации существенно улучшили точность прогнозирования.
Общая структура программы
Рис. 2. Общая структура программы
После загрузки кода шаблона в редактор Visual Studio я переименовал в окне Solution Explorer файл Program.cs в более описательный RegularizationProgram.cs, и Visual Studio автоматически переименовала класс Program за меня. В начале кода я удалил все выражения using, которые указывали на ненужные пространства имен, оставив только ссылку на пространство имен верхнего уровня System.
Вся логика логистической регрессии содержится в классе LogisticClassifier. В этот класс вложен вспомогательный класс Particle, инкапсулирующий оптимизацию роя частиц (particle swarm optimization, PSO) — алгоритм оптимизации, применяемый для обучения. Заметьте, что в классе LogisticClassifier есть метод Error, который принимает параметры с именами alpha1 и alpha2. Эти параметры являются весовыми значениями для L1- и L2-регуляризации соответственно.
В методе Main синтетические данные создаются следующими выражениями:
Значение seed, равное 42, использовалось только потому, что это значение давало репрезентативный демонстрационный вывод. Метод MakeAllData генерирует 13 случайных весовых значений между –10.0 и +10.0 (по одному весовому значению на каждую «функцию» плюс весовое значение b0). Затем метод осуществлял итерации 1000 раз. На каждой итерации генерировался случайный набор из 12 входных значений, после чего вычислялось промежуточное выходное значение логистической регрессии, используя случайные весовые значения. К выводу добавлялось дополнительное случайное значение, чтобы сделать данные менее очевидными и более подверженными переобучению.
Данные разбиваются на обучающий набор с 800 элементами и набор из 200 элементов для оценки модели с помощью этих выражений:
Следующие выражения создают модели прогнозирования на основе логистической регрессии:
Переменная maxEpochs — это счетчик цикла, ограничивающий значение для алгоритма обучения PSO. Два аргумента 0.0, передаваемые методу Train, являются весовыми значениями для L1- и L2- регуляризации. При значениях 0.0 регуляризация не используется. Качество модели оценивается так:
Один из недостатков использования регуляризации в том, что нужно определять весовые значения регуляризации (regularization weights). Один из подходов к нахождению хороших весовых значений регуляризации — метод проб и ошибок, но программный метод обычно лучше. Ниже определяется хорошее весовое значение L1-регуляризации, а затем используется:
Выражения для обучения LR-классификатора с применением L2-регуляризации точно такие же, как в случае L1-регуляризации:
В демонстрационной программе значения alpha1 и alpha2 были определены с помощью открытых методов FindGoodL1Weight и FindGoodL2Weight LR-объекта, а затем переданы методу Train. Альтернативный вариант — вызов этого кода:
Этот подход позволяет обучающему методу определить весовые значения регуляризации и дает немного более ясный интерфейс.
Понимание регуляризации
L1- и L2-регуляризация — это методы для уменьшения степени переобучения модели, а значит, прежде чем мы разберемся, что такое регуляризация, нужно понять суть переобучения (overfitting). Грубо говоря, если вы будете слишком интенсивно обучать модель, то в конечном счете получите весовые значения, чрезвычайно точно подходящие к обучающим данным, но, когда вы примените полученную модель к новым данным, точность прогноза окажется весьма скверной.
Переобучение проиллюстрировано двумя графиками на рис. 3. На первом графике показана гипотетическая ситуация, где цель заключается в классификации двух типов элементов, обозначенных черными и серыми точками. Плавная светло-серая кривая представляет истинное разделение двух классов с черными точками над кривой и серыми точками под кривой. Заметьте: из-за случайных ошибок в данных две из черных точек находятся под кривой, а две серых — над ней. При хорошем обучении (без переобучения) вы получили бы весовые значения, которые соответствуют плавной светло-серой кривой. Допустим, что были вставлены новые данные в (3, 7). Элемент данных окажется над кривой и будет правильно спрогнозирован как относящийся к черному классу.
Рис. 3. Переобучение модели
Ground truth fit model | Модель, соответствующая контрольным данным |
Overfitted model | Переобученная модель |
На втором графике рис. 3 мы видим те же точки, но другую кривую, которая является результатом переобучения. На этот раз все черные точки находятся над кривой, а все зеленые — под ней. Но кривая слишком сложна. Новый элемент данных в (3, 7) оказался бы под кривой и был бы неправильно спрогнозирован как серый класс.
Переобучение дает неплавные кривые прогнозирования, т. е. «нерегулярные». Такие плохие сложные кривые прогнозирования обычно характеризуются весовыми значениями, которые имеют очень большие или очень малые величины. Поэтому один из способов уменьшить степень переобучения состоит в том, чтобы не допускать очень малых или больших весовых значений для модели. В этом и заключается суть регуляризации.
При обучении ML-модели вы должны использовать некую меру ошибки, чтобы определять хорошие весовые значения. Есть несколько способов измерения ошибок. Один из самых распространенных методов — вычисление среднеквадратичной ошибки, где вы находите сумму квадратов разности между вычисленных выходными значениями для набора весовых значений и известными, правильными выходными значениями в обучающих данных, а затем делите эту сумму на количество обучающих элементов. Например, в случае набора-кандидата весовых значений логической регрессии всего с тремя обучающими элементами вычисленные выходные и правильные выходные значения (иногда называемые желательными или целевыми значениями) таковы:
А такой была бы среднеквадратичная ошибка:
В символическом выражении среднеквадратичную ошибку можно описать как:
где Sum представляет кумулятивную сумму по всем обучающим данным, o — вычисленный вывод, t — целевой вывод, а n — количество элементов в обучающих данных. Ошибка — это то, что минимизируется обучением с помощью одного из примерно десятка численных методов вроде градиентного спуска (gradient descent), итерационного алгоритма Ньютона-Рафсона (iterative Newton-Raphson), L-BFGS, обратного распространения ошибок (back-propagation) и оптимизации роя (swarm optimization).
Чтобы величины весовых значений модели не становились большими, процесс регуляризации штрафует весовые значения добавляя их в вычисление ошибки. Если весовые значения включаются в общую ошибку, которая минимизируется, тогда меньшие весовые значения будут давать меньшие значения ошибки. L1-регуляризация штрафует весовые значения добавлением суммы их абсолютных значений к ошибке. В символьном виде это выглядит так:
L2-регуляризация выполняет аналогичную операцию добавлением суммы их квадратов к ошибке. В символьном виде это выглядит следующим образом:
Допустим в этом примере, что нам нужно определить четыре весовых значения и что их текущие значения (2.0, –3.0, 1.0, –4.0). Штраф в L1, добавленный к 0.097 (среднеквадратичной ошибке) был бы (2.0 + 3.0 + 1.0 + 4.0) = 10.0, а штраф в L2 составил бы 2.0^2 + –3.0^2 + 1.0^2 + –4.0^2 = 4.0 + 9.0 + 1.0 + 16.0 = 30.0.
Итак, большие весовые значения модели могут приводить к переобучению, что в свою очередь ведет к низкой точности прогнозирования. Регуляризация ограничивает величину весовых значений модели, добавляя штраф для весов к функции ошибки модели. В L1-регуляризации используется сумма абсолютных значений весовых значений, а в L2-регуляризации — сумма квадратов весовых значений.
Зачем нужны два вида регуляризации?
L1- и L2-регуляризация — процессы схожие. Какой из них лучше? Хотя существуют кое-какие теоретические правила насчет того, какая регуляризация лучше для определенных задач, по моему мнению, на практике вам придется поэкспериментировать, чтобы найти, какой тип регуляризации лучше в вашем случае и стоит ли вообще использовать какую-либо регуляризацию.
Как выяснилось, применение L1-регуляризации иногда может давать полезный побочный эффект, вызывающий стремление одного или более весовых значений к 0.0, а это означает, что соответствующая функция (feature) не требуется. Это одна из форм того, что называют селекцией функций (feature selection). Например, в демонстрационной программе на рис. 1 с L1-регуляризацией последнее весовое значение модели равно 0.0. То есть последнее значение предиктора не вносит вклад в LR-модель. L2-регуляризация ограничивает весовые значения модели, но обычно не приводит к полному обнулению этих значений.
Поэтому может показаться, что L1-регуляризация лучше L2-регуляризации. Однако недостаток применения L1-регуляризации в том, что этот метод не так-то просто использовать с некоторыми алгоритмами ML-обучения, в частности с теми, в которых используются численные методы для вычисления так называемого градиента. L2-регуляризацию можно использовать с любым типом алгоритма обучения.
Таким образом, L1-регуляризация иногда дает полезный побочный эффект удаления ненужных функций (features), присваивая связанным с ними весам значение 0.0, но L1-регуляризация не работает без проблем со всеми формами обучения. L2-регуляризация работает со всеми формами обучения, но не обеспечивает неявной селекции функций. На практике следует использовать метод проб и ошибок, чтобы определить, какая форма регуляризации (если она вообще нужна) лучше для конкретной задачи.
Реализация регуляризации
Реализовать L1- и L2-регуляризацию сравнительно легко. В демонстрационной программе используется обучение по алгоритму PSO с явной функцией ошибки, нужно лишь добавить весовые штрафы L1 и L2. Определение метода Error начинается так:
Первый шаг — вычисление среднеквадратичной ошибки суммированием квадратов разности между вычисленными и целевыми выходными значениями. (Другая распространенная форма ошибки называется ошибкой перекрестной энтропии [cross-entropy error].) Затем вычисляется штраф по L1:
Метод Error возвращает MSE плюс штрафы:
Демонстрационная программа использует явную функцию ошибки. В некоторых алгоритмах обучения, таких как градиентный спуск и обратное распространение ошибок, функция ошибки применяется неявно за счет исчисления частного производного (calculus partial derivative) (называемого градиентом) функции ошибки. Для таких алгоритмов обучения использование L2-регуляризации (поскольку производное w^2 равно 2w) требует от вас лишь добавить член 2w к градиенту (хотя детали могут быть весьма хитроумными).
Нахождение хороших весовых значений регуляризации
Есть несколько способов найти хорошее (но не обязательно оптимальное) весовое значение регуляризации. Демонстрационная программа задает набор значений-кандидатов, вычисляет ошибку, связанную с каждым из кандидатов и возвращает лучший из найденных кандидатов. Метод поиска хорошего L1-веса начинается так:
Добавление дополнительных кандидатов дало бы вам больше шансов найти оптимальное весовое значение регуляризации ценой увеличения времени поиска. Затем каждый кандидат оценивается, и возвращается лучший из найденных кандидатов:
Заметьте, что это весовое значение-кандидат используется для обучения классификатора оценки, но ошибка вычисляется без учета весового значения регуляризации.
Заключение
Регуляризацию можно применять с любым методом ML-классификации, который основан на математическом уравнении. Примеры включают логистическую регрессию, пробит-классификацию (probit classification) и нейронные сети. Поскольку это уменьшает величину весовых значений в модели, регуляризацию иногда называют сокращением весов (weight decay). Основное преимущество применения регуляризации в том, что оно часто приводит к созданию более точной модели. Главный недостаток заключается во введении дополнительного параметра, значение которого нужно определить, — весового значения регуляризации. В случае логистической регрессии это не слишком серьезно, так как в этом алгоритм обычно используется лишь параметр скорости обучения, но при использовании более сложного метода классификации, в частности нейронных сетей, добавление еще одного так называемого гиперпараметра (hyperparameter) может потребовать массы дополнительной работы для подбора комбинации значений двух параметров.
Джеймс Маккафри (Dr. James McCaffrey) работает на Microsoft Research в Редмонде (штат Вашингтон). Принимал участие в создании нескольких продуктов Microsoft, в том числе Internet Explorer и Bing. С ним можно связаться по адресу jammc@microsoft.com.
Выражаю благодарность за рецензирование статьи эксперту Microsoft Ричарду Хьюзу (Richard Hughes).
Источник