【ML】Переоснащение, уходи!

машинное обучение искусственный интеллект TensorFlow регулярное выражение
【ML】Переоснащение, уходи!


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

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

Регуляризация

При обучении модели наиболее важным шагом является приближение к глобальному оптимальному решению путем непрерывного уменьшения значения потерь функции потерь, Проще говоря, это позволяет нашим весам признаков правильно описывать реальную ситуацию.

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

Как решить эту дилемму? Ответ может быть регуляризация или регуляризация. Регуляризация — это понятие в алгебраической геометрии. В машинном обучении добавление термина регуляризации означает добавление предыдущего термина правила. Говоря простым языком, у нас есть определенные ожидания относительно результатов, и мы не можем делать все, что хотим, по своему желанию.

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

Это формула нормы, в зависимости от значения p, может дать0 норма,1 нормаи2 нормат. д., то есть p принимает 0, 1, 2. Разные нормы относятся к разным сценариям.

0 норма, 1 норма

0 норма

Приведенная выше формула нормы, когда p принимает 0, называется нормой 0, и формула Lp принимает следующую форму:

Видно, что в норме 0 она предполагает решение корня числа 0. Это очень странная формула, трудно сказать, что это за смысл и как решать.

Таким образом, в 0-норме есть оптимизированная форма, которая делает ее понятной:

Смысл этой формулы в том, чтобы найти количество ненулевых элементов в векторном пространстве w.

Почему это предотвращает переоснащение? Добавление его к функции потерь имеет следующую формулу:

Здесь вставлено пояснение.Приведенная выше функция потерь состоит из двух частей.Часть c0 представляет собой традиционную функцию потерь, которая называется «эмпирическим риском»; последний регулярный термин называется «структурным риском», который структурно ограничивает первую половину. Часть значения «эмпирического риска».

Взгляните на график нормы, когда p приближается к 0:

Такой тренд увидеть нетрудно: при p близком к 0 его результаты располагаются ближе к каждой оси координат. Тогда можно представить, что когда p равно 0, все результаты ложатся на ось координат. Когда функция потери части касается ее, то естественно можно обрезать по оси координат, то есть только одна координата имеет значение, а все остальные равны 0.

Это означает, что в процессе непрерывного уменьшения потерь с помощью градиентного спуска необходимо рассмотреть возможность установки большего количества весов w равными 0, чтобы можно было непрерывно уменьшать 0-й нормальный член. Затем вырисовывается его смысл, который заключается в том, чтобы напрямую установить неважные веса в 0, насколько это возможно, уменьшить количество параметров и максимально сохранить только полезные функции. Даже если это делает набор весов разреженным (включая 0), он играет роль фильтрующих признаков.

Выглядит отлично, он автоматически фильтрует функции! Однако в машинном обучении с большим количеством весов признаков w необходимо динамически научиться устанавливать эти w равными 0, что может не только обеспечить непрерывное снижение потерь, но и гарантировать, что член нормы 0 также постоянно В конце концов, эти веса нужно сделать меньше, а эти веса прямо равны 0, возможностей слишком много, и поиск оптимального пути решения практически невозможен. Такие решаемые, но почти неразрешимые проблемы называютсяNP-hardПроблема заключается в том, что хотя правильность каждого результата расчета можно проверить, результатов вычислений так много, что проверить их по одному невозможно, но эта проблема равносильна неразрешимой задаче.

1 норма

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

Тот1 нормадолжен иметь0 нормаАлгоритм аппроксимации, который имеет преимущества и прост в решении.

Точно так же 1-норма является формой нормы, когда p равно 1:

Смысл 1 нормы очень ясен, то есть сумма абсолютных значений всех значений w. Функция Loss с добавлением 1 нормы выглядит следующим образом:

Из Loss известно, что для минимизации значения всей формулы необходимо минимизировать значение члена с 1-й нормой, поэтому посмотрите на изображение с 1-й нормой:

Приведенное выше изображение представляет собой изображение 1 нормы в трехмерном пространстве, представляющее собой октаэдр с вершинами, пересекающими оси координат. Делается вывод, что в пространстве большей размерности также должно быть много таких вершин, пересекающих ось координат. То есть в процессе решения градиентного спуска также можно найти решение, в котором функция потерь касается этих вершин, тогда норма 1 также имеет возможность отфильтровывать полезные функции, такие как норма 0, и устранить шум. Это улучшает обобщающую способность модели.

В процессе расчета из приведенного выше изображения видно, что норма 1 имеет невыводимые точки, то есть ее вершины, что не так удобно при расчете.

2 норма

избегать переоснащения

Поскольку расчет с 1-й нормой неудобен, можем ли мы обновлять и обновлять, чтобы увидеть, можно ли более удобно рассчитывать более высокую норму?

Взгляните на норму p, взяв 2:

