Как включить веса (измерения вероятностей) данных в функцию потерь среднеквадратичной ошибки

Вопрос или проблема

Это мой первый пост, поэтому я постараюсь сделать вопрос ясным для читателей. Однако, если мои описания будут непонятны, я с удовольствием отвечу на дополнительные вопросы.

Я обучаю CNN для регрессии на 4 целевых показателя, относящихся к данному изображению. Внутри изображения есть точка интереса, положение которой может быть определено phi и theta (соответствующие x и y нормальной декартовой оси). Целями моей модели являются sin(phi), cos(phi), sin(theta) и cos(that). Я использую L2 среднеквадратичную ошибку как функцию потерь для phi и theta.

Проблема в том, что не каждое изображение имеет равную внутреннюю ценность. Некоторые изображения имеют более высокую вероятность встретиться, тогда как другие — нет. Эти вероятности оцениваются по шкале от 1 до 1е-100.

Мой вопрос таков: как можно включить эти веса в функцию потерь, чтобы улучшить модель?

Недавно я использовал взвешивание целевых показателей здесь.

Мой подход заключался в том, чтобы сначала найти среднее каждого целевого показателя в тренировочном наборе. Предположим, что средние значения:

target_means
= targets_trn.mean(axis=0)
= (0.001, 50, 1, 10)

Я извлекаю наибольшее значение, используя target_means.max() (50 в этом примере), и выражаю каждое среднее в терминах того, насколько нужно его масштабировать, чтобы оно соответствовало наибольшему среднему:

target_weights
= target_means.max() / target_means
= 50 / (0.01, 50, 1, 10)
= (5000, 1, 50, 5)

Я использую это как руководящие указания для того, насколько следует усиливать потерю каждого целевого показателя:

target_balanced_mse_loss
= (preds_minibatch - targets_minibatch).pow(2).mean(dim=0).mul(target_weights).mean()

Таким образом, я сначала нахожу покомпонентную потерю (preds_minibatch - targets_minibatch).pow(2), а затем усредняю по размерности образцов, используя .mean(dim=0). Это приводит к потере на одну цель, которую я умножаю на target_weights, а затем беру среднее значение.

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

Ответ или решение

Теория
Когда мы говорим о внедрении весов (оценок вероятности) в функцию потерь средней квадратической ошибки (MSE), важно понимать, как эти веса могут повлиять на процесс обучения модели. В вашем случае вы используете свёрточную нейронную сеть (CNN) для регрессии на четырех целях, связанных с изображением: sin(φ), cos(φ), sin(θ), и cos(θ). Здесь φ и θ определяют координаты точки интереса на изображении.

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

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

Пример
Предположим, у вас есть изображения с вероятностями появления, варьирующимися от 1 до 1e-100. Для обучения модели с учетом этих вероятностей следует определить, как они повлияют на функцию потерь.

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

Применение
Для внесения коррекций в MSE с учетом весов вероятностей, вы можете воспользоваться следующим подходом:

  1. Определение весов: Используйте вероятность появления каждого изображения как вес. Допустим, каждое изображение i имеет вероятность p_i, тогда вес w_i будет пропорционален этой вероятности.

  2. Модификация функции потерь: В MSE выражении (preds – targets)^2, взвесьте каждое слагаемое согласно его весу wi. Это даст функция потерь суммы вид:
    [
    \text{Weighted MSE Loss} = \frac{1}{N} \sum
    {i=1}^{N} wi \cdot (y{predi} – y{truei})^2
    ]
    Здесь (N) — общее число образцов, (y
    {predi}) и (y{true_i}) — предсказанные и истинные значения соответственных целевых параметров.

  3. Нормализация весов: Чтобы избежать слишком сильного влияния одного образца, нормализуйте веса так, чтобы их сумма была равна 1:
    [
    w_i’ = \frac{wi}{\sum{i=1}^{N} w_i}
    ]

  4. Имплементация в стратегии обучения: Измените вашу обучающую процедуру, чтобы использовать взвешенные MSE в качестве функции потерь. Это возможно в большинстве фреймворков глубинного обучения, таких как TensorFlow или PyTorch, добавив соответствующие шаги в цикл обучения.

  5. Анализ результата: После добавления весов к функции потерь наблюдайте изменения производительности модели на тренировочном и тестовом наборах данных. Улучшения в точности предсказаний на более вероятных примерах могут указывать на успешность такой адаптации.

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

Оцените материал
Добавить комментарий

Капча загружается...