Сверточные нейронные сети (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