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

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

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

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


こんにちは!

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

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


前回の記事↓に続き

www.fukuko-parallel-work.com





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


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

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

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


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




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

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

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


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

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


と、まとめに入る前に…

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


「自由ってなんて美しく過酷なんだろう」

By エマ

またまた私の大好き約束のネバーランド」からエマのセリフです。

そうなんですよ!

自由にやっていくには、それだけヒトの何倍も過酷にガンバル時が必要

なんですよね。(>ー<)

どんなに仕事で疲れていようが、ノルマはこなさないと! 

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


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



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

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


本の目次

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


ちなみに…

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

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

今回もひきつづき第3章からでーす。

3.5 出力層の設計


機械学習のモンダイは、「分類」「回帰」

に分かれる。

基本的に、

回帰問題は恒等関数

分類問題はソフトマックス関数を使う。


3.5.1 恒等関数とソフトマックス関数


回帰問題で使われる恒等関数

入って来たものを何も手を加えずに出力する関数

恒等関数を図にすると↓のようになる。


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


一方


分類問題で使われるソフトマックス関数

次の式↓で表される。


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



ソフトマックス関数を図にすると↓のようになる。


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



↑の図のようにソフトマックスの出力は、

全ての入力信号から矢印による結びつきがある。


ソフトマックス関数を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%ぐらい残ってる感じ。ふう…

でもなんかこの本を終わるころには基礎力上がってる気がします

本当にスクラッチからコードを書いているので。いつもはコピペですし。苦笑

引き続き頑張りまっす。


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

フクコ


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