Векторизованная / тяжелая математическая часть.

Отказ от ответственности: Это примечания к уроку Обратное распространение (векторизованная / тяжелая математическая часть) (курс PadhAI onefourthlabs Первый курс по глубокому обучению )

Начнем с простого базового нейрона и алгоритма обучения для него, как показано ниже.

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

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

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

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

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

Затем, как эта часть будет общим примером, здесь мы берем обведенный нейрон a2 во втором слое, а затем, если мы хотим распространить назад, нам нужно пройти все пути назад, как показано, и это повлияет на все нейроны в вышеупомянутых слоях после обновления. . Это идея обратного распространения. Вычисление нескольких весов за один раз.

Здесь, в этой конкретной сети, мы собираемся сделать упор на w₁₃₁, тогда мы даем производную функции потерь.

Это прямо записано для производной функции потерь от w₁₃₁. Если мы возьмем первые формулы, мы сможем повторно использовать все это, кроме последнего члена

(∂ a₁₃ /w₁₃₁) изменятся только остальные, все термины можно использовать повторно.

Затем сначала мы начнем с производной градиента с производной a₂ нейрона в первом слое. который представлен как (∂L / ∂ a₂)

Что будет матрицей производной функции потерь относительно a₂₁ и a₂₂.

Давайте посмотрим на интуитивное объяснение обратного распространения, прежде чем мы перейдем к математической части.

ŷ = [ ŷ₁ ŷ₂]

a₂ = [a₂₁ a₂₂]

вот так ŷ и a₂ определены, а рядом находится базовая сеть

Здесь мы рассматриваем следующую нейронную сеть, затем после расчета потерь с помощью функции потерь, если мы получим какие-либо потери, мы перейдем к третьему слою, и тогда мы узнаем, что третий слой принимает значения, данные из предыдущего слоя, и применяет soft max. Затем мы перейдем ко второму слою, здесь w₃, b₃ - веса, и снова h2 говорит, что это из весов, заимствованных из первый слой, где w₂, b₂ - веса, и так мы будем распространяться в обратном направлении до весов, а затем, наконец, мы перейдем к входам, а затем мы изменим w₁, b₁ в первом слое и так далее, мы обновляем весь вес и уменьшаем значения функции потерь до максимально возможной степени.

Значения w₁, b₁, w₂, b₂, w₃, b₃ играют ключевую роль в этой функции потерь. Обновление их значений играет ключевую роль в окончательном значении потерь. Как их обновить и что это за Процедура, которой необходимо следовать, задается градиентным спуском (нам нужно двигаться в направлении, противоположном градиенту).

Более подробно

Мы можем сказать Wʟ, bʟ и hʟ, а затем спросить их: «Что с вами не так?».

Wʟ и bʟ берут на себя полную ответственность, но hʟ говорит: «Хорошо, пожалуйста, поймите, что я хорош только на уровне предварительной активации»

Слой предварительной активации, в свою очередь, говорит, что я хорош настолько, насколько хорош скрытый слой и веса ниже меня.

Мы продолжаем в том же духе и понимаем, что ответственность лежит на всех весах и смещениях (т. е. на параметрах модели).

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

Интересующие количества:

