Slide 1

Slide 1 text

情報工学科 教授 杉浦孔明 [email protected] 慶應義塾大学理工学部 機械学習基礎 第7回 畳み込みニューラルネット

Slide 2

Slide 2 text

本講義の到達目標と今回の授業の狙い - - 4 本講義の到達目標 ■ DNNの基礎理論と実装の関係を理解する ■ 種々のDNNをコーディングできる 今回の授業の狙い ■ 畳み込みニューラルネットの基礎を習得する ■ 出席確認: K-LMS上の機械学習基礎のMainページへアクセス

Slide 3

Slide 3 text

畳み込みニューラルネット - - 5

Slide 4

Slide 4 text

背景 - - 6 ■ 画像を全結合層(fully-connected layers)のみで扱おうとするとパラ メータ数が増えすぎる 学習が遅い ■ 例:65536×2000+バイアス=1億個以上 256 256 65536 2000 1億個以上のパラメータ

Slide 5

Slide 5 text

★畳み込みニューラルネット (convolutional neural network; CNN) - - 7 ■ 画像特有の性質を利用してパラメータを減らし、学習を容易にしたい ■ 画素同士の距離が近いと関係が強く、遠いと関係が弱い ■ 応用例(画像・音声・言語等がある) https://github.com/facebookresearch/detectron2 WaveNet [van den Oord+ 2016]

Slide 6

Slide 6 text

畳み込みニューラルネットの歴史 - - 8 1959年 ヒューベル(Hubel)とウィーゼル(Wiesel)が、「ある角度の線分 にだけ反応し他の角度に反応しない細胞」がネコの視覚野に存 在することを発見 →一連の研究により、ノーベル賞受賞 1979年 Fukushimaがネオコグニトロン(最初の畳み込みニューラル ネット)を提案 1989年 LeCunが誤差逆伝播法を適用した畳み込みニューラルネットを 提案 2012年 AlexNet [Krizhevsky+ 2012]がILSVRC(→第2回資料)でトッ プの成績を収める

Slide 7

Slide 7 text

画像の行列表現 - - 9 ■ MNISTの場合 画像を28x28の行列 として表現

Slide 8

Slide 8 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 出力画像 ※カーネルはフィルタとも呼ばれる パラメータ9個

Slide 9

Slide 9 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 出力画像 2x3 0x1 -2x4 0x1 2x5 0x9 -2x2 0x6 2x5 パラメータ9個

Slide 10

Slide 10 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 出力画像 2x3+0x1+(-2)x4 +0x1+2x5+0x9 -2x2+0x6+2x5 パラメータ9個

Slide 11

Slide 11 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 10 10 出力画像 パラメータ9個

Slide 12

Slide 12 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 10 10 出力画像 2x1 0x4 -2x1 0x2 2x6 0x5 -2x8 0x9 2x7 パラメータ9個

Slide 13

Slide 13 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 10 10 8 出力画像 2x4 0x1 -2x5 0x6 2x5 0x3 -2x9 0x7 2x9 パラメータ9個

Slide 14

Slide 14 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 10 10 8 22 出力画像 2x9 0x2 -2x6 0x5 2x8 0x9 -2x3 0x2 2x3 パラメータ9個

Slide 15

Slide 15 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 10 10 8 22 24 出力画像 2x2 0x6 -2x5 0x8 2x9 0x7 -2x2 0x3 2x8 パラメータ9個

Slide 16

Slide 16 text

ニューラルネットにおける畳み込み 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 入力画像 カーネル (kernel) 2 0 -2 0 2 0 -2 0 2 10 10 8 22 24 22 -4 12 10 出力画像 パラメータ9個

Slide 17

Slide 17 text

CNN explainer [Wang+ TVCG20]を使ってみよう - - 19 https://poloclub.github.io/cnn- explainer/

Slide 18

Slide 18 text

CNN explainer [Wang+ TVCG20]を使ってみよう - - 20 https://poloclub.github.io/cnn- explainer/ 【グループワーク】画像を入力し てみよ。例えば、人間にはピーマ ンに見えるが「bell pepper」に分 類されない画像を探してみよ(3 分)。 ■ 使い方の説明(高校生向け) ■ https://speakerdeck.com/k eio_smilab/ysfh-science- literacyi- text2image?slide=19

Slide 19

Slide 19 text

サイズ3x3のカーネルによる畳み込みの数式表現 - - 21

Slide 20

Slide 20 text

サイズ3x3のカーネルによる畳み込みの数式表現 - - 22

Slide 21

Slide 21 text

サイズ3x3のカーネルによる畳み込みの数式表現 - - 23

