dn-1. ニューラルネットワーク
AI演習の入門)
URL: https://www.kkaneko.jp/ai/dn/index.html
1
金子邦彦
トライン
1. 深層学習
2. ニューラルネットワーク
3. 活性化,
4. ニューラルネットワークでの学習
5. ニューラルネットワークを用いた分類
6. 画像画素
7. ニューラルネットワーク作成
8. 学習不足過学習
9. ニューラルネットワーク用の流れ
2
大学の授業「人工知能」の前半部分の総まとめ+発展
ニューラルネットワークがどものか知りた
実際に動かしたい.研究してみたい
(この資料により,実際に動かしてみることも可
能)
3
1. 深層学習
4
人工知能
人工知能は,コンピュータが,知的な能力を持つこと
知能
知識
学習
5
さまざまな応用
いまの人工知能 (AI) で、できること
知識表現,知識の処理
人間の言葉に関する処理(自然言語処理)
認識や推論
分類
音声認識 (人の声を「文字」化する)
物体検知,物体識別 (画像の中から、「もの」を見つける)
顔認識
合成
創作
欠損の補充
翻訳
6
種々の技術がオンラインで公開されており,
自分のパソコンで試すこともできるよに.
人工知能の種
7
知的な IT システム
ルールや知識人間が書いた
人工知能
機械学習
学習による上達の能力
持つ人工知能
人工知能
機械学習のメリット,デメリット
8
知的な IT システム
ルールや知識人間が書いた
人工知能
機械学習
学習による上達の能力
持つ人工知能
デメリット
学習不足,過学習,
などの注意点がある.
完璧に学習が成功する
わけではない.
メリット
「ルールや知識を,人
間がプログラムで書か
ねばならないことの限
界を突破
深層学習(ディープラーニング)
【できること】
学習による上達の能力機械学習
仕組みはシンプル.最適化(誤差を自動で最小化
さまざまな応用:人間の言葉に関する処理,認識や推論(音
声,画像,顔,人体,3次元など),合成,翻訳,欠損の補
間など
できないこと
知識表現,人間が目に見える形での知識の獲得
「なぜ,ディープラーニングが正しく動くのか」は,
データによる検証が必要
9
2. ニューラルネットワーク
10
深層学習とニューラルネットワーク
ニューラルネットワーク(ニューロンのネットワーク)は,
深層学習ディープラーニング)の能力を持つ
11
ニューロン ニューロン
ニューロン
間の結合
ニューロン
間の結合
ニューロン
ニューロンの機能
足し算
掛け算
合計
合計から出力値を算出
(活性化関数)
・メモリの機能も持つことも
ニューラルネットワークは,
コンピュータでシミュレーション可能
層が直列になっているニューラルネット
ワーク
12
入力データ 出力データ
データは入力から出力の方向へ
ニューロン ニューロン ニューロン
ニューロン
間の結合
ニューロン
間の結合
層が直列になっているニューラルネット
ワーク
13
入力データ 出力データ
データは入力から出力の方向へ
ニューロン ニューロン ニューロン
ニューロン
間の結合
ニューロン
間の結合
一層目 二層目 三層目
それぞれの
は、同じ種類
ニューロン
深層学習
層の数が多い(多層の)ニューラルネットワーク
は,深層学の機能をもつ
深層学習のことをディープラーニングもい
14
層数が少ない 層数が多い(=多層)
3. 活性化,伝搬
15
層が直列になっているニューラルネット
ワーク
16
入力データ 出力データ
データは入力から出力の方向へ
一層目 二層目 三層目
活性化と非活性化
17
ニューロン活性化したり、非活性化したりする
(入力に応じてダイナミックに変化)
伝搬
18
活性化したユニットは、
大きな値を出力
正の値で大
負の値で大
次の層のユニットに、大きな値が
伝搬される
・重みが正なら、正の大きな値
・重みが負なら、負の大きな値
4. ニューラルネットワークで
の学習
19
ニューラルネットワークの動作イメー
20
活性度: 0.24
活性度: 0.83
本来ある
べき値
0
1
誤差: 0.24
誤差: -0.17
活性度が下がるように
結合の重みを調整
活性度が上がるように
結合の重みを調整
より前の
層の結合の
重みも調整される
学習能力をコンピュータに組み込んでおき,
あとでデータを与えて学習させる
http://playground.tensorflow.org
21
22
1 層目 2 層目結合
結合
前処理
(データが青い部分にあれば活性化)
ニューラルネットワーク
URL: https://playground.tensorflow.org/
データが中央にあれば活性化
まとめ
23
入力データ 出力データ
データは入力から出力の方向へ
ニューロン ニューロン ニューロン
ニューロン
の結合
ニューロン
の結合
ニューラルネットワーク学習では、ニューロン間の結合重み変化
5. ニューラルネットワーク
を用いた分類
24
層が直列になっているニューラルネット
ワーク
25
入力データ 出力データ
データは入力から出力の方向へ
ニューロン
10
ニューロン
間の結合
ニューロン
128
最終層
10種類の中から1つに分類する場合
26
0から 9
整数の
いずれか
入力データ 出力データ
10種類に分類するニューラルネット
ワーク
27
入力データ 出力データ
データは入力から出力の方向へ
ニューロン
10
ニューロン
間の結合
ニューロン
128
最終層
最終層について,1つが強く
活性化するよに調整
10種類に分類するニューラルネット
ワーク
28
入力データ 出力データ
データは入力から出力の方向へ
ニューロン
10
ニューロン
間の結合
ニューロン
128
最終層
最終層について,1つが強く
活性化するよに調整
出力は 0
10種類に分類するニューラルネット
ワーク
29
入力データ 出力データ
データは入力から出力の方向へ
ニューロン
10
ニューロン
間の結合
ニューロン
128
最終層
最終層について,1つが強く
活性化するよに調整
出力は 1
10種類に分類するニューラルネット
ワーク
30
入力データ 出力データ
データは入力から出力の方向へ
ニューロン
10
ニューロン
間の結合
ニューロン
128
最終層
最終層について,1つが強く
活性化するよに調整
出力は 9
10種類に分類するニューラルネットワーク
31
出力データ
ニューロン
10
ニューロン
間の結合
ニューロン
128
最終層
最終層について,1つが強く
活性化するよに調整
出力は 0
活性度 0.94
実際には,活性度0 から 1 のよな数値である.
最も活性度値が高いものが選ばれて,分類結果となる
6. 画像と画素
32
画像と画素
33
MNISTデータセット(手書き文
字のデータセットで,濃淡画像)
画像サイズ:28 ×28
画素
255
画素値
画素値は,画素の明るさに
応じた 0 から 255 の数値
画像と配列(アレイ)
34
MNISTデータセット(手書き文
字のデータセットで,濃淡画像)
画像サイズ:28 ×28
画像全体は,サイズ
28 ×28 2次元
配列
画像7行分の画
素値を表示したとこ
ろ(28 ×7分)
7. ニューラルネットワーク
の作成
35
ここで作成するニューラルネットワーク
入力: 28×28個の数値のまとまり
出力: 28×28個の数字のまとまり」について,
10種類の中から 1つに分類
36
入力データ
28×28個の数字
のまとまり
ニューロン
ニューロン数: 64
種類: relu
ニューロン数: 10
種類: softmax
全体で 2
出力データ
ニューロン
ニューラルネットワーク作成のプログラム例
37
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
m = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28, 1)),
tf.keras.layers.Dense(units=64, activation=tf.nn.relu),
tf.keras.layers.Dense(units=10, activation=tf.nn.softmax)
])
1層目のニューロン数は 64
種類は relu
2層目のニューロン数は 10
種類は softmax
入力データは 28×28個の数字
38
ニューラルネットワークのオブジェクト名は m
print(m.summary()) は確認表示
8. 学習不足と過学習
39
ニューラルネットワークの学習
学習訓練データ使い,
適切な結果が得られるよ合の重を調
40
訓練データの例
41
画像 60000
ち一部)
正解 60000
ち一部)
4 1 0 7 8
1 2 7 1 6
6 4 7 7 3
3 7 9 9 1
0 6 6 9 9
学習不足
ニューラルネットワーク学習では,学習のた
めのデータ(訓練デ)を使
訓練データを1回使っただけでは,不足
場合がある
同じ訓練データを繰り返し使って学習を行
繰り返しながら,誤差の減少を確
42
1回
2回
3回 4回
誤差の減少
43
ニューラルネットワークの学習,検証
20 のようにある通り,学習が 20 回繰り返されている.
学習のたびに検証を実施.繰り返し学習の間、誤差は減少
ニューラルネットワークの学習のプログラム
44
EPOCHS = 20
history = m.fit(ds_train[0], ds_train[1],
epochs=EPOCHS,
validation_data=(ds_test[0], ds_test[1]),
verbose=1)
訓練データの指定
学習の実行
学習を 20回繰り返す
検証データを指定することで,
検証も行われる
学習曲線
学習の繰り返しが進むにつれ,誤差(損失)
精度向上
45
誤差の減少 精度の向上
大量のデータがある場合には、訓練データと
検証データに振り分けることができる
例えば,70000 枚の画像データを準備できる場合
60000訓練デーとして使用
10000検証で使
のよに考えることができる
訓練データと検証データは別々であることが重要.
60000 10000 のよな枚数は,自由に決めることが
できるもの. 46
47
検証データでの誤差
訓練データでの誤差
過学習
訓練データによる学習の繰り返し
訓練データでは,精度が向するが,検証データでは
精度が向上しないことがある 過学習
過学習の発見のため,検証データでの検証が必要
過学習では,学習の繰り返による精度の悪化もあり
える.学習の打ち切りが必要.
48
結合の重みの表示
49
m.get_weights()[2]
実行結果
プログラム
学習により
結合の重みが変化す
9. ニューラルネットワークの
利用の流
50
前準備
Google アカ取得が必
次のページを使用
https://accounts.google.com/SignUp
次の情報を登録する
氏名
自分が希望するメールアドレ
<ユーザー名>@gmail.com
パスワード
生年月日,性別
51
使用するプログラム
プログラムは、次のページで公
https://colab.research.google.com/drive/1IfArIvhh-
FsvJIE9YTNO8T44Qhpi0rIJ?usp=sharing
利用には,Google アカントでのログインが必
右上の「ログイ」をクリッして利用開
52
コードセル上から順に実行する.
コードセル実行の終了を確認してから、次の
ドセに移ること
53
最後まで続ける
実行するには
Google
アカウント
によるログイン
が必要
人工知能による分類結果
分類結果は「2, 0, 4 ... 」のよに表示
学習では、乱数が使用されるので、実行ごとに
結果が変わる場合がある
54
精度の確認
55
accuracy のところ
が精度
途中省略
1 に近いほど
精度が良い
実験1
(仮説)エポック数(学習の繰り返し回数)は、
いまは 20
これを増や精度は上がるかも。
56
まず、50に書き換え
実行.「9.モデルの作成と確認とコンパイル」,
「10.モデルのビジュアライズ」,「11.学習
(訓練)」のコードセルを順に実行 「11.学習(訓練)」
の実行結果の
accuracy のところ
で,精度を確認
1 に近いほど
精度が良い
実験2
(仮説)ニット数を変えると、精度は変化す
るかも。
57
まず、1000に書き換え
実行
その下の
コードセルを
「11.学習(訓練)」
のところまで順に実行 accuracy のところ
で,精度を確認
1 に近いほど
精度が良い
考察の例
繰り返し回は20回で足りている(20回でも
学習不足ない)とい場合もある
ユニット数は,64で十分に足りているとい
合もある.「増やせばよい」といものではない
58