Взгляните еще раз на то, как выглядит изображение:

3D-графика — это бал! Это означает, что 2-норма есть функция, непрерывная в пространстве и выводимая всюду. Конечно, она также пересекается с осью координат, а значит, точка касания с функцией потерь может попасть и на ось координат, но из изображения видно, что вероятность меньше нормы 1.

Функция Loss, добавляющая 2-норму, выглядит так:

То есть найдите сумму квадратов w. Здесь убран открытый корень, что не имеет никакого эффекта Эффект аналогичный, но количество вычислений намного меньше.

Поскольку точка касания между нормой 2 и функцией потерь трудно попасть на ось координат, то есть трудно отфильтровать признаки и уменьшить бесполезные признаки шума, так как же избежать переобучения модели?

CoorChice будет делать это медленно.

Рассмотрим пример: используем 3 признака для идентификации щенков?, проще говоря, есть 3 веса признака, а именно [w1,w2,w3].

w1 = 1,w2 = 1,w3 = 1 -> w1+w2+w3 = 3
w1 = 3,w2 = 0,w3 = 0 -> w1+w2+w3 = 3

Выше приведены два случая значения w. Хотя сумма w равна 3, в процессе распознавания w2 и w3 во втором случае совершенно огромныw1=3покрытый. Предполагая, что w1 представляет признак четырех ног, эта модель считает его щенком всякий раз, когда он сталкивается с четырьмя ногами, что явно ненаучно. То есть модель имеет высокую точность в тренировочном наборе, но легко ошибиться в сложных реальных ситуациях.

Если используется 2-норма, сумма квадратов в первом случае равна 3, а сумма квадратов во втором случае равна 9! Затем, чтобы поддерживать снижение потерь, необходимо постоянно ослаблять вес сильных функций, таких как w1, чтобы некоторые полезные слабые функции могли быть перенакоплены, чтобы ниспровергнуть сильные функции, чтобы модель не столкнулась с очень сильным свойством. , Многие более слабые функции игнорируются, что приводит к неправильной оценке.

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

Избегайте взрывных градиентов ?

существует«[Получить] Распознавание рукописных цифр с помощью глубокого обучения»В статье CoorChice упомянул узкое место, с которым столкнулись в начале обучения, потому что возник градиентbong! bong! bong!взрыв. В результате обучение вообще не могло быть продолжено. Однако после того, как CoorChice добавил член регуляризации, он успешно преодолел минное поле градиентного взрыва и успешно завершил обучение.

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

Как добавить термин регуляризации в TensorFlow?

1. Запишите все веса w

tf.add_to_collection(tf.GraphKeys.WEIGHTS, w)

Эта функция вызывается каждый раз, когда создается вес, чтобы добавить вес в пул.

2. Создайте термин регуляризации и добавьте его в Loss.

# 构建 l2 正则化项,设置其(缩放度)重要程度为 5.0 / 50000
regularization = tf.contrib.layers.l2_regularizer(scale=(5.0 / 50000))  

 # 让正则化生效
reg_term = tf.contrib.layers.apply_regularization(regularization)

# 在损失函数中加入正则化项
loss = (-tf.reduce_sum(y_data * tf.log(y_conv)) + reg_term)

Dropout

Dropout — это метод, который часто используется в глубоком обучении для уменьшения переобучения. Его основной принцип заключается в том, что в процессе обучения некоторые нейроны в слое отключаются в соответствии с заданным соотношением, а некоторые остаются действительными.В частности, какие нейроны будут отключены или действительны, выбираются случайным образом.

Неудачный нейрон не обновляется за одну итерацию. В следующем раунде обучения другая часть нейронов будет отключена и не будет обновляться.

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

Объяснений много, может все же очень абстрактно, так почему бы не подойти к картинке в этот раз!

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

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

В известной сетевой модели VGG-16 Dropout добавляется к полному канальному слою из последних трех слоев.

Конечно, к недостаткам использования Dropout также приводит случайность, что приведет к увеличению количества тренировок и увеличению времени обучения.

Как добавить отсев в TensorFlow?

tf.nn.dropout(input, keep_prob)

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

Следует отметить, что Dropout в текущей версииTensorFlow Liteеще не поддерживается вTensorFlow LiteСтуденты, работающие с моделью, не могут ее использовать! ?

Суммировать

В этой статье CoorChice представляет 2 метода снижения вероятности переобучения:РегуляризацияиDropout.

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

  • Регуляризация L2 может ослабить сильные признаки, позволяя рассмотреть более комплексные признаки. В то же время регуляризация L2 также может в определенной степени предотвратить возникновение градиентного взрыва.

  • Dropout — это более общее средство предотвращения переобучения, но оно увеличивает время обучения, а TensorFlow Lite в настоящее время не поддерживает эту операцию.