主要な関数の逆伝播レイヤーを実装してみる

ReLU関数


①数式

 

Sigmoid関数


②数式

 

Affine


③数式

④計算グラフ

ここでaxis=0という表現が出てきたので復習しておく。axisは、高次元の行列を扱うときに演算を行う次元を指定するものだが、axis=nは「外からn+1番目の括りで分割したときに、同じ位置に対応する値同士を演算する」と覚えておけば良い。(なぜn+1なのかは、コンピュータはあらゆる番号を0からカウントするので、普通でいう「一番目に外側」は「0番目に外側」となるからだ)。例を以下に示す。

a = numpy.array([[[1,2,3],[4,5,6],[7,8,9]],[[11,12,13],[14,15,16],[17,18,19]]])

・b = np.sum(a, axis=0) の場合、まず一番外側の括りで分割する。

[[1 2 3] [4 5 6] [7 8 9]] と [[11 12 13] [14 15 16] [17 18 19]]

この2つの括りで同じ位置にあるもの同士の足し算となるから、

b = [[12 14 16] [18 29 22] [24 26 28]]

・b = np.sum(a, axis=1) の場合、一番外側の括りは無視して、2番目に外側で分割する。

[1 2 3] と [4 5 6] と [7 8 9]

[11 12 13] と [14 15 16] と [17 18 19]

この異なる2つのグループで、3つの括りで同じ位置にあるもの同士の足し算となるから、

b = [[12 15 18] [42 45 48]]

・b = np.sum(a, axis=2) の場合、一番内側の括りとなる。

[1と2と3、4と5と6、7と8と9]、[11と12と13、14と15と16、17と18と19]

この異なる2つのグループの中のさらに異なる3つのグループで、3つの括りで同じ位置にあるもの同士の足し算となるから、

b = [[6 15 24] [36 45 54]]

Leave a Comment