NN, CNN, and Image Analysis

25
畳込みNN(CNN) 画像解析 NNの基礎から 1

Transcript of NN, CNN, and Image Analysis

Page 1: NN, CNN, and Image Analysis

畳込みNN(CNN)と

画像解析NNの基礎から

1

Page 2: NN, CNN, and Image Analysis

第一部

NN基礎Neural Network

2

Page 3: NN, CNN, and Image Analysis

データの表記

𝒙𝟏 𝒙𝟐 … 𝒙𝒊 … 𝒙𝑫

𝑥𝑛𝑖

D

N

𝒕

𝐭𝟏 𝐭𝟐

1 0

0 1

0 1

1 0

𝐭𝟏 𝐭𝟐 … 𝐭𝐤 … 𝐭𝐊

1 0 0

0 0 1

𝑡𝑛𝑘

0 1 0

𝒕

0

1

1

0

or

𝒕

0

K

1

or

説明変数、Features 目的変数、Target

連続値(ガウシアン)

2クラス判別(ベルヌーイ, 二項)

多クラス判別(多項)

K

𝑥𝑛

𝑇

3

Page 4: NN, CNN, and Image Analysis

ネットワーク図

・・・

𝑥𝐷

𝑥1

𝑥0 = 1

(バイアス) 𝑧0 = 1

(バイアス)

𝑧1

𝑧𝑀𝑤𝑀𝐷(1)

𝑤10(1)

𝑤𝐾𝑀(2)

𝑦1

𝑦𝐾

𝑤10(2)

.𝑥𝑖.

.𝑧𝑗.

.𝑦𝑘.

𝑧𝑗 = ℎ 𝑖=1

𝐷

𝑤𝑗𝑖(1)𝑥𝑖 + 𝑤𝑗𝑜

(1)

入力層出力層

隠れ層

𝑦𝑘 = 𝜎 𝑗=1

𝑀

𝑤𝑘𝑗(2)𝑧𝑗 + 𝑤𝑘𝑜

(2)

𝑦𝑘: 𝑡𝑘の予測値

ℎ ∙ : 活性化関数

ロジスティックシグモイド関数やtanh関数が良く使われるが、ディープラーニングの場合、最適化計算の効率が良いReLu関数やMaxOut関数が良く使われる

𝜎 ∙ : 出力層活性化関数

連続値: 恒等関数2クラス: ロジスティックシグモイド関数多クラス判別: ソフトマックス関数

”1隠れ層ニューラルネットワーク”の例

.

𝑤𝑗𝑖(1)

.

.

𝑤kj(2)

.

4ノード

Page 5: NN, CNN, and Image Analysis

ネットワーク訓練 - 誤差関数

𝐸 𝑤 =1

𝑁

𝑛=1

𝑁

𝑦𝑛 − 𝑡𝑛2

𝑦𝑛 = 𝑦 𝑥𝑛, 𝑤

𝑥𝑛 = 𝑥𝑖 𝑛 すべての𝑖

𝑤 = 𝑤𝑗𝑖(1), 𝑤𝑘𝑗

(2)すべての𝑖, 𝑗, 𝑘

𝑖 = 1,2,⋯ , 𝐷. 𝑗 = 1,2,⋯ ,𝑀. 𝑘 = 1,2,⋯ , 𝐾.

𝐸 𝑤 = −𝑛=1

𝑁

𝑡𝑛𝑙𝑛(𝑦𝑛) + 1 − 𝑡𝑛 𝑙𝑛(1 − 𝑦𝑛)

連続値

2乗和誤差関数

2クラス判別

交差エントロピー誤差関数/Cross-entropy error function

多クラス判別

交差エントロピー誤差関数/Cross-entropy error function

𝐸 𝑤 = −𝑛=1

𝑁

𝑘=1

𝐾

𝑡𝑛𝑘𝑙𝑛(𝑦𝑛𝑘)

誤差関数(𝐸(∙))を最小にする重みパラメータ(𝑤)を推定する

(次ページ参照)

5

Page 6: NN, CNN, and Image Analysis

正規化指数関数/ソフトマックス関数

正規化指数関数/ソフトマックス関数

𝐸 𝑤 = −𝑛=1

𝑁

𝑘=1

𝐾

𝑡𝑛𝑘𝑙𝑛(𝑦𝑛𝑘)

ロジスティックシグモイド関数の多クラスへの一般化

