ゼロから作るDeep Learning(17日目)

こんにちは、筋肉めがねです。

 

昨日立ち寄ったガソリンスタンドでちらっと見かけたんですけれども、Apple Payがドイツで使えるようになったようですね。ドイツに移住してきた数年前の事を思い出しますと、当時のドイツではContactless paymentというものは無く、どこで買い物するにも現金、クレジットカードまたはECカードで支払っておりました。2016年以降、ドイツにも次第にContactless paymentが普及してきましたが、それはcontactless payment対応のクレジットカードをcontactless payment対応のPOSシステムに近づけて「ピッ」とするものでした。

クレジットカードがContactless paymentに対応しているかどうかは、「超音波」のようなマークがクレジットカードについているかどうかで確認できますね。

 

f:id:KinnikuMegane:20181220032440j:plain


そして、ようやく今週、ドイツでもApple Payが使えるようになったという事です。快適に「ピッ」と支払いができるよう、Apple Payを使いこなしていきたいものです。

 

それでは、本日も「ゼロから作るDeep Learning」を進めていきましょう。

前回の記事ではAffineレイヤを実装しました。本日は、Softmax-with-Lossレイヤを実装していきます。

先ずはコードを書きます。

class SoftmaxWithLoss:
     def  __init__(self):
            self.loss = None
            self.y = None
            self.t = None

     def  forward(self, x, t):
            self.t = t
            self.y = softmax(x)
            self.loss = cross_entropy_error(self.y, self.t)
            return self.loss

     def backward(self, dout=1):
           batch_size = self.t.shape[0]
           dx = (self.y - self.t) / batch_size
           return dx

そして、計算グラフも以下に示します。

f:id:KinnikuMegane:20181220064648p:plain

 

ここで大事な事は2点ですね。

 

1つは、ソフトマックス関数はニューラルネットワークの「学習」フェーズにのみ使用するものであった、「推論」フェーズでは使用しない、という事です。「学習」フェーズが前工程で、「推論」フェーズが後工程です。なぜ「推論」フェーズで使用する必要がないか、と言うと、それは6日目の記事で書いた通りです。

それで、下の図を使って説明すると、出力層のインプットであるa1, a2に対して、exponentialを適用しても、アウトプットであるy1とy2の大小関係は、実はa1とa2の大小関係と変わらないんですよね。例えば、1と5という二つのインプットがあった時に、大きほうは5ですね。そして、両方の値のexponential値、exp(1)とexp(5)と比較しても、大きいほうはexp(5)となるわけです。分類問題では、結局、最終的なアウトプットである各要素の大小関係(各要素の確率)が知りたいわけだから、出力層で活性化関数(ソフトマックス関数)を使う必要がない、という事なんです。それだけ、コンピューターが楽をできるわけです。

kinnikumegane.hatenablog.com

 

そして、もう一点大事な事は、softmaxレイヤからの逆伝播の結果です。例えば、y1-t1という結果になってますね。これは、y1というソフトマックスレイヤの出力値と、t1という教師データの誤差です。つまり「合ってなさ加減」ですね。何度でも書きますが「学習」フェーズでするべき事は「合ってなさ加減」を最小化する事でした。CrossEntropyErrorレイヤは損失関数です。そして、softmaxレイヤと組み合わせる事で、逆伝播におけるsoftmaxレイヤからの出力が「合ってなさ加減」を表すようにCrossEntropyErrorレイヤという損失関数は設計されているんですね。

 

それでは、本日は以上でございます。


にほんブログ村 IT技術ブログへ
にほんブログ村



Pythonランキング