FullyConnectedLayer — это основной строительный блок многослойных нейронных сетей в ConvNetJS, реализующий полносвязный (dense) слой. Каждый нейрон данного слоя соединен со всеми нейронами предыдущего слоя, что позволяет эффективно обучать модели, способные выявлять сложные зависимости между входными признаками.
Создание полносвязного слоя осуществляется через объект
ConvNetJS.Layer с указанием типа fc. Основные
параметры конструктора:
num_neurons — количество нейронов в слое. Обязательный
параметр.activation — функция активации, которая будет
применяться к каждому нейрону. Поддерживаемые значения:
'relu', 'sigmoid', 'tanh',
'linear'. По умолчанию используется
'relu'.drop_prob — вероятность случайного отключения нейронов
(dropout) для регуляризации. Диапазон: 0–1, по умолчанию 0
(отсутствует).bias_pref — смещение по умолчанию для всех нейронов,
полезно для ускорения сходимости. Значение по умолчанию — 0.weight_decay — коэффициент регуляризации весов, который
используется для предотвращения переобучения. По умолчанию 0.Пример создания слоя:
var layer_def = {
type: 'fc',
num_neurons: 128,
activation: 'relu',
drop_prob: 0.2,
bias_pref: 0.1
};
var fc_layer = new convnetjs.FullyConnectedLayer(layer_def);
Каждый полносвязный слой хранит веса и смещения в виде объектов
Vol (объект объема данных, используемый в ConvNetJS):
filters — матрица весов размером
[num_inputs x num_neurons].biases — вектор смещений длиной
num_neurons.out_act — выходной объем активаций после применения
функции активации.in_act — входной объем, поступающий от предыдущего
слоя, используется для обратного распространения ошибки.Метод forward вычисляет активации слоя на основе
входного объема V. Алгоритм работы:
Формально:
[ y = f(W x + b)]
где (x) — входной вектор, (W) — матрица весов, (b) — вектор смещений, (f) — функция активации.
Пример использования:
var input_vol = new convnetjs.Vol([1, 0, 1, 0]); // пример входного объема
fc_layer.forward(input_vol, true); // true включает тренировочный режим
console.log(fc_layer.out_act);
Метод backward рассчитывает градиенты функции потерь по
входам и обновляет градиенты весов и смещений:
filters и
biases.Пример:
fc_layer.backward();
Обратное распространение корректно работает вместе с dropout, игнорируя отключенные нейроны.
Для оптимизации ConvNetJS предоставляет класс Trainer,
который работает с FullyConnectedLayer. Основные параметры
оптимизатора:
learning_rate — скорость обучения.momentum — импульс для сглаживания обновлений
весов.l2_decay — L2-регуляризация для весов.Пример настройки тренера:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
l2_decay: 0.001
});
Обновление весов происходит автоматически при вызове метода
train:
trainer.train(x, y); // x — входной Vol, y — целевой индекс класса
Dropout в FullyConnectedLayer реализован как случайное
обнуление нейронов на каждом обучающем шаге с вероятностью
drop_prob. На этапе тестирования все нейроны активны, а их
выходы масштабируются на коэффициент 1 - drop_prob для
сохранения ожидаемого значения.
Регуляризация весов через weight_decay добавляет к
градиенту каждого веса член:
[ _{w} += w]
что препятствует чрезмерному росту весов и снижает риск переобучения.
Полносвязные слои часто используют после свёрточных слоев или в
составе многослойных перцептронов. Для этого необходимо выровнять
выходной объем предыдущего слоя в одномерный вектор с помощью слоя
flatten или встроенных методов ConvNetJS.
'relu' для ускорения сходимости.bias_pref часто задаются небольшим
положительным числом (0.1) для улучшения работы ReLU.num_neurons.FullyConnectedLayer является универсальным инструментом для построения классических нейронных сетей, обеспечивая гибкость и совместимость с другими слоями ConvNetJS. Он легко настраивается, поддерживает регуляризацию и позволяет эффективно обучать модели с использованием стандартных оптимизаторов.