Slide 22

Slide 22 text

サイズ3x3のカーネルによる畳み込みの数式表現 - - 24

Slide 23

Slide 23 text

サイズ3x3のカーネルによる畳み込みの数式表現 - - 25

Slide 24

Slide 24 text

サイズHxHのカーネルによる畳み込み - - 26 スライドにおいて、図では入力xカーネル、数式ではカーネルx入力の順番 になっていることがあるので注意 出力 入力 カーネル

Slide 25

Slide 25 text

畳み込みの直感的な理解: 入力画像中でカーネルと似たパターンを探している - - 27 ■ 畳み込み演算=行列の要素ごとの積の和(フロベニウス積) ■ 行列をベクトルとみなした場合の内積 ■ →カーネルと似ているパターンであれば出力値が大きい ■ 記号「*」は畳み込みを表す(=行列積ではない) 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 * * = 3 = 1 入力 カーネル 入力 カーネル

Slide 26

Slide 26 text

3 8 4 6 2 9 2 … 6 画像のチャネル数 - - 28 ■ グレースケール画像 ■ RGB画像 8 9 7 9 3 9 2 … 2 3 1 4 1 5 9 2 6 5 3 5 … 4 3 3 8 3 2 7 9 5 0 2 … 3チャネル (K=3) 1チャネル (K=1) R G B = =

Slide 27

Slide 27 text

入力チャネル数がKの場合: →Kチャネルのカーネルを用意 - - 29 3 5 8 9 7 9 3 2 3 3 1 4 1 5 9 2 6 5 1 2 3 4 0 1 2 3 3 1 4 1 5 9 2 6 5 0 1 2 3 3 5 8 9 7 9 3 2 3 1 2 3 4 86 119 67 79 入力 カーネル * = * + * =

Slide 28

Slide 28 text

入力チャネル数がKの場合: →Kチャネルのカーネルを用意 - - 30 3 5 8 9 7 9 3 2 3 3 1 4 1 5 9 2 6 5 1 2 3 4 0 1 2 3 3 1 4 1 5 9 2 6 5 0 1 2 3 3 5 8 9 7 9 3 2 3 1 2 3 4 入力 カーネル * = * + * =

Slide 29

Slide 29 text

; 入力チャネル数K・出力チャネル数Mの場合: →KチャネルのカーネルをMセット用意 - - 31 入力 カーネル * = M ;

Slide 30

Slide 30 text

特徴マップとは ↓ 層から 層への結合の場合 32 ↓活性化関数を追加 特徴マップ(feature map) M バイアス 追加

Slide 31

Slide 31 text

畳み込みの図示 - - 33 ■ 2チャネルの入力を畳み込みに より3チャネルに変換した例 入力 出力 受容野

Slide 32

Slide 32 text

畳み込みの図示 - - 34 ■ 2チャネルの入力を畳み込みに より3チャネルに変換した例 ■ 上下や直方体で表すこともある 入力 出力 受容野 チャネル 入力 出力 出力 入力

Slide 33

Slide 33 text

ストライド(stride) - - 35 ■ 精緻に局所構造を捉えたい →1画素ごとにカーネルを適用 ■ 大雑把に構造を捉えたい →S画素ごとにカーネルを適用 S個ごと https://github.com/vdumoulin/conv_arithmetic

Slide 34

Slide 34 text

パディング(padding) - - 36 ■ 畳み込み後に出力のサイズが入 力より小さくなることを避けた い →入力の外周に縁を付加する (=パディング)

Slide 35

Slide 35 text

パディング(padding) - - 37 ■ 畳み込み後に出力のサイズが入 力より小さくなることを避けた い →入力の外周に縁を付加する (=パディング) ■ サイズ ■ Same:入力と同じサイズ ■ Valid:パディングしない ■ 上下左右で任意の厚さ等 ■ 埋める値 ■ ゼロパディング(ゼロ埋め、 zero padding)等 0 0 0 0 … 0 0 0 0 0 0 0 0 3 1 4 1 5 …

Slide 36

Slide 36 text

dilation - - 38 ■ 畳み込み後に出力のサイズが入 力より小さくなることを避けた い →入力の外周に縁を付加する (=パディング) ■ dilation: 間隔をあけて(飛び飛 びに)畳み込みを行うことで範 囲を広げる

Slide 37

Slide 37 text

プーリング(pooling) - - 39 ■ プーリング:画像領域から得た 特徴を代表値にまとめる ■ 平均プーリング(average pooling) ■ 領域の平均値を代表値とする 3 2 1 1 4 3 2 0 4 4 2 0 5 3 2 0 3 1 4 1 他のチャネルも 同様に操作

