В нейронных сетях, построенных на свёрточных слоях, такие параметры как stride и padding играют ключевую роль в управлении пространственными размерами признаковых карт (feature maps) и эффективности обучения. ConvNetJS, являясь библиотекой для реализации нейронных сетей в JavaScript, предоставляет прямые возможности для настройки этих параметров при создании свёрточных слоёв.
Stride определяет шаг, с которым фильтр свёртки
перемещается по входной матрице. В ConvNetJS этот параметр задаётся при
создании слоя conv_layer. Например:
var layer = new convnetjs.ConvLayer({
sx: 5, // размер фильтра 5x5
filters: 16, // количество фильтров
stride: 2, // шаг свёртки
pad: 0 // без паддинга
});
Формула для вычисления размеров выходной карты признаков:
[ W_{out} = + 1]
где:
Аналогично для высоты.
Пример: вход 28×28, фильтр 5×5, stride 2, pad 0:
[ W_{out} = + 1 = + 1 = 12.5 + 1]
Так как размер карты признаков должен быть целым числом, ConvNetJS округляет вниз, получаем 13×13.
Padding (дополнение нулями) добавляет вокруг
входного изображения рамку из нулей. Цель — управлять размером выходной
карты признаков и предотвращение сильного уменьшения размеров при
последовательных свёртках. В ConvNetJS задаётся параметром
pad:
var layer = new convnetjs.ConvLayer({
sx: 3, // размер фильтра 3x3
filters: 32, // количество фильтров
stride: 1,
pad: 1 // добавление рамки из нулей
});
Пример: вход 28×28, фильтр 3×3, stride 1, pad 1:
[ W_{out} = + 1 = + 1 = 28]
Таким образом, карта признаков сохраняет исходный размер 28×28.
ConvNetJS позволяет комбинировать stride и padding с другими параметрами слоя:
Пример сложного свёрточного блока:
var layer1 = new convnetjs.ConvLayer({sx: 5, filters: 16, stride: 1, pad: 2, activation: 'relu'});
var layer2 = new convnetjs.PoolLayer({sx: 2, stride: 2}); // подвыборка
var layer3 = new convnetjs.ConvLayer({sx: 3, filters: 32, stride: 1, pad: 1, activation: 'relu'});
В этом примере padding позволяет сохранять размеры карты признаков, stride в подвыборке уменьшает их, создавая эффективную иерархию признаков без потери информации на границах.
Stride и padding являются фундаментальными параметрами, которые требуют тщательной настройки для достижения оптимальной производительности свёрточной нейронной сети в ConvNetJS.