Итак, прежде чем мы перейдем к техническим аспектам алгоритма, давайте представим, что к экзамену готовится группа студентов, как показано ниже.

А теперь посмотрим, когда они пойдут сдавать первый экзамен в этом семестре, который состоится в ближайший понедельник!

Но знаете что, они не сдали экзамен после множества тщательных исследований! Теперь они начинают обсуждать причину своей неудачи.

Как вы думаете, что могло быть причиной их неудач даже после долгой зубрежки, групповых обсуждений, ночей в библиотеке и т. Д.

Давайте вместе подумаем. Итак, какие переменные здесь задействованы -

  • Может быть, у них не было времени на все изучение, потому что они начали поздно подготовку,
  • может быть, они не изучали настоящие вещи и просто тратили слишком много времени на нерелевантные вещи,
  • возможно, библиотека была не лучшим местом для них,
  • возможно, обстановка там была не такой уж крутой и они слишком сильно отвлекались

и что "нет. Может быть любой из них или каждый из них. Итак, что они сделали для следующих экзаменов? Один из умных парней в них предложил изменить время учебы и изменить среду, например, очень тихое место (может быть, в углу) и т. Д.

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

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

Согласно википедии -

[Алгоритмы обратного распространения - это семейство методов, используемых для эффективного обучения искусственных нейронных сетей (ИНС) в соответствии с подходом градиентного спуска, который использует цепное правило. Основная особенность обратного распространения - его итеративный, рекурсивный и эффективный метод расчета обновлений весов, которые необходимо улучшить в сети, пока она не сможет выполнить задачу, для которой ее обучают.]

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

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

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

Во-первых, давайте посмотрим, что происходит в первом слое (от ввода до скрытого слоя) -

вывод из layer1 = sigmoid (w ¹ * (x) + b ¹), где w ¹ означает матрицу весов из первого слоя

Теперь вывод из layer2 = sigmoid (w² * (x) + b²), где w² означает матрицу весов из второго слоя, а b означает смещение.

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

Код выше будет примерно таким:

Итак, мы вычислили наши выходные данные для нейронных сетей с помощью алгоритма прямой связи, и он просто называется «прямая связь», потому что значения передаются в прямом направлении, нет петли или движения назад в любой части сети.

Теперь мы хотим убедиться, что мы идем в правильном направлении. Итак, что вы делаете, когда хотите проверить, правильно ли вы решили конкретный вопрос? Вы сравниваете свое решение с известным вам точным решением.

Мы сделаем именно это. Для этого мы просто сравним предсказанные значения с правильными значениями (известными нам) и вычислим ошибку (здесь мы используем функцию кросс-энтропийных потерь / функцию ошибок).

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

Итак, давай сделаем это.

Для этого нам нужно применить алгоритм градиентного спуска, а для этого нам нужны производные функции ошибок по весам.

Перед этим мы должны понять тот факт, что как мы вычисляем производные составных функций (функция функции):

Нам нужно взять все производные от последней функции до первого движения назад.

Пришло время вычислить одну из производных:

где

Давайте интуитивно поймем формулу -

Когда мы вычисляем градиент функции ошибок, это означает, что нас интересует, насколько чувствительна функция ошибок к изменению весов. Для этого мы понимаем, что когда мы изменяем вес w11 на небольшую величину, это изменяет h1 на небольшую величину, которая изменяет h и, наконец, что незначительно меняет вывод.

и примените градиентный спуск -

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

Итак, предположим, что нужно изменить только веса:

w11 ², w11 ¹, w12 ¹, w22 ¹, оставив другие веса без изменений.

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

На этом наш алгоритм обратного распространения завершен.

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

— — — — — — — — — — — — — — — — — — -

Для получения более подробной информации об этих концепциях см.

для интуиции градиентного спуска:



— — — — — — — — — — — — — — — — — — — — — — — -

изображения: авторские права защищены их соответствующими владельцами.

Чтобы увидеть больше таких интересных историй, вы можете подписаться на меня или подписаться на меня.

Не стесняйтесь делиться своими мыслями об обратной связи в разделе комментариев ниже.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —