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