ConvNetJS — это библиотека для нейронных сетей, полностью написанная на JavaScript, которая позволяет создавать, обучать и тестировать модели прямо в браузере или в Node.js. Она ориентирована на быстрое прототипирование и визуализацию обучения, обеспечивая полный контроль над архитектурой сети и процессом обучения.
Сеть в 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);
Ключевые моменты:
input задаёт размер входных
данных.conv выполняет свёртку с заданным
числом фильтров, размером ядра и функцией активации.pool уменьшает пространственные
размеры карт признаков.softmax служит для классификации на
несколько классов.Для обучения сети создаётся объект тренера
ConvNetJS.SGDTrainer, где задаются метод
оптимизации, скорость обучения, коэффициенты регуляризации и параметры
момента:
var trainer = new convnetjs.SGDTrainer(net, {
method: 'adadelta',
batch_size: 20,
l2_decay: 0.001
});
Важные параметры:
method: 'sgd',
'adadelta', 'adam' — выбор алгоритма
оптимизации.batch_size: количество образцов,
обрабатываемых за один шаг обучения.l2_decay: коэффициент L2-регуляризации
для предотвращения переобучения.momentum и
learning_rate применяются при классическом
SGD.ConvNetJS работает с массивами чисел или объектами
Vol, представляющими многомерные данные.
Для обучения изображений часто используется преобразование данных в
объекты Vol:
var x = new convnetjs.Vol(28, 28, 1);
for (var i=0;i<28*28;i++) {
x.w[i] = pixels[i]/255.0; // нормализация
}
Особенности:
[0,1] или
[-1,1] для стабильного обучения.Vol хранит веса, градиенты и размерность данных.Обучение выполняется методом train
тренера, которому передаётся объект Vol и метка класса:
trainer.train(x, label);
Во время тренировки библиотека автоматически:
Можно организовать пакетную обработку данных, накапливая градиенты для группы образцов, что ускоряет обучение и стабилизирует градиенты.
Для оценки точности сети используется прямой проход без обучения:
var output = net.forward(x);
var predicted_label = output.w.indexOf(Math.max(...output.w));
Ключевые моменты:
forward возвращает объект Vol с
вероятностями классов.ConvNetJS поддерживает сериализацию сети в JSON, что удобно для сохранения и последующей загрузки:
var json = net.toJSON();
var net2 = new convnetjs.Net();
net2.fromJSON(json);
Особенности:
Для повышения качества работы агента применяются:
l2_decay,
dropout).relu,
tanh, sigmoid).Применение этих методов позволяет агенту быстро адаптироваться к сложным входным данным и минимизировать ошибку на тестовых примерах.
Для создания агента, способного принимать решения на основе состояния среды:
trainer.train.Пример для Q-обучения через ConvNetJS:
var x = new convnetjs.Vol(state);
var q_values = net.forward(x).w;
var target = q_values.slice();
target[action] = reward + gamma * max_future_q;
trainer.train(x, target);
Ключевые моменты Q-обучения:
state преобразуется в Vol.q_values — оценки всех действий.train позволяет агенту
оптимизировать стратегию.ConvNetJS встроенно поддерживает получение значений градиентов и активаций каждого слоя, что позволяет создавать интерактивные графики:
console.log(net.layers[1].filters[0].w);
Такое наблюдение помогает: