Почему нам нужно нормализовать изображения, прежде чем мы поместим их в CNN?

Ответы:

34

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

Чтобы ответить на ваш вопрос: подумайте, как нейронная сеть узнает свой вес. C (NN) обучаются путем непрерывного добавления векторов ошибок градиента (умноженных на скорость обучения), вычисленных по обратному распространению, в различные весовые матрицы по всей сети по мере прохождения обучающих примеров.

Здесь следует отметить «умноженное на скорость обучения».

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

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

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

Таким образом, мы пытаемся нормализовать изображения, прежде чем использовать их в качестве входных данных для алгоритма NN (или любого другого градиента).

lollercoaster
источник
1
как насчет цветных изображений? я делаю это для каждого цветового канала? Разве это не испортило бы распределение цветов?
user10024395
2
Поверьте, вы должны да. Вы можете просто сделать что-то вроде:(image - image.mean()) / (image.std() + 1e-8)
Джон Аллен
Это действительно полезно для обучения? Я тренируюсь с детектором объектов, и с помощью этой подборки изображения действительно сбивают с толку, трудно увидеть объекты, которые я обнаруживаю
Дарлин,
Это очень полезно для обучения с точки зрения обучаемости и точности - это не для вас, а для модели :) Возможно, вы захотите вывести ненормализованное изображение при отладке, чтобы оно выглядело нормальным для ваших человеческих глаз.
Lollercoaster