Closed5

計算グラフ: リピート

nabeyangnabeyang

ここで言うリピートはnumpyのrepeatメソッドの処理を意味します。動作はこんな感じです。

a = np.array([1, 2, 3])
np.repeat(a[np.newaxis], 3, axis=0) # =>
'''
np.array([[1, 2, 3],
 [1, 2, 3],
 [1, 2, 3]])
'''

実際のコードでrepeatを呼び出すことはあまりなく、ブロードキャストで自動で使われているようなのが多いと思います。例えば、こんな感じです。実際の例だとbはバイアスになります。

m = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
])
b = np.array([2, 4, 6, 8])
m + b #=>
'''
array([[ 3,  6,  9, 12],
       [ 7, 10, 13, 16]])
'''
nabeyangnabeyang

yxの関係は、先程のpythonコードの例からも明らかなように

\begin{aligned} y &= \begin{pmatrix} x_{0} & x_{1} & \cdots & x_{D-1}\\ x_{0} & x_{1} & \cdots & x_{D-1}\\ \vdots & \vdots & \ddots & \vdots\\ x_{0} & x_{1} & \cdots & x_{D-1} \end{pmatrix}\\ &= \begin{pmatrix} y_{0,0} & y_{0,1} & \cdots & y_{0,D-1}\\ y_{1,0} & y_{1,1} & \cdots & y_{1,D-1}\\ \vdots & \vdots & \ddots & \vdots\\ y_{N-1,0} & y_{N-1,1} & \cdots & y_{N-1,D-1} \end{pmatrix} \end{aligned}

成分表記で書けば次の通り。

y_{i,j} = x_{j}
nabeyangnabeyang
\begin{aligned} \left(\frac{\partial L}{\partial \bm{x}}\right)_{i} &= \frac{\partial L}{\partial x_{i}}\\ &= \sum_{j, k} \frac{\partial y_{j, k}}{\partial x_{i}} \frac{\partial L}{\partial y_{j, k}}\\ &= \sum_{j, k} \frac{\partial x_{k}}{\partial x_{i}} \frac{\partial L}{\partial y_{j, k}}\\ &= \sum_{j, k} \delta_{i, k} \frac{\partial L}{\partial y_{j, k}}\\ &= \sum_{j} \frac{\partial L}{\partial y_{j, i}} \end{aligned}
このスクラップは2021/03/10にクローズされました