Слои смещения (bias layers) играют ключевую роль в нейронных сетях, позволяя модели сдвигать активацию нейронов независимо от входных данных. В ConvNetJS реализация смещения встроена в большинство слоев, но возможна также явная работа с отдельными bias-слоями для повышения гибкости архитектуры.
Bias-слой добавляет вектор смещения (b) к входу (x), формируя выход (y):
[ y = x + b]
где:
Важное свойство bias-слоев — они не изменяют размерность входа: размерность выходного вектора совпадает с размерностью входного.
ConvNetJS предоставляет конструктор LayerBias для явного
добавления слоя смещения:
var biasLayer = new convnetjs.LayerBias({num_neurons: 100});
Параметры конструктора:
num_neurons — количество нейронов в слое. Определяет
размерность вектора смещений.bias_pref — начальное значение смещения (по умолчанию
0.0). Полезно для ускорения обучения, особенно при ReLU-активациях.Пример инициализации с ненулевым начальным смещением:
var biasLayer = new convnetjs.LayerBias({
num_neurons: 50,
bias_pref: 0.1
});
Bias-слой можно использовать как отдельный компонент сети или встроить между другими слоями:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:10});
layer_defs.push({type:'fc', num_neurons:20, activation:'relu'});
layer_defs.push({type:'bias', num_neurons:20}); // Добавление смещения
layer_defs.push({type:'softmax', num_classes:5});
Здесь:
Использование bias-слоя позволяет разделять обучение весов и смещений, что бывает полезно для тонкой настройки сложных сетей.
Bias-слои автоматически участвуют в обратном распространении ошибки (backpropagation). Градиенты вычисляются по формуле:
[ = ]
где (L) — функция потерь, а (y_i) — выход смещённого нейрона.
ConvNetJS хранит градиенты смещений в объекте
biasLayer.biases.dw, а значения смещений в
biasLayer.biases.w. Обновление происходит через оптимизатор
SGD:
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9, batch_size:5});
Во время тренировки градиенты смещений интегрируются с градиентами весов автоматически, обеспечивая согласованное обновление всей сети.
Начальное значение смещения Для ReLU полезно
задать bias_pref чуть больше нуля (0.1–0.2), чтобы нейроны
активировались с самого начала и не «замирали».
Совмещение с fc-слоями Часто bias добавляется
не как отдельный слой, а через параметр
bias_pref в полносвязных или сверточных слоях:
{type:'fc', num_neurons:100, activation:'relu', bias_pref:0.1}
Такой подход экономит вычислительные ресурсы и делает сеть компактнее.
Отдельные bias-слои Используются для сложных архитектур, когда нужно добавить смещение после нескольких параллельных потоков данных, или для контроля смещений в специальных модулях (например, attention-механизмах).
Для анализа работы сети удобно наблюдать значения смещений:
console.log(biasLayer.biases.w);
При обучении bias-значения постепенно адаптируются, отражая сдвиги активации, которые помогают нейронам реагировать на разнообразные входные сигналы.
Bias-слои в ConvNetJS предоставляют гибкий способ управлять сдвигами нейронов. Они:
Правильное использование bias-слоев повышает устойчивость и скорость сходимости сети, особенно в глубоких архитектурах.