Что ж, я полагаю, что большинство из вас, кто когда-то интересовался компромиссом между смещением и дисперсией или декомпозицией смещения и дисперсии, возможно, уже сталкивались с некоторыми из известных кривых «переоснащение-недообучение» или «высокое смещение-низкая дисперсия» и т. д. , цели. Если нет — просто погуглите… В этих картинках нет ничего плохого, однако они просто дают общее представление о проблеме без особого практического опыта.
«Будущее зависит от какого-нибудь аспиранта, который с большим подозрением отнесется ко всему, что я сказал»
Джеффри Хинтон
Быть на картинке:
- дисперсия - это то, насколько полученные результаты отличаются друг от друга, что просто означает дисперсию вокруг среднего выходного значения.
- смещение - это то, как производительность сети «смещена», т. Е. Как выходные данные смещены от истинных значений.
Круто, что выход каждой отдельной сети в ансамбле можно наблюдать отдельно, поэтому взвешенное среднее по ансамблю можно обозначить как:
Обратите внимание, что я использую причудливый термин «взвешенный», однако часто ансамбли просто
Неоднозначность на входе 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.