𝑝 𝐶𝑘|𝑥 =exp 𝑤𝑘

′𝑥

exp 𝑤1′𝑥 + exp 𝑤2

′𝑥 +⋯+ exp 𝑤𝐾′𝑥

𝑝 𝐶𝑘|𝑥 : オブザベーション𝑥が与えられたときのクラスk (𝐶𝑘)に分類される確率

尤度

𝑝 𝑇|𝑤1, 𝑤2, ⋯ , 𝑤𝐾 =ෑ𝑛=1

𝑁

ෑ𝑘=1

𝐾

𝑝 𝐶𝑘|𝑥𝑛𝑡𝑛𝑘

=ෑ𝑛=1

𝑁

ෑ𝑘=1

𝐾

𝑦𝑛𝑘𝑡𝑛𝑘

𝑇 = 𝑡𝑛𝑘 N×Kの行列

σ𝑘 𝑡𝑛𝑘 = 1

n = 1,2,⋯ , 𝑁. 𝑘 = 1,2,⋯ , 𝐾.

誤差関数(尤度の負の対数)

6

Page 7: NN, CNN, and Image Analysis

ネットワーク訓練 - 勾配情報を用いたアプローチ (1)

𝐸(𝑤)

𝑤𝒘解

• 𝐸 𝑤 is min

• 𝛻𝐸 𝑤 = 0

𝛻𝐸 𝑤 : 勾配(誤差関数の変化率が最大となる方向)

ニューラルネットワークの誤差関数(𝐸(∙))は強い非線型。𝛻𝐸(𝑤) ≅ 0となる𝑤が多数存在する

𝐸 𝑤 is minではないが𝛻𝐸 𝑤 = 0となる

局所解が存在するため、初期値を変えて何度か最適計算を実行し、𝒘解を計算する必要がある

誤差関数(𝐸(∙))を最小にする重みパラメータ(𝑤)を推定する

7

Page 8: NN, CNN, and Image Analysis

ネットワーク訓練 - 勾配情報を用いたアプローチ (2)

𝐸(𝑤)

𝑤𝑤(0)

重みパラメータ(𝑤)を勾配情報(𝛻𝐸 𝑤 )と学習率(η )に従って繰り返し更新する

𝑤(0) ---> 𝑤(𝑡) -> 𝑤(𝑡+1) ---> 𝑤解

𝑤(𝑡) 𝑤(𝑡+1)->- - ->

𝛻𝐸 𝑤(𝑡) : 勾配(誤差関数の変化率が最大となる方向)

𝑤(𝑡+1) = 𝑤(𝑡) − η𝛻𝐸 𝑤(𝑡)

学習率/Learning Ratio

8

Page 9: NN, CNN, and Image Analysis

ネットワーク訓練 - 勾配情報を用いたアプローチ (3)

𝐸 𝑤 =

𝑛=1

𝑁

𝐸𝑛 𝑤

各更新において、毎回すべてのデータを使用

各更新において、データの部分集合を使用

各更新において、一つのデータのみを使用

𝐸 𝑤(𝑡) =

𝑛=1

𝑁

𝐸𝑛(𝑤(𝑡))

𝐸 𝑤(𝑡) =

𝑛=𝑙

𝑙+𝑏

𝐸𝑛(𝑤(𝑡))

𝑏 : バッチサイズ

𝐸 𝑤(𝑡) =

𝑛=𝑙

𝑙+1

𝐸𝑛(𝑤(𝑡))

バッチ訓練

ミニバッチ訓練

オンライン訓練

更新における誤差関数の計算(データ使用量)に関して

勾配降下法, 最急降下法, 共役勾配法,

準ニュートン法

逐次的勾配降下法, 確率的勾配降下法

精度が悪い

PRML参照9

Page 10: NN, CNN, and Image Analysis

ネットワーク訓練 - 誤差逆伝播/Backpropagation

𝛻𝐸 𝑤 を求める方法

𝑥𝐷

𝑥1

𝑥0

𝑧0

𝑧1

𝑧𝑀

𝑦1

𝑦𝐾.𝑥𝑖.

.

.𝑦𝑘.

入力層出力層

隠れ層

𝑤𝑗𝑖(1)

𝑤kj(2)

𝑡1

𝑡𝐾.𝑡𝑘.𝛿𝑘

誤差より計算

𝑧𝑗.・

𝛿𝑗

ⅆ𝐸

ⅆ𝑤𝑗𝑖(1)