Мы разделим дальнейшие вычисления на 3 части, а именно (основное внимание уделяется кросс-энтропии и выходным данным Softmax.

1. единицы измерения градиента по отношению к выходным

2. Градиент со скрытыми блоками

3. Градиент относительно веса

Рассмотрим первую часть, выделенную красным в приведенных выше формулах.

Давайте рассмотрим a₃ на рисунке рядом с рисунком. Здесь мы в основном используем приведенные выше формулы: L равно 3, а i находится в диапазоне {1,2}, потому что их всего 2 такие вершины (то есть нейроны), если он имеет k вершин или нейрон, он находится в диапазоне от {1,2, …… ..k} на этом уровне. Мы будем использовать приведенные выше формулы. таким образом мы вычисляем производную независимо для каждого нейрона.

Чтобы найти это, мы выведем формулу для нейрона с вершинами (i, j, k) и обобщим эту формулу на весь слой.

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

Единицы измерения градиента по отношению к выходным:

Здесь мы рассмотрим выражение и упростим, что, соответственно, мы будем использовать формулу производная (u / v) и, как это, мы соответствующим образом упростим и придем к выводу.

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

Наконец, вычисляя градиент, мы приходим к выводу, что градиент - (e (L) - ŷ), который равен - (y- ŷ), что является отрицательным значением разница между истинным значением и прогнозируемым значением.

Градиент со скрытыми элементами:

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

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

Мы уже знаем, что правая часть формул является производной функции потерь по h ᵢⱼ.

Теперь мы можем сказать, что производная - это функция потерь, w.r.t w - это скалярное произведение весов, которые мы присвоили.

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

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

Следовательно, для любого скрытого слоя hᵢ мы зададим это как

∇ₕᵢL(θ) = (Wᵢ₊₁)ᵀ(∇aᵢ₊₁ L(θ))

Мы вычислили только для выходного слоя, который является темно-синей частью, и мы не вычислили его для общей облегченной синей части, поэтому мы вычислим это сейчас. Это для слоя i ‹L-1.

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

Здесь aᵢ - голубая часть третьего слоя, нижняя половина.

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

Теперь, исходя из вышеизложенного, нам нужно вычислить значение ∂L (θ) / ∂aᵢⱼ, мы дадим это, как показано ниже.

Мы уже вычисляли значение ∂L (θ) / ∂hᵢⱼ ранее. Теперь нам нужно только вычислить ∂hᵢⱼ / ∂aᵢⱼ, которое будет вычислено, как показано ниже.

a₂ = [a₂₁ a₂₂ a₂₃], а h₂ задается как

h₂ = [σ(a₂₁) σ(a₂₂) σ(a₂₃)]

h₂ = [h₂₁ h₂₂ h₂₃]

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

Градиент с учетом веса и отклонений:

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

Теперь мы можем записать вывод следующим образом.

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

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

а hₖ₋₁ᵀ - это hₖ₋₁, ₁, hₖ₋₁, ₂, hₖ₋₁, ₃ обведенная часть в приведенном выше рисунок

hₖ₋₁, ₁, hₖ₋₁, ₂, hₖ₋₁, ₃ - это активации слоя k-1, поэтому его можно записать как single layer hₖ₋₁ᵀ здесь T - транспонирование , потому что этот вектор должен быть вектором спящего (по горизонтали), а градиент должен быть вектором стенда (по вертикали), при этом берется скалярное произведение .

Наконец, мы нашли производные по весам W, которые все могут быть вычислены за один раз, т.е.

Wₖ = Wₖ- η * матрица [∇wᵢL (θ)]

Wₖ = Wₖ- η*[∇aₖL(θ). hₖ₋₁ᵀ]

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

У нас есть смещение, соответствующее каждому нейрону в слое.

Здесь ∂L (θ) / ∂aₖᵢ - это частная производная функции потерь относительно смещения iᵗʰ в слое kᵗʰ.

Здесь i заменяется всеми номерами вершин от 1 до n. Это не что иное, как все частные производные функции потерь по слою aₖ

Теперь мы можем окончательно записать bₖ как

bₖ = bₖ- η ∇ ᵇₖL(θ)

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

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

мы произвольно инициализируем веса и будем выполнять прямой проход данных.

Вперед:

В прямом проходе (объяснение алгоритма):

  1. Взяв цикл fro, мы переходим от первого слоя к слою L-1, который находится непосредственно перед скрытым слоем.
  2. Вычислить предварительную активацию aₖ = bₖ -Wₖhₖ₋₁
  3. Вычислите активацию, применяя нелинейность (это может быть сигмоидальная функция hₖ = g (aₖ)
  4. Завершите цикл for, используя это, мы вычислим все, кроме последнего слоя.

Теперь нам нужно вычислить последний слой.

5. здесь светло-зеленые части будут равны взвешенной сумме входов, которая равна aₗ = n + Wₗhₗ₋₁

6. Наконец, выходной ŷ - это некоторая функция, применяемая к светло-зеленым частям, мы видим, что в этом случае мы применяем функцию softmax.

Таким образом мы вычислили все a₁, h₁, a₂, h₂, a₃, h₃ и оба конечных y в последнем слое и, наконец, ŷ.

Это называется прямым проходом или прямым распространением. Это очень простой код с числовым кодом.

После прямого прохода нам нужно распространиться обратно ко всем весам в сети.

Обратное распространение:

  1. мы вычислим градиент по формуле - (y-ŷ).
  2. Выполняя цикл for, переходим от последнего слоя к первому, т. Е. Сформируем L в 1

3. Вычислите градиенты относительно w и b в начале каждой итерации, как показано на рисунке выше.

4. Теперь вычисляем производную по синей части.

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

6. Завершите цикл for.

Таким образом мы сделаем обратное распространение.

Речь идет об обратном распространении, всей теории и части алгоритма обучения.

Пример обратного распространения с примерами значений:

Это основная сеть, которую вы выберете, а затем у нас есть следующие w и b, как показано ниже.

Это w и b нейронной сети. Теперь мы случайным образом присваиваем некоторые значения, и у нас есть истинные результаты:

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

Потери, которые мы получили, составили 0,43, поскольку истинные и прогнозируемые значения различались. Пока мы закончили с прямым проходом и получили потерю 0,43, теперь мы будем распространяться назад с помощью алгоритма обратного распространения.

После первого шага мы перейдем к обновлению слоя gradient w.r.t ниже.

Теперь мы перейдем к вычислению производной функции потерь с предактивационным слоем, который равен:

Теперь мы подошли к обновлению w и b:

Теперь обновление od w похоже на

w₂ = w₂-η*∇ w₂ L(θ)

Таким же образом мы обновим смещение вот так.

Вот как работает обратное распространение, что объясняется на примере.

Резюме:

Это все о части курса обратного распространения и тяжелой математической части реализации обратного распространения.

Это небольшая попытка загрузки заметок. Я верю в «Обмен знаниями - лучший способ развития навыков». Комментарии будут оценены. Могут быть предложены даже небольшие правки.

Каждые аплодисменты будут большим воодушевлением. Не стесняйтесь предлагать и комментировать.

Подпишитесь на мой канал, чтобы получать больше обновлений…