Производная и частная производная

Библиотека Synaptic представляет собой фреймворк для построения нейронных сетей в JavaScript, обеспечивающий гибкость в создании различных типов архитектур: от простых однослойных перцептронов до сложных рекуррентных сетей. Основой работы с нейронной сетью является определение структуры, инициализация весов и настройка функции обучения.

Архитектура сети

В Synaptic сеть строится из нейронов, объединённых в слои. Ключевые элементы:

  • Neuron — основной строительный блок сети. Каждый нейрон хранит текущее значение активации, смещение (bias) и веса входов.
  • Layer — слой нейронов, обеспечивающий групповую организацию и передачу сигналов между слоями.
  • Network — совокупность слоев, способная выполнять прямое распространение (forward propagation) и обратное распространение ошибки (backpropagation).

Пример создания слоя из трёх нейронов:

const { Layer } = require('synaptic');

let inputLayer = new Layer(3);

Прямое распространение сигнала

Процесс forward propagation заключается в последовательном вычислении выходных значений нейронов каждого слоя на основе входных данных и текущих весов:

  1. Входные данные подаются на первый слой.
  2. Каждый нейрон вычисляет взвешенную сумму входов и добавляет смещение: [ z = _i (x_i w_i) + b]
  3. Применяется активационная функция (например, сигмоидальная или гиперболическая тангенс), которая нормализует выход нейрона: [ a = (z) = ]

Обратное распространение ошибки

Обучение сети в Synaptic осуществляется методом backpropagation, основанным на вычислении градиентов функции ошибки по каждому весу. Для нейрона (j) на слое (l) частная производная функции ошибки (E) по весу (w_{ij}) вычисляется по формуле:

[ = _j a_i]

где:

  • (a_i) — активация нейрона на предыдущем слое,

  • (_j) — локальный градиент нейрона (j), который зависит от выбранной функции активации:

    • Для сигмоида: (_j = (y_j - t_j) a_j (1 - a_j))
    • Для гиперболического тангенса: (_j = (y_j - t_j) (1 - a_j^2))

Ключевое отличие: частная производная по весу учитывает как ошибку на выходе, так и влияние конкретного входа на эту ошибку. Это позволяет корректно корректировать веса для минимизации функции потерь.

Производная активационной функции

Для эффективного обучения необходимо точно вычислять производные активационных функций, так как они напрямую участвуют в формуле градиента:

  • Сигмоид: [ ’(z) = (z) (1 - (z))]
  • Тангенс гиперболический: [ ’(z) = 1 - ^2(z)]

Производная используется в вычислении локального градиента (_j), что позволяет корректно обновлять веса на каждом шаге обучения:

[ w_{ij}^{new} = w_{ij}^{old} - ]

где () — коэффициент обучения.

Частные производные в многослойной сети

В многослойной архитектуре ошибка на выходном слое распространяется обратно через скрытые слои. Для нейрона (h) скрытого слоя локальный градиент вычисляется как сумма взвешенных градиентов нейронов следующего слоя:

[ _h = a_h (1 - a_h) j w{hj} _j]

Это позволяет корректно учитывать влияние каждого скрытого нейрона на итоговую ошибку сети.

Реализация в Synaptic

Пример ручного обновления весов с использованием частных производных:

const { Layer, Network } = require('synaptic');

let inputLayer = new Layer(2);
let hiddenLayer = new Layer(3);
let outputLayer = new Layer(1);

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

let network = new Network({
  input: inputLayer,
  hidden: [hiddenLayer],
  output: outputLayer
});

// Прямое распространение
let output = network.activate([0.5, 0.8]);

// Ошибка и обратное распространение
let target = [1];
network.propagate(0.3, target);

Метод propagate Synaptic автоматически вычисляет локальные градиенты () для каждого нейрона с учётом производных активационных функций и корректирует веса по формуле градиентного спуска.

Практические аспекты

  • Выбор функции активации напрямую влияет на вычисление производных и, как следствие, на скорость сходимости.
  • Малые или большие значения коэффициента обучения () могут приводить к медленному обучению или расходимости сети.
  • Глубокие сети требуют точного расчёта частных производных для всех слоёв, иначе ошибка не будет корректно распространяться назад.

Сочетание прямого распространения, вычисления частных производных и обратного распространения составляет ядро обучения нейронной сети в Synaptic, обеспечивая точную настройку весов и успешное приближение к целевой функции.