funolympics’s blog

東大数学科生のAIを使い起業するまでのお話

ゼロから作るDeep Learningでど素人がつまずいたことメモ 5章

5.3.3 リンゴの例

図5-15で何をしているのかよく分からないまま適当に記入したら間違いました。

やっぱり原理を理解することは大切ですね。

 

5.4.2 加算レイヤの実装

class AddLayer:

    def __init__(self):

          pass

   ↑

なんでここがpassでいいのかよく分かって無いです。

本には加算レイヤでは特に初期化は必要ないのでと書いてありますが、なんで乗算レイヤでは必要となっているのかの区別がよくつきません。

誰か詳しい人がいたら教えていただけると助かります。

 

5.5.1 ReLUレイヤ

ここでのmaskの使い方がよくわかりません。なんでこのようなことをする必要があるのでしょうかという感じになっています。

 

5.6 Affineレイヤ

ベクトルをベクトルで微分するという操作は

(y1, y2, ... ,yn)Tを(x1, x2, ..., xn)で各要素をx等で微分すればいいのですが、ベクトルを行列で微分しているところがあってそこが微妙でした。この本では行列の積を行うためには成分をうまく調整しなくてはならないから(5.13)が導出されると書いてありますがそれは導出でも何でもなくて積がうまく行われるためにうまく調整しているだけだと思われます。

結局ここは調べてもよく分からなかったです。

 

5.7.2 誤差逆伝播法に対応したニューラルネットワークの実装

まずfrom common.layers import *とありますがこれは要るのでしょうか?これはいらないような気がするのですが詳しい人がいれば教えてください。

ずっとif t.ndim = !1 t = np.argmax(t axis=1)の意味がわからなかったんですけど、

if t.ndim != 1というのはtの次元が1でなければ(つまりone-hot-labelであれば)という意味だったんですね。こういう細かいところの説明もあると良いのですが、、、

次にloss_W = lambda W: self.loss(x, t)という一文なんですが、lambda Wとしてるんだったら、その後の定義する式にWは登場しないの??となりました。分かる人がいれば教えてください。

最後らへんのdW, dBってなんだったけと思い返したら、p152にclass Affineを定義するときに登場していました。ここで思ったのですが、db = np.sum(dY, axis=0)として定義されたいて変な定義だなあと思っていたのですがこれも次元を合わせるための形式的な定義のようですね。

 

5章の感想

少し時間をかけすぎました(18日間くらい)。旅行に行っていたこともあるのですが。時間をかけ過ぎるとこれはなんだったっけと確認の回数が多くなるのでとても効率が悪かったです。今度はもう少し集中的にしなければならないなと感じました。