Вопрос или проблема
Это мой первый пост, поэтому я постараюсь сделать вопрос ясным для читателей. Однако, если мои описания будут непонятны, я с удовольствием отвечу на дополнительные вопросы.
Я обучаю 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 с учетом весов вероятностей, вы можете воспользоваться следующим подходом:
-
Определение весов: Используйте вероятность появления каждого изображения как вес. Допустим, каждое изображение i имеет вероятность p_i, тогда вес w_i будет пропорционален этой вероятности.
-
Модификация функции потерь: В 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}) — предсказанные и истинные значения соответственных целевых параметров. -
Нормализация весов: Чтобы избежать слишком сильного влияния одного образца, нормализуйте веса так, чтобы их сумма была равна 1:
[
w_i’ = \frac{wi}{\sum{i=1}^{N} w_i}
] -
Имплементация в стратегии обучения: Измените вашу обучающую процедуру, чтобы использовать взвешенные MSE в качестве функции потерь. Это возможно в большинстве фреймворков глубинного обучения, таких как TensorFlow или PyTorch, добавив соответствующие шаги в цикл обучения.
-
Анализ результата: После добавления весов к функции потерь наблюдайте изменения производительности модели на тренировочном и тестовом наборах данных. Улучшения в точности предсказаний на более вероятных примерах могут указывать на успешность такой адаптации.
Чтобы убедиться в успехе, можете реализовать метрические оценки и анализировать, как модель справляется с примерами разной вероятности, а также настраивать веса или саму архитектуру модели в зависимости от полученных результатов. Тщательное тестирование и валидация могут помочь избежать переобучения и других возможных проблем.