Сейчас мы рассмотрим с вами, что такое нормализация и зачем она нужна в нейронных сетях. В машинном обучении довольно известным фактом является то, что нормализованные данные приводят к более быстрому обучению модели. Допустим у нас есть некоторая выборка -- вот она. Проблема заключается в том что центр этой выборки находится очень далеко от нуля (вот ноль, вот центр выборки). Представим себе, что мы возьмём некоторую модель -- например, модель которая описывается следующим выражением: вероятность положительного ответа равняется w1x1+w2x2+bw_1 x_1 + w_2 x_2 + b. Возьмём порог по вероятности равным 0.5. И возьмём некоторые случайные веса w1w_1​, w2w_2​ и bb. В этом случае, если у нас центр модели смещён достаточно сильно относительно начала координат, нам придется сделать очень много усилий для того, чтобы перевести начальную модель, которая находится где-то недалеко от нуля, к оптимальной модели, которая хорошо разделяет наши положительные и отрицательные разделяющие примеры. То есть придётся затратить очень много усилий для того, чтобы произвести этот переход от изначальной разделяющей поверхности к оптимальной разделяющей поверхности. Что уж говорить о тех случаях, когда у нас не так хорошо разделяются данные: например, положительные примеры отделены от отрицательных с двух сторон (то есть они окружены). В этих случаях тренировка вообще может затормозиться. Что делать? Делать можно следующее: давайте возьмём, и эти данные, которые у нас получились, отцентруем (вот центр наших данных). Мы берём, и преобразуем наши данные, чтобы центр был в точке "0". В этом случае наши данные практически никак не изменятся, а просто переедут из этого положения вот в это положение. Прекрасно, мы значительно упростили нам задачу оптимизации модели. Практика показывает, что можно сделать ещё одну очень простую вещь для того, чтобы обучение нашей модели происходило быстрее, и заключается эта вещь вот в чём: у нас данные распределены по-разному относительно x1x_1 и относительно x2x_2​. Можно заметить, что относительно x2x_2​ наши данные значительно более вытянуты, чем вдоль x1x_1. К чему может привести такое распределение наших обучающих примеров? Это может привести к тому, что коэффициенты вносят неодинаковый вклад в функцию потерь, и в результате функция потерь будет вытянута вдоль одного из коэффициентов, причём чем сильнее будут вытянуты данные, тем сильнее будет вытянута функция потерь. Как мы знаем, у нас большие проблемы с сильно вытянутыми функциями потерь. Мы пытались их как-то решать при помощи стохастического градиентного спуска или при помощи алгоритма Adam, однако эти алгоритмы, прежде чем начинают быстро сходиться, долго настраиваются, то есть накапливают моментум (то есть импульс). Почему бы нам не сделать нашу функцию потерь проще для оптимизационного алгоритма следующим образом: просто взять, и отмасштабировать x2x_2 и x1x_1​ таким образом, чтобы стандартное отклонение наших данных было равно "1", и вдоль x1x_1​ и вдоль x2x_2​. В этом случае у нас коэффициенты w1w_1​ и w2w_2​ будут иметь одинаковый вклад в функцию потерь. Итак, мы взяли наши данные, и просто разделили их на стандартное отклонение вдоль x2x_2​ и вдоль x1x_1​. И у нас получилось вот такое круглое распределение, изначально оно было эллиптическим. Конечно, не все данные можно свести к круглым распределениям. Например -- данные, которые сильно скоррелированы. Например когда такое распределение между x1x_1​ и x2x_2​. В этом случае у нас стандартное отклонение вдоль x1x_1​ и вдоль x2x_2​ -- одинаковое. Однако распределение всё равно вытянутое, и, скорее всего, функция потерь будет тоже вытянутой, но иметь будет такой вид. С такой ситуацией, к сожалению, ничего не сделаешь. Однако стандартизация данных или нормировка всё равно улучшают ситуацию.

К сожалению, у нас пока нет статистики ответов на данный вопрос, но мы работаем над этим.