ConvNetJS — это библиотека на JavaScript, предназначенная для построения, обучения и тестирования нейронных сетей непосредственно в браузере. Она поддерживает как классические многослойные перцептроны, так и сверточные нейронные сети, а также базовые механизмы обучения с подкреплением.
Ключевыми объектами библиотеки являются слои сети, нейронная сеть, оптимизаторы и агенты для обучения с подкреплением.
Слои определяют архитектуру модели и порядок обработки данных. В ConvNetJS поддерживаются следующие основные типы слоев:
Каждый слой создаётся с указанием параметров, таких как число нейронов, размер фильтров, шаг свёртки и тип функции активации.
let layer_defs = [];
layer_defs.push({type:'input', out_sx:32, out_sy:32, out_depth:3});
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});
После определения слоев создаётся объект нейронной сети:
let net = new convnetjs.Net();
net.makeLayers(layer_defs);
Для обучения используется объект Trainer, который
управляет процессом обратного распространения ошибки. Параметры тренера
включают скорость обучения (learning_rate), коэффициент
регуляризации (l2_decay) и метод обновления весов
(method: 'sgd' или ‘adadelta’).
let trainer = new convnetjs.Trainer(net, {method:'sgd', learning_rate:0.01, l2_decay:0.001});
trainer.train(x, y); // x — входной вектор, y — целевая метка
Обучение может выполняться пакетно или по отдельным примерам. ConvNetJS поддерживает mini-batch обучение, что позволяет ускорить сходимость и стабилизировать градиенты.
Обратное распространение реализуется через метод
backward(), который вычисляет градиенты для каждого слоя,
начиная с выхода сети и двигаясь к входу. Важно правильно задавать
функцию потерь:
Пример использования функции потерь:
let x = new convnetjs.Vol([0.1, 0.2, 0.3]);
let y = 1;
trainer.train(x, y);
ConvNetJS предоставляет поддержку Q-learning и Deep Q-learning через объект RLAgent. Основные компоненты:
Классический цикл взаимодействия агента со средой:
let agent = new convnetjs.QLearner(state_size, num_actions, {alpha:0.01, gamma:0.9, epsilon:0.1});
let state = env.getState();
let action = agent.act(state);
let {nextState, reward} = env.step(action);
agent.learn(state, action, reward, nextState);
ε-greedy стратегия обеспечивает баланс между исследованием среды и эксплуатацией известных знаний. Параметр ε постепенно уменьшается, чтобы агент со временем больше полагался на изученные оптимальные действия.
ConvNetJS работает полностью на JavaScript, что позволяет запускать сети в браузере без серверной поддержки. Для ускорения вычислений:
ConvNetJS поддерживает визуализацию:
let layer = net.layers[1];
console.log(layer.filters[0].w); // визуализация весов фильтра
Эта возможность особенно полезна при исследовании поведения агента и отладки обучения с подкреплением.
Хотите, я могу подготовить следующую главу, где подробно разберём реализацию сверточных сетей и фильтров в ConvNetJS с кодовыми примерами и визуализацией весов?