Итак, вы прошли Курс глубокого обучения Эндрю Нг на Coursera,

Вы знаете, что ForwardProp выглядит так:

А вы знаете, что Backprop выглядит так:

Но знаете ли вы, как вывести эти формулы?

TL;DR

Полные производные от всех производных обратного распространения, используемых в Coursera Deep Learning, с использованием как цепного правила, так и прямого вычисления.

Если вы прошли через обратное распространение и не поняли, как возникают такие результаты, как

а также

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

Наша нейронная сеть

Это простая нейронная сеть, с которой мы будем работать, где x, W и b - наши входы, z - линейная функция наших входов, a - это (сигмоидальные) функции активации и финал

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

Итак, вот план: мы будем работать в обратном направлении от нашей функции затрат.

и вычислить напрямую производную от

относительно (w.r.t) каждого из предыдущих элементов в нашей нейронной сети:

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

# Примечание: мы не различаем наш ввод "X", потому что это фиксированные значения, которые нам даны, и поэтому мы не оптимизируем их.

[1] Производная функция активации

Итак, для начала возьмем производную нашей функции затрат

с функцией активации

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

Сначала переместим знак минус слева от скобок и распределим его внутри скобок, так что мы получим:

Затем мы дифференцируем левую часть:

Правая часть более сложна, поскольку производная ln (1-a) не просто 1 / (1-a), мы должны использовать цепное правило, чтобы умножить производную внутренней функции на внешнюю.

Производная от (1-a) = -1, это дает окончательный результат:

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

[2] Производная сигмовидной кишки

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

наша логистическая функция (сигмоид) задается как:

Во-первых, удобно преобразовать эту функцию в следующую форму, так как это позволяет нам использовать цепное правило для дифференцирования:

Теперь, используя цепное правило: умножение внешней производной на внутреннюю дает

который переставил дает

Вот умная часть. Затем мы можем разделить это на произведение двух дробей и с помощью некоторой алгебраической магии добавить «1» ко второму числителю и сразу же снова убрать его:

Затем RHS упрощается до

Что не более чем

Что дает окончательный результат

Или альтернативно:

[3] Производная по линейной функции

Чтобы получить этот результат, мы можем использовать цепное правило, умножив два результата, которые мы уже вычислили [1] и [2].

Итак, если мы можем получить общий знаменатель в левой части уравнения, то мы можем упростить уравнение, поэтому давайте добавим «(1-a)» к первой дроби и «a» ко второй дроби.

с общим знаменателем мы можем упростить до

теперь мы умножаем LHS на RHS, члены a (1-a) сокращаются, и у нас остается только числитель из LHS!

что при расширении дает:

обратите внимание, что «ya» то же самое, что и «ay», поэтому они отменяют, чтобы дать

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

наш окончательный результат

[4] Производная по весу

Эту производную легко вычислить, так как z просто

а производная просто оценивается как

[5] Производная по весам (2)

Эту производную можно вычислить двумя разными способами! Мы можем использовать правило цепочки или вычислить напрямую. Мы сделаем и то, и другое, так как это дает отличную интуицию для расчета обратного распространения.

Чтобы использовать цепное правило для получения производной [5], отметим, что мы уже вычислили следующее

Отметив, что произведение первых двух уравнений дает нам

если мы затем продолжим использовать цепное правило и умножим этот результат на

тогда мы получаем

что не более чем

или написано длинной рукой

Итак, это «метод цепочки правил». Теперь давайте вычислим dw напрямую:

Чтобы вычислить напрямую, мы сначала берем нашу функцию стоимости

Мы можем заметить, что первый термин журнала «ln (a)» может быть расширен до

Что упрощает:

И если мы возьмем вторую функцию журнала «ln (1-a)», которая может быть представлена ​​как

взяв логарифм числителя (знаменатель оставим) получаем

Этот результат исходит из правила журналов, которое гласит: log (p / q) = log (p) - log (q).

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

Раскладывая член в квадратных скобках, получаем

Первый и последний члены «yln (1 + e ^ -z)» отменяют уход:

Что мы можем изменить, вытащив термин «yz» наружу, чтобы получить

Вот где становится интересно, добавляя термин exp к z внутри квадратных скобок, а затем сразу же беря его журнал.

Затем мы можем воспользоваться правилом суммы журналов: ln (a) + ln (b) = ln (ab) в сочетании с правилом exp продуктов: e ^ a * e ^ b = e ^ (a + b ) получить

с последующим

Если поместить термин yz в скобки, мы получим:

Наконец, отметим, что z = Wx + b, поэтому взяв производную по t W:

Первый член «yz» становится «yx», а второй член становится:

Обратите внимание, что второй член - это не что иное, как

Что дает окончательный результат

Мы можем переставить, вытащив «х», чтобы получить

который дает

[6] производная по смещению

Мы снова можем использовать цепное правило, которое будет

Это легко решить, поскольку мы уже вычислили «dz», а второй член - это просто производная от «z», которая равна «wX + b» относительно t «b», которая равна просто 1!

так что производная по t b просто

который мы уже вычисляли ранее как

Для полноты картины мы также покажем, как вычислить "db" напрямую. Чтобы вычислить это, мы сделаем шаг из вышеприведенного расчета для «dw» (непосредственно перед тем, как мы сделали дифференцирование).

помня, что z = wX + b, и мы пытаемся найти производную функции по t b, если мы возьмем производную по t b из обоих членов «yz» и «ln (1 + e ^ z)», мы получим

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

Если взять сначала LHS, производная от «wX» по t «b» равна нулю, поскольку она не содержит b! Производная от «b» - это просто 1, поэтому мы остаемся с «y» вне скобок.

для RHS мы делаем то же самое, что и при вычислении dw, за исключением того, что на этот раз, беря производную от внутренней функции e ^ wX + b, мы берем ее по b (вместо w), что дает следующий результат (это потому, что производная по экспоненте равна 1)

этот термин просто наш оригинальный

так что, собрав все вместе, мы получаем

который мы уже показали, это просто "дз"!

На этом мы завершаем все производные от нашей нейронной сети. Мы рассчитали все следующее:

Подведение итогов

А как насчет результата:

Что ж, мы можем распаковать цепное правило, чтобы объяснить:

Обратите внимание, что термин

это просто "dz" термин, который мы вычислили ранее:

и срок

вычисляется как W [l] или, другими словами, производная нашей линейной функции Z = ’Wa + b’ относительно «a» равна «W».

и, наконец, термин в синем

просто

‘Da / dz’ производная сигмовидной функции, которую мы вычислили ранее!

В качестве последнего примечания к обозначениям, используемым в курсе глубокого обучения Coursera, в результате

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

Так что у нас это…

… Все производные, необходимые для обратного распространения, как показано в курсе «Глубокое обучение» Эндрю Нг.

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

Что дальше?

Если вы что-то поняли из этого поста, поделитесь с другими, кому это может быть полезно, подписывайтесь на меня Патрик Дэвид, чтобы увидеть больше сообщений ML или в твиттере @pdquant, и дайте ему циничный / жалкий / искренний раунд аплодисменты!

Тестирование значимости акций и взлом



Создайте битовый (коинтеграционный) бэктестер