Сверточные слои (Convolutional Layers) являются ядром сверточных нейронных сетей (CNN) и предназначены для извлечения признаков из входных данных. ConvNetJS реализует эти слои полностью на JavaScript, обеспечивая возможность создавать и обучать нейросети прямо в браузере или на сервере.
Сверточный слой состоит из набора фильтров (kernels), которые сканируют входной тензор, создавая карту признаков (feature map). Каждый фильтр представлен массивом весов, который обновляется в процессе обучения.
Ключевые параметры слоя в ConvNetJS:
sx — ширина фильтра (kernel width)sy — высота фильтра (kernel height)stride — шаг перемещения фильтра по входуpad — добавление нулей вокруг входа (padding)filters — количество фильтров (output depth)Каждый фильтр при свертке с входным изображением вычисляет линейную комбинацию пикселей, что позволяет выявлять локальные паттерны, такие как края, текстуры и углы.
Процесс свертки можно описать пошагово:
sx × sy.stride по горизонтали и
вертикали до покрытия всей области входа.Формула для вычисления одного элемента feature map:
[ y_{i,j,k} = {m=0}^{sx-1} {n=0}^{sy-1} {d=0}^{D-1} w{m,n,d,k} x_{i+m,j+n,d} + b_k]
где:
Padding позволяет контролировать размер выходной карты признаков. Без padding размер уменьшается после каждой свертки:
[ W_{out} = + 1]
Stride управляет скоростью сканирования фильтра по входу. Больший stride уменьшает размер карты признаков, ускоряет вычисления, но снижает точность локальных деталей.
ConvNetJS использует случайную инициализацию весов фильтров, обычно с нормальным распределением с небольшим дисперсионным отклонением. Смещения (bias) задаются нулями. Инициализация критична для сходимости сети и предотвращения исчезновения градиентов.
Для обучения сверточных слоев применяется стандартный backpropagation, адаптированный к сверткам. Градиенты рассчитываются по формуле:
[ = {i,j} x{i+m,j+n,d}]
[ = {k} {m,n} w_{m,n,d,k} ]
Это позволяет корректно обновлять веса фильтров и смещения через алгоритм стохастического градиентного спуска (SGD).
(sx-1)/2 для сохранения
исходного размера.ConvNetJS представляет сверточный слой как объект
convLayer, который можно создавать через:
var layer = new convnetjs.ConvLayer({
sx: 5,
filters: 16,
stride: 1,
pad: 2,
activation: 'relu'
});
После этого слой можно подключать к Net, настраивая
последовательность слоев для полной CNN. ConvNetJS автоматически
управляет вычислением forward и backward pass, храня веса и градиенты
внутри структуры vol.