Вычисление ошибки и градиента в отдельном нейроне

Нейрон в искусственной нейронной сети — это базовый элемент обработки информации, который получает входные данные, преобразует их через функцию активации и передаёт результат дальше. Для корректного обучения сети необходимо вычислять ошибку каждого нейрона и соответствующий градиент, который используется в алгоритме обратного распространения ошибки (backpropagation).


Основные параметры нейрона

Каждый нейрон можно описать следующими параметрами:

  • входные значения: (x_1, x_2, , x_n)
  • веса связей: (w_1, w_2, , w_n)
  • смещение (bias): (b)
  • суммарный вход (net input): [ = _{i=1}^{n} x_i w_i + b]
  • выход нейрона: [ y = f()] где (f) — функция активации, например, сигмоида, ReLU или tanh.

Вычисление ошибки нейрона

Для нейрона, находящегося на выходном слое, ошибка определяется как разница между ожидаемым значением (t) и фактическим выходом (y):

[ = t - y]

Если нейрон находится на скрытом слое, ошибка вычисляется через сумму ошибок нейронов следующего слоя, взвешенных соответствующими весами:

[ _j = f’(*j) w_{jk} _k]

где:

  • (_j) — ошибка текущего нейрона (j)
  • (f’(_j)) — производная функции активации по суммарному входу
  • (w_{jk}) — вес связи от нейрона (j) к нейрону (k) следующего слоя
  • (_k) — ошибка нейрона (k) следующего слоя

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

Производная функции активации (f’()) критически важна для вычисления градиента. Для распространённых функций активации она определяется следующим образом:

  • Сигмоида ( (x) = ): [ ’(x) = (x) (1 - (x))]

  • Гиперболический тангенс ( (x) ): [ ’(x) = 1 - ^2(x)]

  • ReLU ( (x) = (0, x) ): [ ’(x) = ]

Использование производной функции активации позволяет масштабировать ошибку нейрона в зависимости от его чувствительности к изменениям входа.


Градиент нейрона

Градиент нейрона — это величина, показывающая, насколько сильно необходимо изменить веса для уменьшения ошибки. Он вычисляется как произведение ошибки нейрона () на значения его входов:

[ = x_i]

где (E) — функция ошибки сети (например, среднеквадратичная ошибка):

[ E = _{j} (t_j - y_j)^2]

Обновление весов при использовании метода градиентного спуска выполняется по формуле:

[ w_i w_i + x_i]

где () — скорость обучения.


Реализация в библиотеке Synaptic

В Synaptic каждый нейрон представлен объектом Neuron, который хранит веса, смещение и методы для вычисления активации и ошибки.

Основные свойства нейрона:

  • neuron.activation — выходное значение нейрона после активации
  • neuron.bias — смещение
  • neuron.connections — массив входных и выходных связей с другими нейронами
  • neuron.error — ошибка, вычисленная для данного нейрона

Ключевые методы:

  • neuron.activate(inputs) — вычисляет выход нейрона

  • neuron.propagate(rate, target) — выполняет обновление весов на основе ошибки.

    • rate — скорость обучения
    • target — ожидаемое значение для выходного нейрона; для скрытого слоя можно передавать null, и ошибка будет рассчитана автоматически через веса следующего слоя.

Пример вычисления ошибки и градиента для отдельного нейрона Synaptic:

const neuron = new synaptic.Neuron();

// Активация нейрона с входами
const output = neuron.activate([0.5, 0.8]);

// Вычисление ошибки для выходного нейрона
neuron.propagate(0.1, 1); // target = 1

console.log(neuron.error); // ошибка после propagation
console.log(neuron.connections); // обновлённые веса

При обучении скрытого слоя библиотека автоматически использует формулу для градиента через веса следующего слоя, обеспечивая корректное распространение ошибки назад.


Влияние градиента на обучение

Малый градиент может привести к затуханию ошибки (vanishing gradient), особенно при использовании сигмоидной функции активации на глубоких сетях. Слишком большой градиент может вызвать взрыв ошибки (exploding gradient), приводящий к нестабильному обучению.

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


Итоговые соотношения для нейрона

  1. Суммарный вход: [ = _i x_i w_i + b]

  2. Выход нейрона: [ y = f()]

  3. Ошибка нейрона:

  • Выходной слой: (= t - y)
  • Скрытый слой: (= f’() k w{jk} _k)
  1. Градиент по весу: [ = x_i]

  2. Обновление веса: [ w_i w_i + x_i]

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