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

«Будущее зависит от какого-нибудь аспиранта, который с большим подозрением отнесется ко всему, что я сказал»

Джеффри Хинтон

Быть на картинке:

  • дисперсия - это то, насколько полученные результаты отличаются друг от друга, что просто означает дисперсию вокруг среднего выходного значения.
  • смещение - это то, как производительность сети «смещена», т. Е. Как выходные данные смещены от истинных значений.

Круто, что выход каждой отдельной сети в ансамбле можно наблюдать отдельно, поэтому взвешенное среднее по ансамблю можно обозначить как:

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

Неоднозначность на входе x одного члена ансамбля определяется как:

Таким образом, неоднозначность ансамбля может быть определена путем суммирования взвешенных неоднозначностей членов ансамбля:

Интересно, что неоднозначность ансамбля — это не что иное, как отклонение взвешенного ансамбля от взвешенного среднего, и он измеряет расхождение между сетями на входе x — просто как предсказания каждой отдельной сети в ансамбле отличаются друг от друга.

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

Теперь давайте посмотрим на общую ошибку нейронной сети. Квадратичная ошибка может быть определена как:

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

На человеческом языке это означает, насколько далеко среднее значение ансамбля от истинного значения.

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

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

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

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

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

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

Кроме того, если вы попытаетесь использовать математику и развернуть приведенное выше уравнение, вы получите старую добрую среднеквадратичную ошибку (MSE) среднего значения по ансамблю. Красиво, да?

Хорошо, теперь вы немного знаете математику, но как реализовать ее в реальной модели? Что ж, давайте посмотрим на код! Поскольку библиотека Keras теперь является частью Tensorflow 2.0, у всех нас есть хороший повод использовать библиотеку высокого уровня без угрызений совести.

Скажем, у нас есть ансамбль, состоящий из 3 нейронных сетей, поэтому выходные данные каждой отдельной сети обозначаются как x1, x2 и x3 соответственно, а средневзвешенное значение равно y_pred. Таким образом, для равновзвешенного ансамблевого смещения будет выглядеть следующим образом:

Таким же образом мы можем определить дисперсию:

Теперь вы можете просто передать свои пользовательские метрики в список метрик вместе со значением по умолчанию 'acc', как показано ниже:

Теперь мы знаем, почему ансамбли «всегда» работают лучше, чем отдельные нейронные сети. Кроме того, ансамбли, как правило, более надежны, они дают лучшее обобщение данных, их довольно легко реализовать и есть много других интересных вещей, связанных с ансамблями. Итак, почему бы вам просто не попробовать построить его и посмотреть, как он работает с точки зрения разложения смещения-дисперсии?

Это позволит нам независимо наблюдать смещение и дисперсию выходных данных ансамбля во время обучения. Что с этим делать? Ну, есть способы, как его контролировать, но это совсем другая история…

Литература:

  • П. Домингос, П. «Единая декомпозиция смещения-дисперсии». Материалы 17-й Международной конференции по машинному обучению, 2000 г., стр. 231–238.
  • Л. К. Хансен и П. Саламон, «Ансамбли нейронных сетей», в IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 12, 10, 1990, стр. 993–1001.