おひとりさま現役パラレルワーカーフクコろぐ

これからの会社員は、複数の収入源をもとう! 会社に翻弄されずアナタらしく仕事ができる。 そんなパラレルワーカーを広めるフクコのブログです。

【文系プログラミング初心者deE資格】ゼロつくディープラーニング #9

f:id:fukuko-parallel-work:20211108183555j:plain


こんにちは!

現役パラレルワーカー フクコです。

f:id:fukuko-parallel-work:20210212204833p:plain



前回の記事↓に続き

www.fukuko-parallel-work.com



来年の2月の試験に向けてE資格試験勉強中のため


ゼロつくシリーズでおなじみ

オーライリーから出版されている

ディープラーニングの本格的な入門書でよくおススメされる

「ゼロからつくる Deep Learning」本


f:id:fukuko-parallel-work:20211029220008j:plain




この本↑を毎日5ページずつコツコツこなす

約2か月間で今年中に終了するので

来年のE資格試験までにこれで基礎力をつけることにしました。(^^)


ついつい私は何もないとだらけてしまうので(笑)

毎日5ページ終わった後の記録とまとめを書いていこうと思います。


と、まとめに入る前に…

やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)



「頑張れ!!ヒトは心が原動力だから、
  心はどこまでも強くなれる!!」
 
by 炭治郎



ついつい引用してしまう私の大好きな鬼滅の刃から(笑)炭治郎の名言です。

心が原動力!! そのとおりですね!!

よし!! 今日も頑張るぞ~! お~!! 

というコトで、今日もアゲアゲな気分で、私はノルマをこなしますよ! 笑


ではでは、いい加減まとめに入ります。笑



その前に本の目次の紹介です。

ゼロつくディープラーニングは、下記↓の合計8章で構成されています。

本の目次

  • 5章 誤差伝播法
  • 6章 学習に関するテクニック


ちなみに…

ゼロつくディープラーニング第1章はPython入門のセクション(20ページ分)なので、

とりあえず今回私は飛ばし、第2章からまとめています。

今回も第4章のつづきからでーす。


第4章 ニューラルネットワークの学習つづき


ニューラルネットワークの学習とは、

訓練データから最適な重みパラメータの値を自動で獲得するようにできるコト

4.2.1 2乗和誤差


損失関数で、最も有名なのが2乗和誤差


2乗和誤差は、次の式↓で表される。



\frac{1}{2} \displaystyle \sum_{k} (y_k - t_k)^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)もよく用いられる


交差エントロピー誤差は、次の式↓で表される。


-\displaystyle \sum_{k} t_k  log   y_k


この式↑の中の、自然対数y=log x をグラフにするとこんな感じ↓。


f:id:fukuko-parallel-work:20211108201542j:plain


この図↑からわかるように、

x=1のとき、y=0となり

x=0に近づくにつれ、yはどんどんちいさくなる


交差エントロピー誤差をPythonで実装してみると…

#クロスエントロピー誤差関数の定義
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枚選び出して学習をする

今日のまとめ


ハイ、今日はここまで!!

ということで、第4章はまだまだつづきます!

引き続き頑張りまっす。


最後まで読んでくださり、ありがとうございます!

フクコ


ディープラーニング入門書おススメ本