= 𝛿𝑗𝑥𝑖ⅆ𝐸

ⅆ𝑤𝑘𝑗(2)

= 𝛿𝑘𝑍𝑗

𝛿𝑗 = 𝑧𝑗′

𝑘=1

𝐾

𝑤𝑘𝑗𝛿𝑘

𝛿𝑘 , 𝛿𝑗 : 誤差と呼ばれる

① 𝛿𝑘 を計算 ② 𝛿𝑗 を計算 ③ⅆ𝐸

ⅆ𝑤𝑘𝑗(2) と

ⅆ𝐸

ⅆ𝑤𝑗𝑖(1) を計算

実測値

10

𝑧𝑗は直前の層の出力の活性化

関数を通した出力. 微分(𝑧𝑗

′)計算の効率の良い関

数を選ぶ必要がある

Page 11: NN, CNN, and Image Analysis

過学習を防ぐ

過学習の制御方法

ユニット数(M)の数を調整(= 重みパラメータ(𝒘)の数を調整)

⇒ 複数のMを試し、検証用データの誤差が最小になるものを採用

正則化

⇒ 誤差関数を以下のように定義する。

𝐸 𝑤 +λ

2𝑤′𝑤 , λ: 正則化係数

早期終了

⇒ 検証用データの誤差が最小になる時点の重みパラメータ(𝑤)を採用

11

Page 12: NN, CNN, and Image Analysis

第二部

CNNConvolutional Neural Network

12

Page 13: NN, CNN, and Image Analysis

画像データ

13

カラー画像

100

100

100

100

3

RGB表現3チャンネル

Red: 8bit, [0, 255]

Green: 8bit, [0, 255]

Blue: 8bit, [0, 255]

濃淡(モノクロ)画像

1チャンネル

8bit, [0, 255]

100

100

100

100

Page 14: NN, CNN, and Image Analysis

不変性

14

画像データの判別によくある問題「入力の位置やサイズにかかわらず、同じ出力結果を得たい」

4つのアプローチ:

① 学習データのパターンを人工的に作成し、様々なパターンのデータを増やす

② 接線伝播法(モデルに不変性を持たせる方法)⇒ PRML 5.5.4 参照

③ 入力データが不変性を持つように前処理を行う⇒ パターンを認識し、どの特徴をどう処理するか分からないことが多いのでは?

④ ニューラルネットワーク(NN)の構造に不変性を持たせる⇒ 畳込みニューラルネットワーク(Convolutional NN)

Page 15: NN, CNN, and Image Analysis

ネットワーク図 ”畳込みニューラルネットワーク(CNN)”の例

15

𝑥𝑖𝑗

𝑆

𝑆

入力画像

𝑦𝑘𝑙

𝐾

𝐾𝑦𝑘𝑙𝑦𝑘𝑙𝑦𝑘𝑙

𝐾′

プーリング畳込み𝑧ⅆ𝑓

M

M𝑧ⅆ𝑓𝑧ⅆ𝑓𝑧ⅆ𝑓

𝐾′

.

.

.

.

出力

𝑀×𝑀×𝐾′

畳込み層 プーリング層 全結合層普通の多層NN

• 様々なパターンで入力の特徴抽出を行う

• 1入力に対して𝐾′種のフィルタを掛け合わせ(畳込み)、𝐾′チャネルの特徴マップを作成(N入力の場合、フィルタは𝐾′ × 𝑁種になる)

.

.

• 一部の情報を捨て、不変性を持たせる

• 各𝐾′チャネルの特徴マップにおいて、重要でない情報を削除する

• 少なくとも2回は畳込み層、プーリング層を繰り返す

Page 16: NN, CNN, and Image Analysis

畳込み層

16

入力画像の特定の範囲を集約(特徴抽出)し、特徴マップを作成

𝑥𝑖𝑗

入力がチャネル数1(グレースケール画像)の例

𝑤𝑖′𝑗′ 𝑢𝑘𝑙⊛

𝑆

𝑆

𝐿

𝐿

𝑦𝑘𝑙 = ℎ(𝑢𝑘𝑙)

𝑥𝑖𝑗𝑖, 𝑗 ∈ [0, 𝑆 − 1] × [0, 𝑆 − 1]

𝑢𝑘𝑙 =(𝑝,𝑞)∈𝑃𝑘𝑙

𝑥𝑝𝑞𝑤𝑝−𝑘 𝑞−𝑙 + 𝑏

