778 Views
July 08, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度前期輪読会#11「ゼロから作るDeep Learning」 7章 畳み込みニューラルネットワーク 7.1~7.3 奈良女子大学 藤本 馨 0
目次 目次 1. 畳み込みニューラルネットワークの構造 2. 畳み込み層 3. プーリング層 4. まとめ 1
はじめに 畳み込みニューラルネットワークについて ● 英語:Convolutional Neural Network(CNN) ⚫ 以降、本文では畳み込みニューラルネットワークをCNNと表記します ● 画像認識や音声分類に特に有効な手法 ● 畳み込み(Convolution)を用いたフィルタリングは、画像処理に古くから用いられてい る手法 ⚫ フィルターとなる行列を各画素に対して畳み込み演算 ⚫ 平滑化(元画像をぼかす) ⚫ 鮮鋭化(元画像のエッジを強調) ⚫ エッジ検出(画素値が変化している部分を検出) 平滑化 鮮鋭化 エッジ検出 参考・引用元URL:https://www.momoyama-usagi.com/entry/info-img03 2
7.1 全体の構造 畳み込みニューラルネットワークの構造 Affine ReLU Affine ReLU Affine ReLU Affine Soft max R e L U A f f i n e 4層の全結合のニューラルネットワーク C o n v R e L U P o o l i n g C o n v R e L U P o o l i n g C o n v R e L U A f f i n e S m o a f x t CNNによるネットワークの例 ● 新しい層が2つ加わった ⚫ 畳み込み層(Convolution レイヤ) ⚫ プーリング層(Poolingレイヤ) ● 出力に近い部分はニューラルネットワークに近い層の組み合わせが用いられる ⚫ 畳み込み・プーリング層を経て特徴抽出を行い、全結合層で分類を行っている 3
7.2 畳み込み層 畳み込みニューラルネットワーク ● 全結合層の問題点 ⚫ データの形状が無視されてしまう ⚫ ⚫ ⚫ 入力するときに1次元のデータにする必要がある MNISTを入力データとした際、入力画像は28×28行列だったが、入力は1×784 行列になっていた 画像は3次元の形状であり、空間的情報の中に識別・分類に必要 な情報が含まれている ⚫ 古典的な画像認識でも近傍のセル情報から識別セルがどのような特徴を 持つのかを抽出する 全結合層では全ての入力を同じ次元のニューロンとして扱うため 形状に関する情報を生かせない 畳み込み層の入力は形状を維持するので 画像などの形状を有したデータを正しく理解できる可能性がある 4
7.2 畳み込み層 畳み込み演算 ● 入力データに対し、フィルターを一定の間隔でスライドさせて適用する ⚫ ⚫ ⚫ ⚫ ①対応する要素を乗算し、その和を求める(積和演算と呼ぶ場合もある) ②結果を出力の対応する場所へ格納する 全ての場所で①②のプロセスを行い、出力を得る CNNでは畳み込み層の入出力データを特徴マップと呼ぶ ⊛ (5,5) 入力データ (3,3) フィルター (3,3) 出力データ 参考・引用元URL:https://www.clg.niigata-u.ac.jp/~medimg/practice_medical_imaging/imgproc_scion/4filter/index.htm 5
7.2 畳み込み層 畳み込み演算 CNNの場合、フィルターのパラメータがニューラルネットワーク での「重み」に対応する ● CNNの場合もバイアスが存在する ● 1 2 3 0 0 1 2 3 3 0 1 2 2 3 0 1 (4,4) 入力データ 2 ⊛ 0 1 0 1 2 1 0 2 (3,3) フィルター 15 16 6 15 (2,2) 出力 + 3 (1,1) バイアス 18 19 9 18 (2,2) 出力データ バイアスはフィルター適用後のデータに対して加算される ● バイアスはフィルターに対して常に1つ(1,1)だけ存在する ● 6
7.2 畳み込み層 パディング ● 畳み込み演算はフィルターの大きさによっては出力サイズが小さくなる ● 出力サイズを調整するために入力データの周囲に固定のデータ(例えば0など)を埋めること をパディングという 0 0 0 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 3 0 1 2 0 0 2 3 0 1 0 0 0 0 0 0 0 ⊛ (3,3) フィルター (4,4) 入力データ(padding:1) 7 12 10 2 4 15 16 10 10 6 15 6 8 10 4 3 (4,4) 出力データ ● 例では幅1のパディングを行っているので、入力データサイズは(6,6)になる ⚫ 幅2にすれば入力データサイズは(8,8)、出力サイズは(6,6) ⚫ 幅3にすれば入力データサイズは(10,10)、出力データサイズは(8,8) ● パディングを大きくすると出力データサイズは大きくなる 7
7.2 畳み込み層 ストライド ● フィルターを適用する位置の間隔のことをストライドという ● これまでの例のストライドは1 ● ストライドを2にすると、フィルターを適用する窓の間隔が2要素ごとになる 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 ⊛ (3,3) フィルター 15 17 15 17 15 17 15 17 15 (3,3) 出力データ (7,7) 入力データ ● ストライドを大きくすると出力データサイズは小さくなる 8
7.2 畳み込み層 出力データサイズの定式化 ● 入力データサイズに対する、フィルターサイズ・パディング・ストライドか ら、出力データサイズを計算することが出来る • • • • • ● 入力データサイズ: 𝐻, 𝑊 フィルターサイズ: 𝐹𝐻, 𝐹𝑊 出力データサイズ: 𝑂𝐻, 𝑂𝑊 パディング: P ストライド: S 𝑂𝐻 = 𝐻 + 2𝑃 − 𝐹𝐻 +1 𝑆 𝑊 + 2𝑃 − 𝐹𝑊 𝑂𝑊 = +1 𝑆 スライド8ページ目の例 • • • • • 入力データサイズ: 7,7 フィルターサイズ: 3,3 出力データサイズ: 𝑂𝐻, 𝑂𝑊 = 3,3 パディング: 0 ストライド: 2 7+2⋅0−3 𝑂𝐻 = 3 = +1 2 𝑂𝑊 = 3 = 7+2⋅0−3 +1 2 上記の式が割り切れるように、それぞれの値を設定しなければならない 9
7.2 畳み込み層 3次元データの畳み込み演算 ● 3次元データの場合、縦横方向に加えてチャンネルが増える 下の例だと、チャンネル数は3 ● チャンネルごとに入力データとフィルターの畳み込み演算を行い、それらの 結果を加算してひとつの出力を得る ⚫ 参考・引用元URL:https://zenn.dev/academix/books/0da15caa65b59f/viewer/15_cnn チャンネル数は入力データとフィルターで同じ値にしなければならない 10
7.2 畳み込み層 ブロックで3次元畳み込み演算を考える ● 𝐶 はチャンネル数を表す ⚫ フィルタ数が1の場合 ⚫ フィルタ数が𝐹𝑁の場合 参考・引用元URL:https://qiita.com/yakof11/items/2e187f7d9f253b500295 11
7.2 畳み込み層 ブロックで3次元畳み込み演算を考える ● 𝐶 はチャンネル数を表す ⚫ フィルタ数が𝐹𝑁の場合(バイアスも表示) ● バイアスは 1チャンネル(1フィルター?)ごとに、 1つだけデータを持つので、 チャンネル数(フィルタ数?)である𝐹𝑁個 用意する 参考・引用元URL:https://qiita.com/yakof11/items/2e187f7d9f253b500295 12
7.2 畳み込み層 バッチ処理 ● 各層を流れるデータをミニバッチに含まれるデータ数であるN を含む、 4次元のデータとして格納する ● 各データの先頭にバッチ用の次元数が追加 される ● N回分の処理を1回にまとめて行っている (N,C,H,W) (N,FN,OH,OW) 参考・引用元URL:https://qiita.com/yakof11/items/2e187f7d9f253b500295 13
7.3 プーリング層 プーリング層 プーリングは縦横方向の空間を小さくする演算 ● 2×2のMaxプーリングをストライド2で行った場合 ● 1 2 3 0 0 1 2 3 2 3 3 0 1 2 4 2 2 4 0 1 2×2のウィンドウが2要素ごとに、2×2の領域に対して最大となる要素を取 り出す ● プーリングにおいては、一般的にウィンドウサイズとスライドサイズは同じ 値に設定する ● 14
7.3 プーリング層 プーリング層の特徴 ● 学習するパラメータがない チャンネル数は変化しない( 𝑂𝐻, 𝑂𝑊 は変化するが、 𝐹𝑁 は変化しない) ● 微小な位置変化に対してロバスト(頑健) ● 1 2 3 0 7 2 1 1 2 3 0 7 0 9 2 3 0 1 0 0 9 2 3 0 3 0 1 2 3 0 9 7 3 3 0 1 2 3 9 7 2 3 0 1 2 3 6 8 2 2 3 0 1 2 6 8 1 2 3 0 1 2 1 1 2 3 0 1 6 1 2 3 8 1 0 6 1 2 3 8 入力データが横方向に1要素分だけずれた場合でも出力は同じになる場合がある (もちろんデータによる) 15
7.1~7.3 まとめ CNNの 構造 ⚫ ニューラルネットワークにはない、畳み込み層とプーリング層が加わっている ⚫ 畳み込み・プーリング層を経て特徴抽出を行い、全結合層で分類を行う 畳み込み層 ⚫ 入力の形状を維持したまま入力できるので、画像など形状を有するデータに有効 ⚫ 入力データに対し、フィルターを一定の間隔でスライドさせて積和演算を行う ⚫ 畳み込み演算はフィルターの大きさによっては出力サイズが小さくなるため、入力データの周囲を固定デ ータで埋めることをパディングという ⚫ フィルターを適用する位置間隔のことをストライドという ⚫ 3次元データの場合、縦横方向に加えてチャンネルが増え、チャンネル数と入力データとフィルターで同 じ値にする ⚫ バッチ処理を行う場合は、ミニバッチに含まれるデータ数であるN を含む4次元のデータとして格納する プーリング層 ⚫ プーリングは縦横方向の空間を小さくする演算 ⚫ 領域に含まれる最大値を返すMaxプーリングなどがある 16
17