Почему мы должны размножать дельту по градиенту вместо деления во время обратного распространения функции активации? - PullRequest
1 голос
/ 24 июня 2019

Почему мы должны умножать delta на gradient вместо division во время обратного распространения функции активации?

Например, как известно: ReLU-активация с slope=0.1: https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Leaky_ReLUs

if(x > 0) y = x; else y = x * 0.1

Итак:


Также как известно gradient = dY / dX

Во время градиентного спуска мы распространяем функцию активации от delta до y = ReLU(x), то есть, наконец, мы хотим изменить вывод y функции ReLU на это значение delta = dY.

Для этого мы должны изменить x на dX, то есть dX = dY / gradient

Но во всех рамках, включая Caffe, мы умножаем его на градиент вместо деления,

т.е. dX = dY * gradient

Почему мы умножаем delta на gradient вместо division во время обратного распространения через функцию активации?


enter image description here



enter image description here

1 Ответ

0 голосов
/ 25 июня 2019

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

Первое, что вы ошиблись, это то, что мы не пытаемся изменить X, на самом деле мыне иметь никакого контроля над X, который является входом сети.То, что мы пытаемся изменить, это W (веса).

Но почему мы умножаем дельту на градиент активации?в обратном распространении мы хотим вычислить для веса W_ij, сколько этот вес имел отношение к произведенной ошибке (dE / dW_ij), чтобы мы могли знать, как исправить каждый вес.Delta_ij - это индикатор того, насколько вклад в нейрон j (нейрон в конце W_ij) привел к ошибке.Функция активации нейрона j затем применяется к его входу, чем больше производная этой функции, тем меньше мы должны изменить вход, чтобы уменьшить ошибку.Другими словами, производная функций активации пропорциональна вкладу W_ij в полученную ошибку.

также помогает изучение математики за BP, поэтому здесь является математическим объяснением.

...