計算グラフと自動微分
math基本
NNの典型的なフィードフォワード計算は、
z1=W1x1+b1a1=σ(z1)z2=W2a1+b2a2=σ(z2)ˆy=f(a2)l=l(y,ˆy)こんな感じ。このlをWiやbiで微分したい。 例えばW1で微分することを考えると
∂l∂W1=∂l∂z1∂z1∂W1=∂l∂a1∂a1∂z1∂z1∂W1=…という感じに、上流の偏微分が計算できれば良い。
単純化
もう少し単純化して
z=ax+by=g(z)で、∂ay,∂byを計算したいとする。
単純に計算すれば
∂y∂a=∂y∂z∂z∂a=∂g∂zxここで、数式の上で∂g∂zと書かれているこの値に注目する。 これは、数値としては、∂g∂zという数式に、今考えているzという特定の値を 入れて得られる値である。それは、z=ax+bというフィードフォワードの計算で計算されている値である。
というわけで、backpropagationをする際には、各ノードの上流の微分(上から落ちてくる・backpropで計算する部分)に加えて、 そのノードでの計算対象の評価値(下から積み上げて計算する・feed forwardで計算してあった部分)も必要になる。