dn-3. ニューラルネットワーク の仕組み · tensorflow...

40
dn-3. ニューラルネットワーク の仕組み (人工知能演習①(3) ) 1 金子邦彦 https://www.kkaneko.jp/cc/dn/index.html

Transcript of dn-3. ニューラルネットワーク の仕組み · tensorflow...

Page 1: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

dn-3. ニューラルネットワークの仕組み

(人工知能演習①(3))

1

金子邦彦

https://www.kkaneko.jp/cc/dn/index.html

Page 2: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

アウトライン

2-1 復習2-2 ニューラルネットワークの作成

Python, TensorFlow, Kerasを用いて,ニューラルネットワークの作成,学習,ニューラルネットワークを用いた予測を行う.

2

Page 3: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

2-1 復習

3

Page 4: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

層が直列になっているニューラルネットワーク

4

全結合

全結合

全結合

入力 出力

層数が4の場合(総数はいろいろ変わる)

Page 5: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ユニットと全結合

5

入力 出力

※ 層の中には、ユニットが並ぶ

全結合

全結合

全結合

Page 6: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークによる予測

6

画素数784 のモノクロ画像があったとする

1層目2層目

・・・

活性化

データは配列(アレイ)

Page 7: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークによる予測

7

画素数784 のモノクロ画像があったとする

1層目2層目

・・・

活性化

データは配列(アレイ)

Page 8: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークによる予測

8

ニューラルネットワーク

未知のデータ

1つが活性化

↓活性化したユニットが「2番」なら,「予測結果は2」の意味

0

1

2

3

4

・ニューラルネットワークでの予測は,未知のデータを与えて,最終層のユニットを活性化させることで行う

Page 9: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ソフトマックス (softmax) に設定された出力層

9

出力層(出力を出す層)のユニットについて,活性化の度合いが高くなるのは同時に1つ

ソフトマックスに設定したとき・各ユニットの活性化の度合いは,0から1の数値

・最も値が高いものは「活性化している」,それ以外は「活性化してない」と考える

Page 10: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークとは

10

・ニューラルネットワークは,層が積み重なっている・層の中には,ユニットが並ぶ.・ユニットは,互いにつながり,ときには活性化する・ニューラルネットワークでの予測は,未知のデータを与えて,最終層のユニットを活性化させることで行う

ノートページ

Page 11: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

2-2. ニューラルネットワークの作成

11

Page 12: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワーク利用の流れ

1. 定義 (define)

ニューラルネットワークの作成

2. コンパイル (compile)

ニューラルネットワークの学習過程(損失関数や最適化手法など)を定めてからコンパイル

3. 学習 (train)

ニューラルネットワーク内のパラメータの自動調整(fit ともいう)

4. 評価 (evaluate)

学習の結果できたニューラルネットワークの評価

※前もって準備しておいた「テストデータ」を使用

5. 予測 (make prediction)

ニューラルネットワークを用いて予測12

Page 13: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットの使用例

13

出力は,各ユニットの活性化の度合い

層数: 2 構造は直列(Sequential)

ユニット数3ソフトマックス

ユニット数

64

4個の数値(入力層の全ユニットに同じ入力)

全結合 出力

Page 14: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットの動作イメージ

14

出力は,各ユニットの活性化の度合い

0.14816035

0.02995965

0.82188004

層数: 2 構造は直列(Sequential)

ユニット数3ソフトマックス

ユニット数

64

4個の数値 全結合

[0, 1, 0, 1]

Page 15: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

Python

•数多くあるプログラミング言語の1つ

•さまざまな拡張機能(数百以上)がある

numpy 配列計算

tensorflow ディープラーニング(深層学習)向けの配列計算

Pybrain 機械学習全般

Scipy 最適化,積分,信号,画像,統計,フーリエ変換

AIMA

※ディープラーニング(深層学習)は,多層のニューラルネットワーク,その活用技術のこと

•アイデアをすぐに試したい(数十行以内のプログラム)場合にも向くとされる

Page 16: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークの例

16層数: 2

入力 出力全結合

ユニット数 3

この層は,「softmax」になるように設定

ユニット数

64

4 個の数値

Page 17: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

import tensorflow as tf

import keras

from keras.models import Sequential

m = Sequential()

from keras.layers import Dense, Activation, Dropout

import keras.optimizers

m.add(Dense(units=64, activation='relu', input_dim=4))

m.add(Dense(units=3, activation='softmax'))

m.compile(loss=keras.losses.categorical_crossentropy,

optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9,

nesterov=True))

ニューラルネットワークを作るプログラム

17

入力は 4個の数値1層目のユニット数は 64

2層目のユニット数は 3「softmax」

損失関数は categorical_crossentropy,

最適化手法は SGD

Page 18: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークの作成

プログラムで,次を指定

•層の数

•各層のユニットの数

•各層のユニットの種類

•コンピュータ上の作成されるバーチャルなもの

18

ノートページ

Page 19: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

実習の指示• 資料:17,18• 次のことを理解しマスターする

• ニューラルネットワークの作成• summary による確認表示

19※より詳しい実習資料は

https://www.kkaneko.jp/dblab/keras/keras.html

※実習のためのWindows の事前準備については

• Python: https://www.kkaneko.jp/tools/win/python.html• TenforFlow, Keras: https://www.kkaneko.jp/tools/win/keras.html

Page 20: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

①ニューラルネットワークの作成

•次の Python プログラムを実行しなさい

20

import tensorflow as tf

import keras

from keras.models import Sequential

m = Sequential()

