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

Пакетная нормализация является важным шагом в процессе свертки, потому что цель состоит в том, чтобы улучшить угол сходства между векторами, представляющими участки изображения, и ядрами свертки. Это сходство свертки вычисляется через скалярное произведение между векторами, что подразумевает необходимость масштабировать это сходство по величине обоих векторов. Однако скалярное произведение может в конечном итоге увеличить сходство даже для худших участков, но удаленных углов. Нормализация, такая как z-оценка, помогает распределять их вокруг источника системы, делая пространство признаков более подходящим для операции свертки. Включая вычитание среднего и деление на стандартное отклонение, уменьшение величин и увеличение углов. Нормализация партии зависит не только от мини-пакета, поскольку ядра применяются ко всему набору данных, что позволяет изучать характеристики распределения данных в целом, что было бы невозможно, если бы нормализация выполнялась только для мини-пакета.

Процесс нормализации партии осуществляется посредством следующих этапов:

Расчет статистики ванны

Для каждой мини-партии производятся расчеты среднего значения и стандартного отклонения входных активаций.

Среднее значение партии рассчитывается для каждой характеристики (или измерения) следующим образом:

mean = (1/m) * ∑(X)

Где ∑(X) — сумма значений X во всех измерениях для всех примеров в мини-пакете.

Стандартное отклонение партии (станд.) рассчитывается для каждой характеристики следующим образом:

std = sqrt((1/m) * ∑((X - mean)^2))

Где ∑((X — среднее)²) — сумма квадратов разностей между значениями X и средним значением партии по всем измерениям для всех примеров в мини-партии.

Нормализация ввода

Входные активации мини-пакета нормализуются путем вычитания среднего значения пакета и деления на стандартное отклонение пакета в каждом измерении:

X_norm = (X - mean) / std

Это гарантирует, что входные активации имеют среднее значение равное нулю и единичной дисперсии.

Масштабирование и смещение

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

Нормализованные входные данные масштабируются регулируемой гаммой параметра и сдвигаются на другую регулируемую бета параметра в каждом измерении:

Z = gamma * X_norm + beta

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

Включение в процесс оптимизации

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

Реализация

В рамках языка Python существуют некоторые фреймворки, такие как TensorFlow, PyTorch, Keras, Caffe и MXNet, которые предлагают поддержку пакетной нормализации.

В TensorFlow слой tf.keras.layers.BatchNormalization интегрирован в модели CNN, что повышает стабильность и производительность сети.

PyTorch предоставляет слой torch.nn.BatchNorm2d, специально разработанный для двумерных данных, таких как изображения, что упрощает его включение в модели CNN. Keras, построенный на основе TensorFlow, имеет слой keras.layers.BatchNormalization, позволяющий применять пакетную нормализацию в персонализированных архитектурах.

Caffe, ориентированный на эффективность и простоту, поддерживает нормализацию пакетов с помощью слоя BatchNorm, который можно легко интегрировать в архитектуры CNN.

И последнее, но не менее важное: MXNet предлагает слой mxnet.gluon.nn.BatchNorm для прямого применения пакетной нормализации в моделях CNN, предоставляя исследователям и специалистам преимущества без дополнительных сложностей.

Реализация за счет использования этих фреймворков достаточно проста. Примером может служить небольшая реализация с использованием TensorFlow, применяющая уровень нормализации следующим образом:

import tensorflow as tf
from tensorflow.keras import layers

# Create a simple CNN model with batch normalization
model = tf.keras.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu',input_shape=(32, 32, 3)),
    layers.BatchNormalization(),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.BatchNormalization(),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.BatchNormalization(),
    layers.Dense(10, activation='softmax')
])

# Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Load and preprocess the CIFAR-10 dataset
(x_train, y_train),(x_test, y_test) = tf.keras.datasets.cifar10.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

# Train the model
model.fit(x_train, y_train, epochs=10, batch_size=64,
          validation_data=(x_test, y_test))

# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

Заключение

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

Следите за нашим блогом на Medium и будьте в курсе всего, что происходит в Ateliê.

Передай нам привет! И присоединяйтесь к нам в социальных сетях:
Электронная почта: [email protected]
Сайт
Facebook
Instagram
LinkedIn