Slide 38

Slide 38 text

プーリング(pooling) - - 40 ■ プーリング:画像領域から得た 特徴を代表値にまとめる ■ 平均プーリング(average pooling) ■ 領域の平均値を代表値とする ■ 最大プーリング(max pooling) ■ 領域の最大値を代表値とする ■ 大域的平均プーリング(global average pooling; GAP) ■ 各チャネルを平均 ■ 出力層付近での使用が多い 3 2 1 1 4 3 2 0 4 4 2 0 5 3 2 0 3 1 4 1 他のチャネルも 同様に操作 3 2 1 1 0 1 1 2 1 0 1 3 2 2 1 4 5 1 1 4 3 1 1 5 2 2 1 0 1 3 2 2 1 4 5 1 1 4 3 1 1 2

Slide 39

Slide 39 text

代表的なCNNとその可視化 - - 44

Slide 40

Slide 40 text

Q. CNNの各層は何を担当しているのか? A. 浅い層は具体的・深い層は抽象的な特徴量を担当 - - 45 ■ 抽出した特徴量を使って画像を再構成 浅い層には元画像の情報が残っているので画像を再現できる

Slide 41

Slide 41 text

CNNが学習した内容の可視化 - - 46 中間層の出力の可視化 ■ 画像から犬 / 猫の識別をするCNNを例に ■ 畳み込み層( ) ■ 最大プーリング層( ) ■ 全結合層( ) 148×148×32 72×72×64 34×34×128 15×15×128 74×74×32 36×36×64 17×17×128 7×7×128 6272 512 150×150×3 1 [Chollet 2017] https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 42

Slide 42 text

CNNが学習した内容の可視化 - - 47 畳み込み1層目  入力画像 https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 43

Slide 43 text

CNNが学習した内容の可視化 - - 48 最大プーリング1層目  入力画像 https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 44

Slide 44 text

CNNが学習した内容の可視化 - - 49 畳み込み2層目 https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 45

Slide 45 text

CNNが学習した内容の可視化 - - 50 最大プーリング2層目 https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 46

Slide 46 text

CNNが学習した内容の可視化 畳み込み3層目 最大プーリング3層目 - - 51 https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 47

Slide 47 text

CNNが学習した内容の可視化 - - 52 畳み込み4層目 最大プーリング4層目 https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/first_edition/5.2-using-convnets-with-small-datasets.ipynb

Slide 48

Slide 48 text

CNNが学習した内容の可視化 - - 53 フィルタの解釈  各フィルタが応答することになっている視覚パターンを表示 ■ 空の画像から入力画像に勾配上昇法を適用  特定のフィルタの応答を最大化  VGG(代表的なCNNの一種,詳細は後述)の最初の畳み込み4層分 について考える

Slide 49

Slide 49 text

CNNが学習した内容の可視化 - - 54 フィルタに応答しやすい入力画像(=フィルタの特徴) 1層目 2層目 3層目 4層目

Slide 50

Slide 50 text

代表的なCNN(1) - - 55 LeNet [LeCun+ 1989] ■ 畳み込み層( ) ■ サブサンプリング層( ) ■ 全結合層( ) ■ 活性化関数はシグモイド関数 ■ 手書き数字認識(MNIST)で成功をおさめる

Slide 51

Slide 51 text

代表的なCNN(2) - - 56 AlexNet [Krizhevsky+ 2012] ■ 畳み込み層( ) ■ 最大プーリング層( ) ■ 局所応答正規化層( ) ■ 全結合層( ) ■ 活性化関数はReLU ■ Dropout / データ拡張の正則化テクニックを使用 ■ ILSVRC* 2012でトップ(誤答率16.4%) * ImageNet Large Scale Visual Recognition Challenge

Slide 52

Slide 52 text

代表的なCNN(3) - - 57 VGG [Simonyan+ 2015] ■ 畳み込み層( ) ■ 最大プーリング層( ) ■ 全結合層( ) ■ VGG16  畳み込み13層 + 全結合3層 ■ VGG19  畳み込み16層 + 全結合3層(下図) ■ ILSVRC 2014で2位(誤答率7.3%)

Slide 53

Slide 53 text

代表的なCNN(4) - - 58 ResNet [He+ 2016](レズネットと発音) ■ 入力と出力を直接接続する経路をもつ残差ブロックを積み上げた 残差ネットワーク(residual network: ResNet)を提案 ■ 勾配消失問題を防ぐ ■ ILSVRC 2015でトップ(誤答率3.57%) ■ res-block ■ ■ ■ ILSVRC 2015のResNet(152層)では  に「足しこむ量=残差」を 畳み込み層で学習 … 畳み込み層 res-block

