ConvLayer — это основной строительный блок сверточных нейронных сетей в библиотеке ConvNetJS. Он реализует сверточный слой, который выполняет локальное свёртывание входного объёма с набором фильтров, позволяя извлекать пространственные признаки из данных, таких как изображения. Сверточные слои являются ключевыми элементами в обработке изображений и видео, а также в задачах распознавания паттернов.
Создание ConvLayer происходит через передачу конфигурационного объекта:
var layer = new convnetjs.ConvLayer({
in_sx: 32, // ширина входного изображения
in_sy: 32, // высота входного изображения
in_depth: 3, // количество каналов (например, RGB)
sx: 5, // размер фильтра по ширине и высоте (5x5)
filters: 16, // количество фильтров
stride: 1, // шаг свёртки
pad: 2, // нулевая подкладка по краям
activation: 'relu' // функция активации (опционально)
});
Ключевые параметры:
in_sx, in_sy, in_depth —
размеры входного объёма.sx — размер ядра свёртки. Обычно ядро квадратное,
например 3×3, 5×5.filters — количество фильтров (выходных каналов),
определяющих объём выходного слоя.stride — шаг перемещения фильтра по входу.pad — количество пикселей нулевой подкладки по краям
входного объёма.activation — функция активации, применяемая после
свёртки (ReLU, tanh, sigmoid и т.д.).Функция forward(V) вычисляет выходной объём слоя,
применяя каждый фильтр к входному объёму. Для каждого положения фильтра
вычисляется скалярное произведение фильтра и соответствующей области
входа, после чего применяется функция активации.
Особенности реализации:
pad > 0 вход расширяется нулями, что сохраняет
размерность.[ out_sx = + 1] [ out_sy = + 1]
Метод backward() вычисляет градиенты по входу и фильтрам
на основе ошибки от следующего слоя. Алгоритм включает следующие
шаги:
Распространение градиента по фильтрам (весам): [ dW = {x,y} V{patch} dY_{x,y}]
Распространение градиента по входу:
Обновление смещений:
ConvNetJS поддерживает различные функции активации, и backward автоматически учитывает их производные при распространении ошибки.
Каждый фильтр слоя хранит:
filters[i].w) — массив чисел для
свёртки.filters[i].dw) —
накопленные градиенты во время обучения.filters[i].bias) и его
градиент (filters[i].bias_grad).Инициализация весов обычно происходит случайным образом с распределением, учитывающим количество входных соединений, для предотвращения затухания градиентов.
Пример последовательности:
var layer_defs = [];
layer_defs.push({type:'input', sx:32, sy:32, depth:3});
layer_defs.push({type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'});
layer_defs.push({type:'pool', sx:2, stride:2});
layer_defs.push({type:'conv', sx:5, filters:32, stride:1, pad:2, activation:'relu'});
Такой подход позволяет строить глубокие сверточные сети для сложных задач классификации и распознавания изображений.
dw.ConvLayer тесно интегрируется с другими слоями:
ConvLayer является фундаментальным элементом ConvNetJS, обеспечивая возможность создавать сложные, многослойные сверточные сети с гибкой настройкой архитектуры и обучения. Его точная конфигурация определяет качество извлечения признаков и эффективность последующих слоев сети.