𝑃𝑘𝑙 = { 𝑘 + 𝑖′, 𝑙 + 𝑗′ |𝑖′ = 0, . . , 𝐿 − 1, 𝑗′ = 0, . . , 𝐿 − 1}

0 ≤ 𝑘 ≤ 𝑆 − (𝐿 − 1)0 ≤ 𝑙 ≤ 𝑆 − (𝐿 − 1)

𝑏:バイアス

𝐾

𝐾 = 𝑆 − (𝐿 − 1)

𝑤𝑖′𝑗′ , 𝑏 が学習で推定される

間隔をあけてスライドする、Strideする方法もある

特徴マップのサイズを入力のサイズから変更しない、Paddingする方法もある

フィルタ 特徴マップ

プーリング層

入力

𝑤𝑖′𝑗′

𝑖′, 𝑗′ ∈ [0, 𝐿 − 1] × [0, 𝐿 − 1]

畳込み式

ℎ ∙ :活性化関数

「入力の(𝑳 × 𝑳)の範囲の情報をフィルタを掛け合わせる(畳込む)ことによりスカラーに集約する」「 (𝑳 × 𝑳)の範囲を順にスライドして行く」

𝑦𝑘𝑙𝐾

例では𝐾′ = 1としているが、通常は𝐾′ > 1𝐾′種のフィルタを畳込み、複数チャネル(𝐾′)の特徴マップを作成

Page 17: NN, CNN, and Image Analysis

畳込み層

17

𝑥𝑖𝑗𝑘𝑤𝑖′𝑗′𝑘′

𝑢𝑘𝑙⊛

𝑆

𝑆

𝐿

𝐿

𝑦𝑘𝑙 = ℎ(𝑢𝑘𝑙)

𝑥𝑖𝑗𝑐𝑖, 𝑗, 𝑐 ∈ [0, 𝑆 − 1] × [0, 𝑆 − 1] × [1, 𝑁]

𝑢𝑘𝑙 =𝑐=1

𝑁

(𝑝,𝑞)∈𝑃𝑘𝑙

𝑥𝑝𝑞𝑐𝑤𝑝−𝑘 𝑞−𝑙 𝑐 + 𝑏𝑐

𝑃𝑘𝑙 = { 𝑘 + 𝑖′, 𝑙 + 𝑗′ |𝑖′ = 0, . . , 𝐿 − 1, 𝑗′ = 0, . . , 𝐿 − 1}

0 ≤ 𝑘 ≤ 𝑆 − (𝐿 − 1)0 ≤ 𝑙 ≤ 𝑆 − (𝐿 − 1)

𝑏𝑐:バイアス

𝐾

𝐾 = 𝑆 − (𝐿 − 1)

フィルタ 特徴マップ

プーリング層

入力

𝑤𝑖′𝑗′𝑐

𝑖′, 𝑗′, 𝑐 ∈ [0, 𝐿 − 1] × [0, 𝐿 − 1] × [1, 𝑁]

畳込み式

ℎ ∙ :活性化関数

𝑦𝑘𝑙𝐾

入力が複数チャネル(RGB画像、プーリング層からの出力)の例

𝑥𝑖𝑗𝑘𝑥𝑖𝑗𝑘𝑥𝑖𝑗𝑐

𝑤𝑖′𝑗′𝑘′

𝑤𝑖′𝑗′𝑘′

𝑤𝑖′𝑗′𝑐

𝑁

𝑁

「入力の(𝑳 × 𝑳)の範囲の情報をフィルタを掛け合わせ(畳込む)、さらにこれをN枚分足し合わせることによりスカラーに集約する」

例では𝐾′ = 1としているが、通常は𝐾′ > 1𝐾′種のフィルタを畳込み、複数チャネル(𝐾′)の特徴マップを作成

Page 18: NN, CNN, and Image Analysis

プーリング層

18

特徴マップの情報を一部捨て、不変性を持たせる

𝑦𝑘𝑙

𝐾

𝐾 = 𝑆 − (𝐿 − 1)

特徴マップ

𝐾 𝑧ⅆ𝑓

𝑀

𝑀

畳込み層(再び畳込み層への入力となる)

or全結合層

プーリング

𝑧ⅆ𝑓 =1

|𝑄ⅆ𝑓|

(𝑘,𝑙)∈𝑄𝑑𝑓

𝑦𝑘𝑙 𝑄ⅆ𝑓 = ⅆ, 𝑓 ⅆ = 2, . . , 𝑓 = 2, . . }:Pooling Window

