プロが教える店舗&オフィスのセキュリティ対策術

初歩的な質問なのですが、Reluの誤差逆伝播法の行列演算がよくわかりません。
http://qiita.com/Ugo-Nama/items/04814a13c9ea8497 …
ここの「勾配消失とRectifier Linear Unit」を参考に書いているのですが、下記式は行列演算にするとどうなるでしょうか?

「Reluの誤差逆伝播法の行列演算」の質問画像

A 回答 (6件)

単純に、その式を計算したい、という話なら、そのまま上の式通り、成分毎に計算すればよい。


行列表示しても、あんまり見やすくならないと思うけど。
(むしろ、逆に、もとが行列表示されていたら、結局のところ各成分はどうなんだ?と思って成分計算したくなるというなら分かりますけど。。)

あえて書けば、たとえば、
・i層への入力y_t を並べた行ベクトルを Y
・j層のニューロンが発火している(1)orしていない(0)を表すベクトルを対角成分として持つ対角行列を J
・k層のニューロンが発火している(1)orしていない(0)を表すベクトルを対角成分として持つ対角行列を K
・δ_k^out を表す列ベクトルを δk
・各成分がw_jk である行列を Wjk
・各成分が w_ij である行列を Wij
・各成分が、∂E/∂W_tj である行列を ∂E/∂Wtj
と書くことにすれば、上記の式の行列表示は、
 ∂E/∂Wtj = J*K*Wij*Wjk*δk*Y
となりますかね。
    • good
    • 0

ごめん。

i層の発火条件が抜けていた。
#1の文字の定義に
・i層のニューロンが発火している(1)orしていない(0)を表すベクトルを対角成分として持つ対角行列を I
というのも追加して、
 ∂E/∂Wtj = I*J*K*Wij*Wjk*δk*Y
ですね。
    • good
    • 0

ごめん。

さらに、修正。
実際には、i層、j層、k層は、ニューロンの数が同じとは限らないので、I, J, K はサイズが違う可能性があります。それを考えると、
 ∂E/∂Wtj = (I*Wij)*(J*Wjk)*(K*δk)*Y
と表示しておくべきでしょう。
(もし、3層のニューロンの数がみな同じであるなら、#2の計算でよいですが。)
    • good
    • 0

すみません、素人なもので間違っているかもしれないのですが……



No.2さんの回答に疑問なのですが。
質問者様ご提示の式には i層の発火条件が含まれていないですよね?

出力側の信号から入力側へ順に計算していくのですから、下記の行列を右側から計算していく様な感じになるのではないでしょうか。

∂E/∂Wtj = Yti*(Wij*J)*(Wjk*K)*δk


           ωij               ωjk
┌yt1 0 0 ┐┌ω11 ω12 ω13┐┌Fj1 0 0 ┐┌ω11 ω12 ω13┐┌Fk1 0 0 ┐┌δk1┐
│ 0  yt2 0 ││ω21 ω22 ω23││ 0  Fj2 0 ││ω21 ω22 ω23││ 0  Fk2 0 ││δk2│
└ 0   0 yt3┘└ω31 ω32 ω33┘└ 0   0 Fj3┘└ω31 ω32 ω33┘└ 0   0 Fk3┘└δk3┘

  ※ Fln : l層のセルnが発火していれば 1 、発火していなければ 0
   ytn:t層の出力
   ωij:i層→j層の重み
   ωjk:j層→k層の重み
    • good
    • 0

Yは行ベクトルですね、失礼しました。



∂E/∂Wtj = (Wij*J)*(Wjk*K)*δk*Yti


           ωij               ωjk
┌ω11 ω12 ω13┐┌Fj1 0 0 ┐┌ω11 ω12 ω13┐┌Fk1 0 0 ┐┌δk1┐
│ω21 ω22 ω23││ 0  Fj2 0 ││ω21 ω22 ω23││ 0  Fk2 0 ││δk2│[yt1 yt2 yt3]
└ω31 ω32 ω33┘└ 0   0 Fj3┘└ω31 ω32 ω33┘└ 0   0 Fk3┘└δk3┘
    • good
    • 0

No.4


> 質問者様ご提示の式には i層の発火条件が含まれていないですよね?

右端の括弧に記載されていましたね。
重ね重ね失礼しました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!