Библиотека ConvNetJS предоставляет удобный интерфейс для создания и обучения нейронных сетей в браузере или Node.js. Эффективная работа сети напрямую зависит от правильной настройки гиперпараметров, которые контролируют процесс обучения и структуру модели.
Гиперпараметры — это внешние параметры модели, которые задаются до начала обучения. В ConvNetJS они включают:
В ConvNetJS нейронная сеть создается через объект
convnetjs.Net. Конфигурация слоев задается с помощью
массива объектов, где каждый объект описывает конкретный слой:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:28, out_sy:28, out_depth:1});
layer_defs.push({type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'});
layer_defs.push({type:'pool', sx:2, stride:2});
layer_defs.push({type:'softmax', num_classes:10});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
Каждый слой имеет собственные гиперпараметры, влияющие на обучение: размер фильтра, количество фильтров, шаг свертки и функции активации. Выбор этих значений критичен для эффективности сети.
Объект convnetjs.SGDTrainer управляет процессом
оптимизации:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 20,
l2_decay: 0.001
});
Подробности настройки:
learning_rate
0.001–0.1 является стандартным для
большинства задач.momentum
0.9.batch_size
<10000 примеров) рекомендуется
20–50.128–256, чтобы уменьшить вычислительные затраты.l2_decay
0.0001–0.01 хорошо работает для большинства
сверточных сетей.Для борьбы с переобучением используется Dropout:
layer_defs.push({type:'fc', num_neurons:100, activation:'relu', drop_prob:0.5});
0.2–0.5 в полносвязных
слоях.Пошаговая оптимизация
Валидация на подмножестве данных
Логирование обучения
Базовый вариант для MNIST:
learning_rate: 0.01, momentum: 0.9, batch_size: 20, l2_decay: 0.001Сильная регуляризация для малых наборов:
learning_rate: 0.005, momentum: 0.9, batch_size: 20, l2_decay: 0.01, drop_prob: 0.5Быстрая конвергенция на больших данных:
learning_rate: 0.05, momentum: 0.95, batch_size: 128, l2_decay: 0.0001ConvNetJS допускает динамическое изменение learning_rate во время обучения:
trainer.learning_rate = 0.005; // после 50 эпох
Это позволяет реализовать annealing — постепенное уменьшение скорости обучения для стабилизации модели на финальных этапах.
Настройка гиперпараметров в ConvNetJS требует тщательной проверки комбинаций значений, наблюдения за кривыми обучения и корректировки по мере появления паттернов переобучения или медленной сходимости.