Помощь по производной функции софтмакс

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

В этой лекции я дам вам подсказку по выводу формул алгоритма обратного распространения ошибок. Самой сложной частью алгоритма является место с функцией софтмакс – нахождение собственно производной функции софтмакс и подстановку её в общую производную согласно цепного правила. Цель этого курса – побудить вас думать самостоятельно, поэтому данное видео вам следует смотреть только после того, как вы потратили как минимум несколько дней, пытаясь решить эту задачу. Заметьте, для данной задачи не нужны никаких новые знания, кроме дифференциального счисления. Единственная проблема, с которой вы, вероятнее всего, столкнётесь, заключается в том, что надо быть очень и очень осторожными, поскольку сделать ошибку крайне легко. Но, вновь-таки, никаких новых знаний тут не требуется, за исключением умения находить производную.

Начнём с определения функции софтмакс:

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

Сначала найдём производную по a(k). Во-первых, надо использовать правило умножения:

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

Таким образом, можно видеть, что

Теперь давайте найдём производную по a(k’), где k k:

Как видно, нам надо взять производную лишь в знаменателе, поскольку числитель является константой относительно a(k’). Получим:

Перепишем выражение следующим образом:

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

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

yn(k’) сокращается, в результате чего получаем:

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

и куда деваются k и сумма?

Во-первых рассмотрим суммы для обоих членов отдельно. Мы немедленно увидим, что первая сумма сокращается, поскольку дельта-функция равна единице, только когда k = k:

Фокус в том, что yn(k) не зависит от k, а потому может быть вынесено за сумму:

И наконец, поскольку лишь одна целевая переменная из всех классов равна 1, а все остальные нули, то и сумма по всем классам равна 1. Отсюда мы получаем наше окончательное выражение

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: