こんにちは!
現役パラレルワーカー フクコです。
前回の記事↓に続き
来年の2月の試験に向けてE資格試験勉強中のため
ゼロつくシリーズでおなじみ
オーライリーから出版されている
ディープラーニングの本格的な入門書でよくおススメされる
この本↑を毎日5ページずつコツコツこなすと
約2か月間で今年中に終了するので
来年のE資格試験までにこれで基礎力をつけることにしました。(^^)
ついつい私は何もないとだらけてしまうので(笑)
毎日5ページ終わった後の記録とまとめを書いていこうと思います。
と、まとめに入る前に…
やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)
「自由ってなんて美しく過酷なんだろう」
By エマ
またまた私の大好き「約束のネバーランド」からエマのセリフです。
そうなんですよ!
自由にやっていくには、それだけヒトの何倍も過酷にガンバル時が必要
なんですよね。(>ー<)
どんなに仕事で疲れていようが、ノルマはこなさないと!
よし、今日も頑張るぞ~! お~!!
ではでは、いい加減まとめに入ります。笑
その前に本の目次の紹介です。
ゼロつくディープラーニングは、下記↓の合計8章で構成されています。
本の目次
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
ちなみに…
ゼロつくディープラーニングの第1章はPython入門のセクション(20ページ分)なので、
とりあえず今回私は飛ばし、第2章からまとめています。
今回もひきつづき第3章からでーす。
3.5 出力層の設計
機械学習のモンダイは、「分類」と「回帰」
に分かれる。
基本的に、
回帰問題は恒等関数
分類問題はソフトマックス関数を使う。
3.5.1 恒等関数とソフトマックス関数
回帰問題で使われる恒等関数は
入って来たものを何も手を加えずに出力する関数。
恒等関数を図にすると↓のようになる。
一方
分類問題で使われるソフトマックス関数は
次の式↓で表される。
ソフトマックス関数を図にすると↓のようになる。
↑の図のようにソフトマックスの出力は、
全ての入力信号から矢印による結びつきがある。
ソフトマックス関数をPythonで実装してみると…
1つずつ確認しながら見てみると、
#ソフトマックス関数の実装step by step import numpy as np a = np.array([0.3, 2.9, 4.0]) exp_a = np.exp(a)#指数関数 print(exp_a)#答えは、[ 1.34985881 18.17414537 54.59815003] sum_exp_a = np.sum(exp_a)#指数関数の和 print(sum_exp_a)#答えは、74.1221542101633 y = exp_a / sum_exp_a print(y)#答えは、[0.01821127 0.24519181 0.73659691]
といったかんじになる。
後で、ソフトマックス関数を使うことを考えて定義する。
# ソフトマックス関数の定義 def softmax(a): exp_a = np.exp(a) sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y
といったかんじになる。
3.5.2 ソフトマックス関数の実装上の注意
ソフトマックス関数を使う時に注意したい点が一点。
それは、オーバーフローに関する欠陥があるというコト。
オーバーフローとは、
あまりに大きな値は表現できないという意味。
ソフトマックス関数の実装は、指数関数の計算。
そのため、値が容易に大きくなりやすい。
ちょっとPythonで具体例を見てみる。
a = np.array([1010, 1000, 990]) np.exp(a) / np.sum(np.exp(a))#答えは、array([nan, nan, nan]) -> 正しく計算されてない。 c = np.max(a) print(c)#答えは、1010 a - c#答えは、array([ 0, -10, -20]) np.exp(a-c) / np.sum(np.exp(a-c))#答えは、array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])
以上のことから
ソフトマックス関数をオーバーフローしないように実装すると
↓のようになる。
# ソフトマックス関数をオーバーフローしないように実装する def softmax(a): c = np.max(a) exp_a = np.exp(a-c)#オーバーフロー対策 sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y
3.5.3 ソフトマックス関数の特徴
- ソフトマックス関数の出力は、0から1の間の実数になる。
- ソフトマックス関数の出力の総和は、1になる。
- ↑の総和が1となる性質上、ソフトマックス関数の出力は、「確率」として解釈される。
- ソフトマックス関数を適応しても、しなくても、出力の大きいニューロンの場所は変わらない。
- そのため、出力層のソフトマックス関数は、推論段階では省力されるのが一般的。
ハイ、今日はここまで!!
ということで、第3章のニューラルネットワークはまだまだ続きます。
第3章がやっとあと20%ぐらい残ってる感じ。ふう…
でもなんかこの本を終わるころには基礎力上がってる気がします。
本当にスクラッチからコードを書いているので。いつもはコピペですし。苦笑
引き続き頑張りまっす。
最後まで読んでくださり、ありがとうございます!
フクコ
ディープラーニング入門書おススメ本