Нейрон в искусственной нейронной сети — это базовый элемент обработки информации, который получает входные данные, преобразует их через функцию активации и передаёт результат дальше. Для корректного обучения сети необходимо вычислять ошибку каждого нейрона и соответствующий градиент, который используется в алгоритме обратного распространения ошибки (backpropagation).
Каждый нейрон можно описать следующими параметрами:
Для нейрона, находящегося на выходном слое, ошибка определяется как разница между ожидаемым значением (t) и фактическим выходом (y):
[ = t - y]
Если нейрон находится на скрытом слое, ошибка вычисляется через сумму ошибок нейронов следующего слоя, взвешенных соответствующими весами:
[ _j = f’(*j) w_{jk} _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 каждый нейрон представлен объектом 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), приводящий к нестабильному обучению.
Выбор функции активации, правильная инициализация весов и подбор скорости обучения напрямую влияют на величину градиента и, соответственно, на эффективность обучения нейрона.
Суммарный вход: [ = _i x_i w_i + b]
Выход нейрона: [ y = f()]
Ошибка нейрона:
Градиент по весу: [ = x_i]
Обновление веса: [ w_i w_i + x_i]
Эти формулы образуют основу алгоритма обратного распространения ошибки и служат центральным механизмом обучения нейронной сети в библиотеке Synaptic.