Что такое оператор в правиле цепочки, получая градиент однослойной нейронной сети по ее входам?

9

Проблема в следующем:

Получите градиент относительно входного слоя для нейронной сети с одним скрытым слоем, используя сигмоид для ввода -> скрытый, softmax для скрытого -> выход, с перекрестной потерей энтропии.

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

Определить некоторые обозначения

r=xW1+b1

, σ - сигмовидная функцияh=σ(r)σ

,θ=hW2+b2

,Sявляется функцией SoftMaxy^=S(θ)S

, у реальна одну метку горячей векторJ(y^)=iylogy^iy

Тогда по правилу цепи,

Jx=Jθθhhrrx

Отдельные градиенты:

Jθ=(y^y)
θh=h[hW2+b2]=W2T
hr=h(1h)
rx=x[xW1+b1]=W1T

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

Jx=(y^y)W2T[h(1h)]W1T

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

У меня вопрос: какой принципиальный способ для меня выяснить, какой оператор использовать? Меня особенно смущает необходимость поэлементного между и .W2Th

Спасибо!

amatsukawa
источник
Я понимаю, что нахождение градиента по отношению к входам не часто делается. Я считаю, что это ведет к вычислению встраивания слов, где у вас есть возможность оптимизировать «входные» векторы слов.
amatsukawa
Как ты, Дерви, dJ / dTheta
радж

Ответы:

4

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

Фактическая операция - это не поэлементное умножение, а стандартное матричное умножение градиента на якобиан , всегда .

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

В математике мы имеем некоторую нелинейность , потерю и вход в нелинейность (это может быть любой тензор). Выход нелинейности имеет то же измерение --- что, как говорит @Logan, функция активации определяется поэлементно.sLxRn×1s(x)Rn×1

Мы хотим, чтобы

xL=(s(x)x)Ts(x)L

Где - якобиан . Раскрывая этот якобиан, мы получаем s(x)xs

[s(x1)x1s(x1)xns(xn)x1s(xn)xn]

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

Diag(s(x)x)

А затем используйте поэлементный оператор.

xL=(s(x)x)Ts(x)L=Diag(s(x)x)s(x)L
Пользователь0
источник
0

Всякий раз, когда обратно пропорциональны функции активации, операции становятся поэлементными. В частности, используя ваш пример, является производной обратного распространения, а является производной активации, а их произведение является поэлементным произведением, . Это потому, что функции активации определяются как поэлементные операции в нейронной сети.δ2=(y^y)W2Ta=h(1h)δ2a

См. Слайды лекций cs224d, стр. 30, это также может помочь.

логан
источник