Может кто-нибудь объяснить мне алгоритм backpropagation?

Недавно я закончил курс профессора Ng Machine Learning на Coursera, и, хотя мне нравился весь курс, мне никогда не удавалось понять алгоритм backpropagation для обучения нейронных сетей.

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

Я попробую и просто сформулирую проблему, но я могу не понимать, как работает backprop, поэтому, если это не имеет смысла, не обращайте на него внимания:

Для любого заданного node N, с учетом входных весов/значений, весов/значений выхода и ошибки/стоимости всех узлов, к которым N выводит, как я могу рассчитать "стоимость" N и использовать это для обновления входных весов?

Ответ 1

Рассмотрим a node в сети обратного распространения (BP). Он имеет несколько входов и производит выходное значение. Мы хотим использовать коррекцию ошибок для обучения, поэтому она также обновит весы на основе оценки ошибок для node.

Каждый node имеет значение смещения, θ. Вы можете думать об этом как о весе внутреннего, постоянного значения с 1,0-значным значением.

Активация представляет собой суммирование взвешенных входов и значение смещения. Давайте рассмотрим наш node интерес как j, узлы в предыдущем слое со значениями я и узлы в последующем слое со значениями k. Активация нашего node j:

net j= Σ i (o i × w ij) + θ jсуб >

То есть, значение активации для j представляет собой сумму продуктов вывода из node я и соответствующего веса, связывающего node я и j, плюс значение смещения.

Выход нашей node j является передаточной функцией активации:

o j= f (net j)

f обычно является сигмоидной функцией.

f (net j) = 1/(1 + e -net j)

Сигмоидная функция имеет легкую спецификацию первой производной:

f '(net j) = f (net j) × (1.0 - f (net j))

Какую бы функцию передачи мы ни использовали, нам нужно знать, как вычислить ее первую производную. BP работает с помощью градиентного спуска через Chain Rule, так что это важно. Уравнение выше будет отличаться с другой передаточной функцией.

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

Значение, используемое для оценки ошибки node в BP, называется δ. Δ для a node пропорционален первой производной активации node и полученному ей числу ошибок. Для принятого условия ошибки есть две формулировки: одна для выходных узлов и одна для скрытых узлов.

В общем,

δ = f '(net) × (полученная ошибка)

Для вывода node,

δ output= f '(net) × (t - o)

где t - ожидаемое значение на этом выходе node, а o - фактическое выходное значение этого выхода node.

Для нашего скрытого node j это примерно так:

δ j= f '(net j) × Σ k k × w JKсуб > )

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

dw ij= L × o i × δ j

dw здесь представляет собой "изменение веса", так что уравнение говорит, что изменение веса от node я до нашего node j равно произведению параметра обучения L (как правило, такое же значение для всех узлов в сети), выходное значение node я и δ (коэффициент ошибок) для нашего node j.

Регулировка значения смещения аналогична настройке веса.

j= L × f (θ j) × δ j

dθ здесь представляет собой "изменение в θ". Мы должны применить передаточную функцию к значению смещения θ j, чтобы получить такой же термин, как вывод из node. В противном случае это выглядит так же, как и другое уравнение.

Я должен отметить, что вычисление изменений веса должно производиться по всей сети, а затем применять изменения после того, как все они рассчитаны.

Ответ 2

Для любого заданного node N, учитывая входные веса/значения, выход весов/значений и ошибки/стоимости всех узлов, к которым N выводит, как рассчитать "стоимость" N и использовать это для обновления ввода веса?

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