Добавление слоев смещения

Слои смещения (bias layers) играют ключевую роль в нейронных сетях, позволяя модели сдвигать активацию нейронов независимо от входных данных. В ConvNetJS реализация смещения встроена в большинство слоев, но возможна также явная работа с отдельными bias-слоями для повышения гибкости архитектуры.


Основы bias-слоев

Bias-слой добавляет вектор смещения (b) к входу (x), формируя выход (y):

[ y = x + b]

где:

    1. — входной вектор,
    1. — параметр смещения, который обучается,
    1. — выход слоя после добавления смещения.

Важное свойство bias-слоев — они не изменяют размерность входа: размерность выходного вектора совпадает с размерностью входного.


Создание bias-слоя в ConvNetJS

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-слоя к сети

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});

Здесь:

  • Входной слой имеет размерность 10.
  • Полносвязный слой (fc) выводит 20 нейронов.
  • Bias-слой добавляет смещение к каждому из 20 выходов.
  • Softmax слой выполняет классификацию.

Использование bias-слоя позволяет разделять обучение весов и смещений, что бывает полезно для тонкой настройки сложных сетей.


Обучение 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});

Во время тренировки градиенты смещений интегрируются с градиентами весов автоматически, обеспечивая согласованное обновление всей сети.


Практические советы по использованию bias-слоев

  1. Начальное значение смещения Для ReLU полезно задать bias_pref чуть больше нуля (0.1–0.2), чтобы нейроны активировались с самого начала и не «замирали».

  2. Совмещение с fc-слоями Часто bias добавляется не как отдельный слой, а через параметр bias_pref в полносвязных или сверточных слоях:

    {type:'fc', num_neurons:100, activation:'relu', bias_pref:0.1}

    Такой подход экономит вычислительные ресурсы и делает сеть компактнее.

  3. Отдельные bias-слои Используются для сложных архитектур, когда нужно добавить смещение после нескольких параллельных потоков данных, или для контроля смещений в специальных модулях (например, attention-механизмах).


Визуализация и отладка bias-слоев

Для анализа работы сети удобно наблюдать значения смещений:

console.log(biasLayer.biases.w);

При обучении bias-значения постепенно адаптируются, отражая сдвиги активации, которые помогают нейронам реагировать на разнообразные входные сигналы.


Итоговое наблюдение

Bias-слои в ConvNetJS предоставляют гибкий способ управлять сдвигами нейронов. Они:

  • Упрощают обучение, особенно с нелинейными активациями.
  • Могут быть встроенными или явными.
  • Поддерживаются оптимизаторами SGD и участвуют в обратном распространении.

Правильное использование bias-слоев повышает устойчивость и скорость сходимости сети, особенно в глубоких архитектурах.