現実世界の逆伝播のための数学は何ですか?

単純なANNを考える:

$$ x \ rightarrow f =(U_ {m \ times n} x ^ T)^ T \ rightarrow g = g(f)\ rightarrow h =(V_ {p \ times m} g ^ T)^ T \ rightarrow L = L(h、y) $$

ここで$ x \ in \ mathbb {R} ^ n $、$ U $、$ V $は行列、$ g $は点単位シグモイド関数、$ L $は出力$ h $とターゲット$ y $、最後に$ \ rightarrow $はデータフローを表します。

勾配降下を使って$ L $を上回る$ L $を最小にするには、$ \ frac {\ partial L} {\ partial U_ {ij}} $と$ \ frac {\ partial L} {\ partial V_ {ij}} $、私はこれを行う2つの方法を知っています:

  1. 差別化ポイントを賢明に行い、ベクトル化する方法を理解するのに苦労している
  2. $ U $と$ V $を行ベクトルにフラット化し、多変量微積分(ベクトルをとりベクトルを生成)を使用して微分を行います。

チュートリアルやイラストレーションの目的のために、上記の2つの方法で十分かもしれませんが、現実世界で手作業でバックプロップを実装したい場合は、そのデリバティブを実行するために何を使用しますか? つまり、行列にベクトル値関数の派生を取る方法を教えてくれる、分岐やメソッドがありますか?

1
デルタルールを使用することができます。これに関する多くの資料。
追加された 著者 Himanshu Rai,

1 答え

行列計算法があります(非常に有用な Matrix Cookbook を保存するためのブックマークとして使用しますが、ほとんどの場合、デリバティブでは、それは点での差別化と次元の維持を目指すだけです。

また、自動分化を参照することもできます。これは、任意の複合関数、すなわち$ a(x)= f(g(x))$を分解し、$ g $に対する損失の勾配を計算することができるように、連鎖規則の一般化の一種です$ f $に対する損失の勾配の関数として計算される。

これは、ニューラルネットワークのあらゆる操作に対して、それを「消費する」操作の勾配を与えることができ、それ自身の勾配を計算し、エラーを逆方向に伝播する(したがって、逆伝播する)

1
追加された