基本

NNの典型的なフィードフォワード計算は、

z1=W1x1+b1a1=σ(z1)z2=W2a1+b2a2=σ(z2)ˆy=f(a2)l=l(y,ˆy)

こんな感じ。このlWibiで微分したい。 例えばW1で微分することを考えると

lW1=lz1z1W1=la1a1z1z1W1=

という感じに、上流の偏微分が計算できれば良い。

単純化

もう少し単純化して

z=ax+by=g(z)

で、ay,byを計算したいとする。

単純に計算すれば

ya=yzza=gzx

ここで、数式の上でgzと書かれているこの値に注目する。 これは、数値としては、gzという数式に、今考えているzという特定の値を 入れて得られる値である。それは、z=ax+bというフィードフォワードの計算で計算されている値である。

というわけで、backpropagationをする際には、各ノードの上流の微分(上から落ちてくる・backpropで計算する部分)に加えて、 そのノードでの計算対象の評価値(下から積み上げて計算する・feed forwardで計算してあった部分)も必要になる。