from keras.layers import Dense, Activation, Dropout

import keras.optimizers

m.add(Dense(units=64, activation='relu', input_dim=4))

m.add(Dense(units=3, activation='softmax'))

m.compile(loss=keras.losses.categorical_crossentropy,

optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9,

nesterov=True))

Page 21: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

② summaryによる確認表示

•次の Python プログラムを実行しなさい

21

print(m.summary())

Page 22: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

2-3. ニューラルネットワークの学習

22

Page 23: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ここで用いる学習データの例

23

[0, 1, 0, 1] [1, 0, 1, 0] 1 を出力

[1, 1, 0, 0] [0, 0, 1, 1] 2 を出力

その他 0, を出力させる

Page 24: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

配列(アレイ)とは

•配列(アレイ)とは,データの並びで,0から始まる番号(添字)が付いている

24

180 20 250 40

0 1 2 3

1次元の配列

5 3

0,0 0,1

2次元の配列1,0 1,1

2 4

Page 25: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

画像と画素

25

画素は,白と黒の2種類しかないとする

白は 0 黒は 1, とする

画像のサイズが 2 × 2のとき

[0, 0, 0, 0]

[0, 1, 0, 0]

[0, 0, 1, 0]

[1, 1, 1, 1]

Page 26: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

学習用データセットの例

26

[[0, 0, 0, 0],

[0, 0, 0, 1],

[0, 0, 1, 0],

[0, 0, 1, 1],

[0, 1, 0, 0],

[0, 1, 0, 1],

[0, 1, 1, 0],

[0, 1, 1, 1],

[1, 0, 0, 0],

[1, 0, 0, 1],

[1, 0, 1, 0],

[1, 0, 1, 1],

[1, 1, 0, 0],

[1, 1, 0, 1],

[1, 1, 1, 0],

[1, 1, 1, 1]]

[0,

0,

0,

2,

0,

1,

0,

0,

0,

0,

1,

0,

2,

0,

0,

0]

どういう入力のとき,どういう出力が出て欲しいかのデータ

Page 27: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

2-3. ニューラルネットワークの学習

•学習に使用されるデータセットは,

どういう入力のとき,どういう出力が

出て欲しいかのデータ

•形は配列(アレイ)

27

ノートページ

Page 28: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

実習の指示• 資料:26~29• 次のことを理解しマスターする

• ニューラルネットワークの学習• summary による確認表示

28※より詳しい実習資料は

https://www.kkaneko.jp/dblab/keras/keras.html

※実習のためのWindows の事前準備については

• Python: https://www.kkaneko.jp/tools/win/python.html• TenforFlow, Keras: https://www.kkaneko.jp/tools/win/keras.html

Page 29: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

①学習用データの準備

•次の Python プログラムを実行しなさい

29

import numpy as npx = np.array([[0, 0, 0, 0],[0, 0, 0, 1],[0, 0, 1, 0],[0, 0, 1, 1],[0, 1, 0, 0],[0, 1, 0, 1],[0, 1, 1, 0],[0, 1, 1, 1],[1, 0, 0, 0],[1, 0, 0, 1],[1, 0, 1, 0],[1, 0, 1, 1],[1, 1, 0, 0],[1, 1, 0, 1],[1, 1, 1, 0],[1, 1, 1, 1]])

次のページに続く

Page 30: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

30

y = np.array([0, 0, 0, 2,0,1, 0,0, 0,0,1,0,2,0,0,0])

Page 31: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

②ニューラルネットワークの学習

•次の Python プログラムを実行しなさい

31

m.fit(x, keras.utils.to_categorical(y), epochs=500)

Page 32: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

③学習の終了の確認

32

Page 33: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

2-4. ニューラルネットワークによる予測

33

Page 34: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットの使用例

34

出力は,各ユニットの活性化の度合い

ユニット数 3

0.14816035

0.02995965

0.82188004入力

[0, 1, 0, 1]4 個の数値

Page 35: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

実習の指示• 資料:33~35• 次のことを理解しマスターする

• ニューラルネットワークによる予測

35※より詳しい実習資料は

https://www.kkaneko.jp/dblab/keras/keras.html

※実習のためのWindows の事前準備については

• Python: https://www.kkaneko.jp/tools/win/python.html• TenforFlow, Keras: https://www.kkaneko.jp/tools/win/keras.html

Page 36: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

①ニューラルネットワークによる予測

•次の Python プログラムを実行しなさい

36

m.predict( np.array([[0, 1, 0, 1]]) )

学習では,乱数が使用されるので,各自,違った値が表示されることに注意.

Page 37: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

37

入力

[0, 1, 0, 1]4 個の数値

出力 [0.14816035, 0.02995965, 0.82188004

3個の数値

0 である確率 0.14816035

1 である確率 0.02995965

2である確率 0.82188004

Page 38: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

②第一層と第二層の間の重み(ユニット間の結合の強さ)の表示

•次の Python プログラムを実行しなさい

38

m.get_weights()[2]

学習では,乱数が使用されるので,各自,違った値が表示されることに注意.

Page 39: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

ニューラルネットワークの例

39

64個のユニットと,3個のユニットとの結合は 192本

ユニット数 64

入力 出力

結合は192本

ユニット数 3

Page 40: dn-3. ニューラルネットワーク の仕組み · tensorflow ディープラーニング(深層学習)向けの配列計算 Pybrain 機械学習全般 Scipy 最適化,積分,信号,画像,統計,フーリエ変換

まとめ

•ユニット間の結合の強さを結合の重みなどという.

•学習では,結合の重みが変化する

40

ノートページ