Высокоуровневое описание алгоритма обратного распространения
Обратное распространение пытается выполнить градиентное спуск на поверхности ошибки нейронной сети, корректируя веса с помощью методов динамического программирования для обеспечения возможности вычислений. .
Я попытаюсь объяснить в терминах высокого уровня все только что упомянутые понятия.
Поверхность ошибки
Если у вас есть нейронная сеть с, скажем, N нейронами в выходном слое, это означает, что ваши выходные данные действительно являются N-мерным вектором, и этот вектор живет в N-мерном пространстве (или на N-мерной поверхности .) Так же как и «правильный» вывод, против которого вы тренируетесь. Так же, как и разница между вашим «правильным» ответом и фактическим результатом.
Это различие с подходящей подготовкой (особенно с учетом абсолютных значений) - это вектор ошибок , существующий на поверхности ошибок.
градиентный спуск
Используя эту концепцию, вы можете рассматривать нейронную сеть как процесс корректировки весов ваших нейронов так, чтобы функция ошибок была небольшой, в идеале равной нулю. Концептуально, вы делаете это с исчислением. Если бы у вас был только один выход и один вес, это было бы просто - возьмите несколько производных, которые скажут вам, в каком «направлении» двигаться, и сделайте корректировку в этом направлении.
Но у вас нет одного нейрона, у вас их N и значительно больше входных весов.
Принцип тот же, за исключением того, что вместо исчисления на линиях в поисках уклонов, которые вы можете изобразить в своей голове, уравнения становятся выражениями векторной алгебры, которые вы не можете легко изобразить. Термин градиент является многомерным аналогом наклона на линии, а спуск означает, что вы хотите переместить вниз на эту поверхность ошибки пока ошибки не будут небольшими.
Динамическое программирование
Однако есть еще одна проблема - если у вас более одного слоя, вы не можете легко увидеть изменение весов в каком-то непроизводительном слое по сравнению с фактическим выходом.
Динамическое программирование - это бухгалтерский метод, помогающий отслеживать происходящее. На самом высоком уровне, если вы наивно пытаетесь сделать все это векторное исчисление, вы в конечном итоге вычисляете некоторые производные снова и снова. Современный алгоритм обратного распространения исключает некоторые из них, и так случается, что вы сначала обновляете выходной слой, затем второй, последний слой и т. Д. Обновления распространяются назад из выходных данных, отсюда и название.
Итак, если вам повезло, что вы раньше подвергались градиентному спуску или векторному исчислению, то, надеюсь, это щелкнуло.
Полный вывод обратного распространения может быть сведен к странице с жесткой символьной математикой, но трудно понять смысл алгоритма без высокоуровневого описания. (На мой взгляд, это просто пугающе.) Если вы плохо разбираетесь в векторном исчислении, то, извините, вышеприведенное, вероятно, не помогло. Но чтобы обратное распространение на самом деле работало, не обязательно понимать полное происхождение.
Мне показалось, что следующая статья (написанная Рохасом) очень полезна, когда я пытался понять этот материал, даже если это большой PDF-файл одной главы его книги.
http://page.mi.fu -berlin.de / Rojas / нейронная / глава / K7.pdf