|𝑄ⅆ𝑓|:Pooling Windowの面積

𝑧ⅆ𝑓 = max(𝑘,𝑙)∈𝑄𝑑𝑓

𝑦𝑘𝑙

𝑀 = ൗ𝐾 𝑃𝑜𝑜𝑙𝑖𝑛𝑔 𝑊𝑖𝑛ⅆ𝑜𝑤の辺の長さ

平均プーリング/Average Pooling

最大プーリング/Max Pooling

「Pooling Windowの中から、代表値を取り出す」

「特徴マップ上を、Pooling Windowを重なりなくスライドさせる」

Page 19: NN, CNN, and Image Analysis

19

畳込み層、プーリング層での処理の例

………

……

100

21

80

20

畳込み プーリング

フィルタリングの範囲 Pooling Window

21×21 スカラー 4×4 スカラー

21×214×4

• フィルタを入力へ畳込む

入力100×100

特徴マップ80×80

• 特徴マップから代表値を取り出す

プーリング後の出力20×20

Page 20: NN, CNN, and Image Analysis

学習精度/効率向上のための方法 (1)

20

過学習の制御 入力画像の正規化

正規化

• CNNにおいては、特徴マップに正規化を実施(明るさをそろえる)してからプーリングする

• 正規化すると精度や学習効率が向上するらしい…。

Dropout

• 全結合層で利用

• パラメータ学習において、毎回ランダムに一定割合の入力層、隠れ層のノードを消す• 消されたノードのパラメータは更新されな

Page 21: NN, CNN, and Image Analysis

学習精度/効率向上のための方法 (2)

21

計算効率の良い活性化関数の選択 確率的勾配降下法の効率向上(パラメータ(𝑤)の推定の効率向上)

Adam

• 今回の更新で使われる勾配(𝛻𝐸𝑛 𝑤(𝑡) )だけでなく、

前の更新で使われた勾配(𝛻𝐸𝑛 𝑤(𝑡−1) 等)も(平均と

分散として)考慮にいれて次のパラメータ(𝑤(𝑡+1))を更新

ReLU 関数

𝑧 = max(0, 𝑥)

• 微分計算が容易(0 or 1)• 0の場合、パラメータは更新されない

• 深いネットワークにも強い

𝑧

𝑥

Page 22: NN, CNN, and Image Analysis

CNNにおけるハイパーパラメータ

22

モデル• 隠れ層の数• ユニット数• 活性化関数• フィルタ数、サイズ• プーリング関数• Pooling Windowサイズ

訓練(最適化計算)• 学習率/Learning Ratio• バッチサイズ• 訓練回数、epoch数• パラメータ初期値

ランダム探索やグリッド探索を行い、最適なハイパーパラメータの組み合わせを推測する

Page 23: NN, CNN, and Image Analysis

Chainer実装例

23

class CNN1(Chain):def __init__(self):

super(CNN1, self).__init__(conv1 = L.Convolution2D(1, 10, 21), # 畳込みにおける(入力のチャネル数, フィルタの枚数, フィルタのサイズ)conv2 = L.Convolution2D(10, 15, 21),l1 = L.Linear(1500, 100), # 全結合層における(入力数, 隠れ層の数)l2 = L.Linear(100, 2), # 全結合層における(隠れ層の数, 出力数)

)

def __call__(self, x):h = F.max_pooling_2d( F.relu( F.local_response_normalization(self.conv1(x)) ), (2,2), stride=2) # F.max_pooling_2d( 畳込み層からの入力, Pooling Windowサイズ )h = F.max_pooling_2d( F.relu( F.local_response_normalization(self.conv2(h)) ), (2,2), stride=2) # F.local_response_normalization : 正規化h = F.dropout( F.relu(self.l1(h)), train=True ) # F.dropout : Dropouty = F.softmax(self.l2(h))return y

100

入力画像

プーリング畳込み

.

.

.

.

出力

.

.

10

⊛100

21

21

10

80

80

10

40

40

10×15

⊛21

畳込み

21

15

20

20

プーリング

15

10

10

フィルタ フィルタ

10×10×15=1500

100

2

特徴マップ特徴マップ

Page 24: NN, CNN, and Image Analysis

参考文献

24

Page 25: NN, CNN, and Image Analysis

25

Chainerマニュアルhttp://docs.chainer.org/en/stable/#