こんにちは!
現役パラレルワーカー フクコです。
前回の記事↓に続き
来年の2月の試験に向けてE資格試験勉強中のため
E資格とは?の記事はコチラ↓
ゼロつくシリーズでおなじみ
オーライリーから出版されている
ディープラーニングの本格的な入門書でよくおススメされる
「ゼロからつくる Deep Learning」本
この本↑を毎日5ページずつコツコツこなすと
約2か月間で今年中に終了するので
来年のE資格試験までにこれで基礎力をつけることにしました。(^^)
ついつい私は何もないとだらけてしまうので(笑)
毎日5ページ終わった後の記録とまとめを書いていこうと思います。
と、まとめに入る前に…
やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)
「 ”できないどうしよう”って考えるより
”できる!どうやろう” って考える方が絶対いいよ 大丈夫!」
by エマ
私の大好きな「約束のネバーランド」(約ネバ)から
エマの名言です。
そう! 自己啓発でもよく出てくることですが
ポジティブな発言はポジティブな事象を呼び寄せます!
「私にはできない、ムリだ」と言っていればそのとおりになりますし
逆に
「私ならできる、大丈夫」と言っていればそのとおりにもなります。(^^)
できるかどうかの境界線って
結局のところ、自分の気持ち次第!なんですよね!
エマ、どうもありがとう! (^0^)
今日もやる気が出てきました!
よし!! 今日も頑張るぞ~! お~!!
というコトで、今日も私ならできる!コツコツ努力でノルマをこなしますよ! 笑
ではでは、いい加減まとめに入ります。笑
その前に本の目次の紹介です。
ゼロつくディープラーニングは、下記↓の合計8章で構成されています。
本の目次
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
ちなみに…
ゼロつくディープラーニングの第1章はPython入門のセクション(20ページ分)なので、
とりあえず今回私は飛ばし、第2章からまとめています。
今回も引き続き、第5章のつづきからでーす。
第5章 誤差逆伝播法のつづき
ココでは、
重みパラメータの勾配の計算を効率よく行える「誤差逆伝播法」について学ぶ。
5.6.2 バッチ版Affineレイヤ つづき
Affineの実装は次のよう↓になる。
#5.6.2 バッチ版Affineレイヤ # numpyをインポート import numpy as np class Affine: def __init__(self, W, b): self.W = W self.b = b self.x = None self.dW = None self.db = None def forward(self, x): self.x = x out = np.dot(x, self.W)+ self.b return out def backward(self, dout): dx = np.dot(dout, self.W.T) self.dW = np.dot(self.x.T, dout) self.db = np.sum(dout, axis = 0) return dx
5.6.3 Softmax-with-Loss レイヤ
出力層であるソフトマックス関数について説明する。
ソフトマックス関数は、
入力値を正規化して出力する。
ニューラルネットワークの推論で答えを一つだけ出す場合、Softmaxレイヤは必要ない。
一方で
ニューラルネットワークの学習の場合、Softmaxレイヤが必要。
「ソフトマックス関数」の損失関数として「交差エントロピー誤差」を用いると
逆伝播が(y₁ - t₁, y₂ - t₂, y₃ - t₃) という”キレイ”な結果になる。
「恒等関数」も同じく、損失関数として「2乗和誤差」を用いると
逆伝播が(y₁ - t₁, y₂ - t₂, y₃ - t₃) という”キレイ”な結果になる。
Softmax-with-Loss レイヤの実装は下記の↓とおり。
# 5.6.3 Softmax-with-Loss レイヤの実装 class SoftmaxWithLoss: def __init__(self): self.loss = None #損失 self.y = None #softmaxの出力 self.y = None #教師データ(one-hot vector) 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 #逆伝播の際、伝播する値をバッチ個数で割ることで、データ1個当たりの誤差が前レイヤに伝播する。 return dx