質問: 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つの方法で十分かもしれませんが、現実世界で手作業でバックプロップを実装したい場合は、そのデリバティブを実行するために何を使用しますか? つまり、行列にベクトル値関数の派生を取る方法を教えてくれる、分岐やメソッドがありますか?
回答: 行列計算法があります(非常に有用な Matrix Cookbook を保存するためのブックマークとして使用しますが、ほとんどの場合、デリバティブでは、それは点での差別化と次元の維持を目指すだけです。 また、自動分化を参照することもできます。これは、任意の複合関数、すなわち$ a(x)= f(g(x))$を分解し、$ g $に対する損失の勾配を計算することができるように、連鎖規則の一般化の一種です$ f $に対する損失の勾配の関数として計算される。 これは、ニューラルネットワークのあらゆる操作に対して、それを「消費する」操作の勾配を与えることができ、それ自身の勾配を計算し、エラーを逆方向に伝播する(したがって、逆伝播する)