Pull to refresh

Comments 23

Спасибо за статью. Скажите, а есть ли какие-либо автоматические способы определить, когда ARD уже можно заменить на классические методы? Иными словами, когда можно сказать, что исходных данных достаточно, чтобы классические подходы достаточно точно работали? Ставить ограничение на количество точек или считать время работы алгоритма — чур не предлагать :)

Тут очень многое зависит от данных: их полноты, консистентности, содержащейся в них неопределенности и, конечно же, формы распределений.
Если данные идеальны, то для построения модели с 10 переменными, вам нужно ровно 10 точек данных.
Но в реальной жизни идеальные данные не встречаются. В них всегда есть неполнота и случайность.


Обычные бизнесовые данных зачастую происходят из экспоненциального семейства распределений (нормального, Пуассона, Бернулли, логистического и т.д.).
Для них можно использовать эмпирическое правило: N = C * p2,
где N — кол-во точек данных, p — размерность данных (кол-во признаков), С — константа, зависящая от имеющейся в данных неопределенности, по сути от модельной ошибки или степени невязки между параметрами и прогнозируемой переменной (обычное значение 3-10).


Так что если у вас 30 признаков, то желательно иметь не менее 3000 точек, а при 10 признаках — не менее 300.

А можно очень просто про L1 и L2 регуляризацию? Или хорошую сслылку.

L2 регуляризация — это дополнительный критерий в функции ошибки обучения:
loss = cross_entry(predictions, y) + lamda * sqr(w)

Цель оптимизации — минимизировать функцию ошибки, и тут играет роль сами значения весов. Чем больше веса, тем больше ошибка.
L2 регулярузацию используют в случае если имеются нелинейные функции. В данном случае автору незачем использовать L2. Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются.

L1 регуляризация — тоже дополнительный критерии в функции ошибки. Только в данном случае добавляется ошибка не квадратичные значения а абсолютное значения весов, и «подталкивает» функции иметь меньше значения и меньше не нулевых значении. Тем самым вызывает разреженность в матрице весов.
loss = cross_entropy(predictions, y) + lambda * abs(w)

Написал комментарии 28-го — был на модерации. Автору Roman_Kh видимо не понравилось что я указал на неверное использование L2 регуляризации (для линейной функции) и не стал одобрять комментарий. Хабр только сегодня по запросу одобрил.
Не согласны/убеждены что я неверно описал? Можно вместе с минусом написать комментарии с чем не согласны…

Не стоит приписывать другим людям воображаемые вами намерения.
Комментарий по каким-то причинам попал на модерацию. Одобрил я его сразу после выходных как только добрался до компьютера.
И минус тоже не я поставил.

Минус я поставил, потому что, извините, лучше никакого объяснения, чем такое.
Формулы на питоне, в первой же 2 опечатки. L2-регуляризация — это добавление квадратов весов, а не корней (по-вашему норм, что производная в бесконечность уходит, если веса малы? как оптимизировать?)
"Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются." — тут я вообще не вкурил.
Вам тоже так объясняли основы машинного обучения?

В паскале была функция sqr(x) = x2

Простите, не распознал под гримом столь модный в data science язык.

yorko, спасибо за комментарий. Теперь можно аргументировать в интернете :)
Как указал Роман, тут sqr — сокращенное от square. (sqrt — square root) Я предполагаю минус был именно за это…
Язык программирование тут не причем, я мог написать как сам пишу используя tensorflow в питоне:
  loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels))
        
  # L2 regularization for fully connected layer
  regularizers = (tf.nn.l2_loss(fc1_weights)
                        tf.nn.l2_loss(fc2_weights))
  loss += 5e-4 * regularizers

Но решил использовать нечто вроде псевдо кода.
loss = cross_entry(predictions, y) + lamda * sqr(w)


В общем смысл не меняется, можно в функцию ошибки, например кросентропии (log likelihood) либо среднего квадратичного отклонения (mean squared error) добавить нужную нам критерии регуляризации.
«Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются.» — тут я вообще не вкурил.

Извините, что я пишу не ясно.
При переобучении сеть начинается подгонятся под обучаемую выборку. В этом процессе, значении весов будут увеличиваться, функция сети (hypothesis function) будет все более и более сложной. Например от линейной к квадратичным, до десятой степени и т.п.
image
График слева: черная линия — функция сети, жирные точки — обучаемая выборка, x — тестовая выборка.
Для решения данной проблемы, ограничивают область возможных значении для весов от начала координат (origin).
Надеюсь, выразился яснее.
Ведите себя профессионально, не нравится когда указывают на провалы в знании?
Не знаете как ведет себя сеть при переобучении? Однако, data scientist-ы.
Для чего тогда тут сделаны дискусии, если уходите от нормального обсуждения.

