らんだむな記憶

blogというものを体験してみようか!的なー

りんごの勾配

O'Reilly Japan - ゼロから作るDeep Learning の p.136 の計算グラフについて考えてみる。$c = 2,\ t = 1.1$ として

\begin{align*}
y &= cx \\
z &= ty
\end{align*}

の時に $\frac{\del z}{\del x}\Big|_{t=1.1,c=2,x=100}$ などを求めましょうということである。

\begin{align*}
\frac{\del z}{\del x}\Bigg|_{t=1.1,c=2,x=100} = \frac{\del z}{\del y}\Bigg|_{t=1.1,y=200} \frac{\del y}{\del x}\Bigg|_{c=2,x=100} = tc = 1.1 \times 2 = 2.2
\end{align*}

\begin{align*}
\frac{\del z}{\del t}\Bigg|_{t=1.1,y=200} = y = 200
\end{align*}

\begin{align*}
\frac{\del z}{\del c}\Bigg|_{t=1.1,c=2,x=100} = \frac{\del z}{\del y}\Bigg|_{t=1.1,y=200} \frac{\del y}{\del c}\Bigg|_{c=2,x=100} = tx = 1.1 \times 100 = 110
\end{align*}

のようなことを計算グラフで記述している。

import numpy as np
from dezero import Variable

apple = Variable(np.array(100.))
apple_2 = apple * 2
cost = apple_2 * 1.1
print(cost)

cost.backward()
print(apple.grad)

などとすれば流れがわかる。

f:id:derwind:20211030014513p:plain

みたいな絵を描かせつつデバッガで追いかけるとよく分からなくなった時に思い出せて良い。