こんにちは!
現役パラレルワーカー フクコです。
前回の記事↓に続き
来年の2月の試験に向けてE資格試験勉強中のため
ゼロつくシリーズでおなじみ
オーライリーから出版されている
ディープラーニングの本格的な入門書でよくおススメされる
「ゼロからつくる Deep Learning」本
この本↑を毎日5ページずつコツコツこなすと
約2か月間で今年中に終了するので
来年のE資格試験までにこれで基礎力をつけることにしました。(^^)
ついつい私は何もないとだらけてしまうので(笑)
毎日5ページ終わった後の記録とまとめを書いていこうと思います。
と、まとめに入る前に…
やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)
「頑張れ!!ヒトは心が原動力だから、
心はどこまでも強くなれる!!」
by 炭治郎
ついつい引用してしまう私の大好きな「鬼滅の刃」から(笑)炭治郎の名言です。
心が原動力!! そのとおりですね!!
よし!! 今日も頑張るぞ~! お~!!
というコトで、今日もアゲアゲな気分で、私はノルマをこなしますよ! 笑
ではでは、いい加減まとめに入ります。笑
その前に本の目次の紹介です。
ゼロつくディープラーニングは、下記↓の合計8章で構成されています。
本の目次
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
ちなみに…
ゼロつくディープラーニングの第1章はPython入門のセクション(20ページ分)なので、
とりあえず今回私は飛ばし、第2章からまとめています。
今回も第4章のつづきからでーす。
第4章 ニューラルネットワークの学習つづき
ニューラルネットワークの学習とは、
訓練データから最適な重みパラメータの値を自動で獲得するようにできるコト。
4.2.1 2乗和誤差
損失関数で、最も有名なのが2乗和誤差。
2乗和誤差は、次の式↓で表される。
ここで、ykはニューラルネットワークの出力、tkは教師データ。
教師データの方は、0か1のデータで、
正解となるラベルを「1」、それ以外を「0」で表記される、one-hot表現で表される。
2乗和誤差をPythonで実装してみると…
#まずはNumPyのインポート import numpy as np #二乗和誤差関数の定義 def sum_squared_error(y, t): return 0.5 * np.sum((y-t)**2) #[2]を正解とする t = [0,0,1,0,0,0,0,0,0,0] #[2]をの確率が最も高い場合(0.6) y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] sum_squared_error(np.array(y), np.array(t))#答えは、0.09750000000000003 #[7]をの確率が最も高い場合(0.6) y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] sum_squared_error(np.array(y), np.array(t))#答えは、0.5975
↑の結果の場合、[2]の出力の方が、二乗和誤差が小さい。
つまり、
一つ目の[2]の出力結果の方が、教師データにより適合していることとなる。
4.2.2 交差エントロピー誤差
2乗和誤差以外に、
交差エントロピー誤差(cross entropy error)もよく用いられる。
交差エントロピー誤差は、次の式↓で表される。
この式↑の中の、自然対数y=log x をグラフにするとこんな感じ↓。
この図↑からわかるように、
x=1のとき、y=0となり
x=0に近づくにつれ、yはどんどんちいさくなる。
#クロスエントロピー誤差関数の定義 def cross_entropy_error(y, t): delta = 1e-7 return -np.sum(t* np.log(y + delta)) #試しに、tとyの値を以下のように入れてみる。 t= [0,0,1,0,0,0,0,0,0,0] y= [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] cross_entropy_error(np.array(y), np.array(t))#答えは、0.510825457099338 #さらに、yの値を以下のように更新してみる。 y= [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] cross_entropy_error(np.array(y), np.array(t))#答えは、2.302584092994546
4.2.3 ミニバッチ学習
機械学習のモンダイは、
訓練データに対する損失関数を求め、
その値をできるだけ小さくするようなパラメータを探し出すコト。
全てのデータを対象とした損失関数を計算するのは、非現実的。
そこで、
ミニバッチ学習が出てくる。
ミニバッチ学習とは??
データの中から1部を選び出し、その1部のデータを全体の「近似」として利用するコト。
例えば、
全体で60,000枚の訓練データから、無作為に100枚選び出して学習をする。