Спасибо, что пояснили, что такое переобучение! :)


L2 регулярузацию используют в случае если имеются нелинейные функции

Что вы имеете в виду под нелинейностью? Полиномиальные признаки?
Если что, Ridge-регрессия — все еще линейная, и даже существующее у нее аналитическое решение линейно по ответам:


Не за что!
«Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются.» — тут я вообще не вкурил.
Спасибо, что пояснили, что такое переобучение!

В же не были согласны с тем что при одном из вариантов переобучения веса будут увеличиваться.
Что вы имеете в виду под нелинейностью?
Ridge-регрессия — все еще линейная, и даже существующее у нее аналитическое решение линейно по ответам

Стоит добавить — в случае Метода Наименьших Квадратов.

Для линейных обычно есть аналитическое решение. В случае МНК, только в отдельных случаях является приемлимым вариант с ridge-regression.
«In a Bayesian context, this is equivalent to placing a zero-mean normally distributed prior on the parameter vector.».
Будет перекос в решении на нормальное распределение (с центром 0) в значении веса, что очевидно так как мы добавили квадрат этого веса.

О L2 регуляризации линейной функции наглядно:
image
Имеется линеяная функция y=Ax + b.
Если добавить L2 регуляризацию, то в решении будет браться коэффицент с меньшим весом (чем среднее отклонение) так как мы добавили в ошибку квадратичное значение. В нашей формуле из многих значении A — перекос будет в сторону меньших значении. Что неверно в общем случае.
yorko: Ridge-регрессия — все еще линейная, и даже существующее у нее аналитическое решение линейно по ответам

erko: Стоит добавить — в случае Метода Наименьших Квадратов.
Для линейных обычно есть аналитическое решение. В случае МНК, только в отдельных случаях является приемлимым вариант с ridge-regression.

Вы бы хоть с первоисточниками ознакомились: Ridge-регрессия была впервые введена в 1970 году в работе "Ridge Regression: Biased Estimation for Nonorthogonal Problems".
И в ней оптимизируемый функционал определен как сумма квадратов ошибок и квадратов коэффициентов регрессии.
Иными словами (пусть и несколько некорректно), ridge-регрессия — это, по определению, линейная регрессия МНК с L2-регуляризацией.

Roman_Kh,
Не вижу противоречии в своем утверждении. Да, излишнее было указывать МНК, но это не означает что в МНК в общем решении верно использвание ridge-регрессия.

В википедии: The standard approach is ordinary least squares linear regression. However, if no x satisfies the equation or more than one x does—that is the solution is not unique—the problem is said not to be well posed.
Вот в таком случае можно использовать ridge-regression.

В публикации: Biased Estimation for
Nonorthogonal Problems — само название говорит что решение будет пристрастным. Да в некоторых случаях вынуждены добавлять пристрастность, так как данные могут быть статистически не полными.
Иными словами (пусть и несколько некорректно) ..

Ну именно о данном утверждении yorko не согласен был.

Формулой: L1-регуляризация заключается в добавлении суммы модулей весов модели к оптимизируемому функционалу, а L2 — в добавлении суммы квадратов весов. Отличие вроде небольшое, но задача оптимизации сильно меняется.


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


В реальных задачах регуляризация нужна всегда, и если задача выбора признаков остро не стоит, лучше использовать L2. Если коротко, можно в документации Scikit-learn почитать или на Cross-Validated. А толково — в Hastie и Tibshirani.

А как контролировать переобучение, когда данных мало?


В классической постановке есть разные оценки обобщающей способности, и то VC-оценка, growth function и даже сложность Радемахера, как я понял, все еще сильно завышены в большинстве случаев.


На малых данных, получается, Computational Learning Theory нам не в помощь. На кросс-валидации мы тоже переобучимся, если много параметров будем перебирать. Возможно ли вообще какие-то гарантии давать в таком случае?


Проблема, как я вижу, особенно остра в случае медицинских данных.

Вообще, по хорошему, по кросс-валидации надо либо подбирать параметры, либо оценивать качество, но не обе вещи вместе — иначе оценка качества будет завышенной. То есть правильнее рассматривать весь алгоритм обучения (включая выбор параметров) как чёрный ящик, и для него проводить кросс-валидацию — таким образом получается «двухуровневая» кросс-валидация.

Это да… только NestedCV за разумное время посчитается только как раз на малых данных. Или когда квантовые компьютеры заработают :)
Вопрос скорее про теоретическую верхнюю грань для ошибки в случае малых данных.

Sign up to leave a comment.

Articles