Slide 54

Slide 54 text

代表的なCNN(5) - - 59

Slide 55

Slide 55 text

本講義全体の参考図書 - - 60 ■ ★機械学習スタートアップシリーズ これならわかる深層学習入門 瀧雅人著 講談 社(本講義では、異なる表記を用いることがあるので注意) ■ ★Dive into Deep Learning (https://d2l.ai/) ■ 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之著 講談社 ■ ディープラーニングを支える技術 岡野原大輔著 技術評論社 ■ 画像認識 (機械学習プロフェッショナルシリーズ) 原田達也著 講談社 ■ 深層学習による自然言語処理 (機械学習プロフェッショナルシリーズ) 坪井祐太、 海野裕也、鈴木潤 著、講談社 ■ 東京大学工学教程 情報工学 機械学習 中川 裕志著、東京大学工学教程編纂委員会 編 丸善出版 ■ パターン認識と機械学習 上・下 C.M. ビショップ著 丸善出版

Slide 56

Slide 56 text

参考文献 - - 61 1. https://github.com/vdumoulin/conv_arithmetic 2. https://www.youtube.com/watch?v=vU-JfZNBdYU 3. Chollet, F. (2017). Deep Learning with Python. MANNING. 4. Lecun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11), pp. 2278– 2324. 5. Krizhevsky, A., Sutskever, I., & Hinton, G. (2012). ImageNet Classification with Deep Convolutional Neural Networks. In Proc. NIPS, pp. 1097–1105. 6. Simonyan, K. & Zisserman, A. (2015). Very Deep Convolutional Networks for Large-Scale Image Recognition. In Proc. ICLR, pp. 1–14. 7. Szegedy, C. et al. (2015). Going Deeper with Convolutions. In Proc. CVPR, pp. 1–9. 8. He, K., Zhang, X., Ren, S. & Sun, J. (2016). Deep Residual Learning for Image Recognition. In Proc. CVPR, pp. 770–778.

Slide 57

Slide 57 text

実習 - - 63

Slide 58

Slide 58 text

実習 - - 64 実習の目的 ■ コーディングと基礎理論の関係を学ぶ 実習課題の場所 ■ K-LMSから辿る 実習に関する質問 ■ ChatGPTに説明させる ■ 教科書で調べる・検索・周囲と相談(私語禁止ではありません) ■ 上記で解消しなければ挙手→TAが対応

Slide 59

Slide 59 text

付録 - - 65

Slide 60

Slide 60 text

補足:畳み込みに関する紛らわしいネーミング - - 66 ①ニューラルネットの畳み込み ②(数学・信号処理等の)一般的 な畳み込み ③相互相関 ②において としたもの ①と正負が逆 画像なら 類似度を表す

Slide 61

Slide 61 text

補足:畳み込みに関する紛らわしいネーミング - - 67 ①ニューラルネットの畳み込み ②(数学・信号処理等の)一般的 な畳み込み ③相互相関 ②において としたもの ■ ポイント ■ ニューラルネットの畳み込み は、相互相関の定義に近い ■ の順番を入れ替えれば、 一般的な畳み込みと等価 ■ DNNの慣習に従い、本講義で は①を「畳み込み」と呼ぶ ①と正負が逆 画像なら

Slide 62

Slide 62 text

代表的なCNN(4) - - 68 GoogLeNet [Szegedy+ 2015] ■ 畳み込み層( ) ■ 局所応答正規化層( ) ■ 最大プーリング層( ) ■ インセプションモジュール( ) ■ ILSVRC 2014でトップ(誤答率6.7%)

Slide 63

Slide 63 text

代表的なCNN(4) - - 69 GoogLeNet [Szegedy+ 2015] ■ インセプションモジュール( ) ■ パラメータ数はAlexNetの1/12 3×3 MaxPool 5×5 Conv 1×1 Conv 3×3 Conv 1×1 Conv 1×1 Conv 1×1 Conv 深度連結

Slide 64

Slide 64 text

CNNの誤差逆伝播法 - - 70 ■ 式(8.15)に対応する式 ■ 式(8.17)に対応する式

Slide 65

Slide 65 text

オススメの勉強方法 - - 71 ■ コード・数式を見るだけの勉強法は 効率が悪い ■ コードは自分で種々の変更を加えて 動かすことが重要 ■ 例:100を101に変えるとエラーが 起こるので修正する ■ 数式は手書きで何度も写していると 意味がわかってくることがある ■ iPadとApple Pencilを持っていれば、 GoodNotes(右図)がオススメ