NN, CNN, and Image Analysis
-
Upload
yuki-shimada -
Category
Engineering
-
view
451 -
download
2
Transcript of NN, CNN, and Image Analysis
畳込みNN(CNN)と
画像解析NNの基礎から
1
第一部
NN基礎Neural Network
2
データの表記
𝒙𝟏 𝒙𝟐 … 𝒙𝒊 … 𝒙𝑫
𝑥𝑛𝑖
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
ネットワーク図
・・・
𝑥𝐷
𝑥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ノード
ネットワーク訓練 - 誤差関数
𝐸 𝑤 =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
正規化指数関数/ソフトマックス関数
正規化指数関数/ソフトマックス関数
𝐸 𝑤 = −𝑛=1
𝑁
𝑘=1
𝐾
𝑡𝑛𝑘𝑙𝑛(𝑦𝑛𝑘)
ロジスティックシグモイド関数の多クラスへの一般化
𝑝 𝐶𝑘|𝑥 =exp 𝑤𝑘
′𝑥
exp 𝑤1′𝑥 + exp 𝑤2
′𝑥 +⋯+ exp 𝑤𝐾′𝑥
𝑝 𝐶𝑘|𝑥 : オブザベーション𝑥が与えられたときのクラスk (𝐶𝑘)に分類される確率
尤度
𝑝 𝑇|𝑤1, 𝑤2, ⋯ , 𝑤𝐾 =ෑ𝑛=1
𝑁
ෑ𝑘=1
𝐾
𝑝 𝐶𝑘|𝑥𝑛𝑡𝑛𝑘
=ෑ𝑛=1
𝑁
ෑ𝑘=1
𝐾
𝑦𝑛𝑘𝑡𝑛𝑘
𝑇 = 𝑡𝑛𝑘 N×Kの行列
σ𝑘 𝑡𝑛𝑘 = 1
n = 1,2,⋯ , 𝑁. 𝑘 = 1,2,⋯ , 𝐾.
誤差関数(尤度の負の対数)
6
ネットワーク訓練 - 勾配情報を用いたアプローチ (1)
𝐸(𝑤)
𝑤𝒘解
• 𝐸 𝑤 is min
• 𝛻𝐸 𝑤 = 0
𝛻𝐸 𝑤 : 勾配(誤差関数の変化率が最大となる方向)
ニューラルネットワークの誤差関数(𝐸(∙))は強い非線型。𝛻𝐸(𝑤) ≅ 0となる𝑤が多数存在する
𝐸 𝑤 is minではないが𝛻𝐸 𝑤 = 0となる
局所解が存在するため、初期値を変えて何度か最適計算を実行し、𝒘解を計算する必要がある
誤差関数(𝐸(∙))を最小にする重みパラメータ(𝑤)を推定する
7
ネットワーク訓練 - 勾配情報を用いたアプローチ (2)
𝐸(𝑤)
𝑤𝑤(0)
重みパラメータ(𝑤)を勾配情報(𝛻𝐸 𝑤 )と学習率(η )に従って繰り返し更新する
𝑤(0) ---> 𝑤(𝑡) -> 𝑤(𝑡+1) ---> 𝑤解
𝑤(𝑡) 𝑤(𝑡+1)->- - ->
𝛻𝐸 𝑤(𝑡) : 勾配(誤差関数の変化率が最大となる方向)
𝑤(𝑡+1) = 𝑤(𝑡) − η𝛻𝐸 𝑤(𝑡)
学習率/Learning Ratio
8
ネットワーク訓練 - 勾配情報を用いたアプローチ (3)
𝐸 𝑤 =
𝑛=1
𝑁
𝐸𝑛 𝑤
各更新において、毎回すべてのデータを使用
各更新において、データの部分集合を使用
各更新において、一つのデータのみを使用
𝐸 𝑤(𝑡) =
𝑛=1
𝑁
𝐸𝑛(𝑤(𝑡))
𝐸 𝑤(𝑡) =
𝑛=𝑙
𝑙+𝑏
𝐸𝑛(𝑤(𝑡))
𝑏 : バッチサイズ
𝐸 𝑤(𝑡) =
𝑛=𝑙
𝑙+1
𝐸𝑛(𝑤(𝑡))
バッチ訓練
ミニバッチ訓練
オンライン訓練
更新における誤差関数の計算(データ使用量)に関して
勾配降下法, 最急降下法, 共役勾配法,
準ニュートン法
逐次的勾配降下法, 確率的勾配降下法
精度が悪い
PRML参照9
ネットワーク訓練 - 誤差逆伝播/Backpropagation
𝛻𝐸 𝑤 を求める方法
・
𝑥𝐷
𝑥1
𝑥0
𝑧0
𝑧1
𝑧𝑀
𝑦1
𝑦𝐾.𝑥𝑖.
.
.𝑦𝑘.
入力層出力層
隠れ層
𝑤𝑗𝑖(1)
𝑤kj(2)
𝑡1
𝑡𝐾.𝑡𝑘.𝛿𝑘
誤差より計算
𝑧𝑗.・
𝛿𝑗
ⅆ𝐸
ⅆ𝑤𝑗𝑖(1)
= 𝛿𝑗𝑥𝑖ⅆ𝐸
ⅆ𝑤𝑘𝑗(2)
= 𝛿𝑘𝑍𝑗
𝛿𝑗 = 𝑧𝑗′
𝑘=1
𝐾
𝑤𝑘𝑗𝛿𝑘
𝛿𝑘 , 𝛿𝑗 : 誤差と呼ばれる
① 𝛿𝑘 を計算 ② 𝛿𝑗 を計算 ③ⅆ𝐸
ⅆ𝑤𝑘𝑗(2) と
ⅆ𝐸
ⅆ𝑤𝑗𝑖(1) を計算
実測値
10
𝑧𝑗は直前の層の出力の活性化
関数を通した出力. 微分(𝑧𝑗
′)計算の効率の良い関
数を選ぶ必要がある
過学習を防ぐ
過学習の制御方法
ユニット数(M)の数を調整(= 重みパラメータ(𝒘)の数を調整)
⇒ 複数のMを試し、検証用データの誤差が最小になるものを採用
正則化
⇒ 誤差関数を以下のように定義する。
𝐸 𝑤 +λ
2𝑤′𝑤 , λ: 正則化係数
早期終了
⇒ 検証用データの誤差が最小になる時点の重みパラメータ(𝑤)を採用
11
第二部
CNNConvolutional Neural Network
12
画像データ
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
不変性
14
画像データの判別によくある問題「入力の位置やサイズにかかわらず、同じ出力結果を得たい」
4つのアプローチ:
① 学習データのパターンを人工的に作成し、様々なパターンのデータを増やす
② 接線伝播法(モデルに不変性を持たせる方法)⇒ PRML 5.5.4 参照
③ 入力データが不変性を持つように前処理を行う⇒ パターンを認識し、どの特徴をどう処理するか分からないことが多いのでは?
④ ニューラルネットワーク(NN)の構造に不変性を持たせる⇒ 畳込みニューラルネットワーク(Convolutional NN)
ネットワーク図 ”畳込みニューラルネットワーク(CNN)”の例
15
𝑥𝑖𝑗
𝑆
𝑆
入力画像
𝑦𝑘𝑙
𝐾
𝐾𝑦𝑘𝑙𝑦𝑘𝑙𝑦𝑘𝑙
𝐾′
プーリング畳込み𝑧ⅆ𝑓
M
M𝑧ⅆ𝑓𝑧ⅆ𝑓𝑧ⅆ𝑓
𝐾′
.
.
.
.
出力
𝑀×𝑀×𝐾′
畳込み層 プーリング層 全結合層普通の多層NN
• 様々なパターンで入力の特徴抽出を行う
• 1入力に対して𝐾′種のフィルタを掛け合わせ(畳込み)、𝐾′チャネルの特徴マップを作成(N入力の場合、フィルタは𝐾′ × 𝑁種になる)
.
.
• 一部の情報を捨て、不変性を持たせる
• 各𝐾′チャネルの特徴マップにおいて、重要でない情報を削除する
• 少なくとも2回は畳込み層、プーリング層を繰り返す
畳込み層
16
入力画像の特定の範囲を集約(特徴抽出)し、特徴マップを作成
𝑥𝑖𝑗
入力がチャネル数1(グレースケール画像)の例
𝑤𝑖′𝑗′ 𝑢𝑘𝑙⊛
𝑆
𝑆
𝐿
𝐿
𝑦𝑘𝑙 = ℎ(𝑢𝑘𝑙)
𝑥𝑖𝑗𝑖, 𝑗 ∈ [0, 𝑆 − 1] × [0, 𝑆 − 1]
𝑢𝑘𝑙 =(𝑝,𝑞)∈𝑃𝑘𝑙
𝑥𝑝𝑞𝑤𝑝−𝑘 𝑞−𝑙 + 𝑏
𝑃𝑘𝑙 = { 𝑘 + 𝑖′, 𝑙 + 𝑗′ |𝑖′ = 0, . . , 𝐿 − 1, 𝑗′ = 0, . . , 𝐿 − 1}
0 ≤ 𝑘 ≤ 𝑆 − (𝐿 − 1)0 ≤ 𝑙 ≤ 𝑆 − (𝐿 − 1)
𝑏:バイアス
𝐾
𝐾 = 𝑆 − (𝐿 − 1)
𝑤𝑖′𝑗′ , 𝑏 が学習で推定される
間隔をあけてスライドする、Strideする方法もある
特徴マップのサイズを入力のサイズから変更しない、Paddingする方法もある
フィルタ 特徴マップ
プーリング層
入力
𝑤𝑖′𝑗′
𝑖′, 𝑗′ ∈ [0, 𝐿 − 1] × [0, 𝐿 − 1]
畳込み式
ℎ ∙ :活性化関数
「入力の(𝑳 × 𝑳)の範囲の情報をフィルタを掛け合わせる(畳込む)ことによりスカラーに集約する」「 (𝑳 × 𝑳)の範囲を順にスライドして行く」
𝑦𝑘𝑙𝐾
例では𝐾′ = 1としているが、通常は𝐾′ > 1𝐾′種のフィルタを畳込み、複数チャネル(𝐾′)の特徴マップを作成
畳込み層
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𝐾′種のフィルタを畳込み、複数チャネル(𝐾′)の特徴マップを作成
プーリング層
18
特徴マップの情報を一部捨て、不変性を持たせる
𝑦𝑘𝑙
𝐾
𝐾 = 𝑆 − (𝐿 − 1)
特徴マップ
𝐾 𝑧ⅆ𝑓
𝑀
𝑀
畳込み層(再び畳込み層への入力となる)
or全結合層
プーリング
𝑧ⅆ𝑓 =1
|𝑄ⅆ𝑓|
(𝑘,𝑙)∈𝑄𝑑𝑓
𝑦𝑘𝑙 𝑄ⅆ𝑓 = ⅆ, 𝑓 ⅆ = 2, . . , 𝑓 = 2, . . }:Pooling Window
|𝑄ⅆ𝑓|:Pooling Windowの面積
𝑧ⅆ𝑓 = max(𝑘,𝑙)∈𝑄𝑑𝑓
𝑦𝑘𝑙
𝑀 = ൗ𝐾 𝑃𝑜𝑜𝑙𝑖𝑛𝑔 𝑊𝑖𝑛ⅆ𝑜𝑤の辺の長さ
平均プーリング/Average Pooling
最大プーリング/Max Pooling
「Pooling Windowの中から、代表値を取り出す」
「特徴マップ上を、Pooling Windowを重なりなくスライドさせる」
例
19
畳込み層、プーリング層での処理の例
………
……
…
100
21
80
20
畳込み プーリング
フィルタリングの範囲 Pooling Window
21×21 スカラー 4×4 スカラー
21×214×4
• フィルタを入力へ畳込む
入力100×100
特徴マップ80×80
• 特徴マップから代表値を取り出す
プーリング後の出力20×20
学習精度/効率向上のための方法 (1)
20
過学習の制御 入力画像の正規化
正規化
• CNNにおいては、特徴マップに正規化を実施(明るさをそろえる)してからプーリングする
• 正規化すると精度や学習効率が向上するらしい…。
Dropout
• 全結合層で利用
• パラメータ学習において、毎回ランダムに一定割合の入力層、隠れ層のノードを消す• 消されたノードのパラメータは更新されな
い
学習精度/効率向上のための方法 (2)
21
計算効率の良い活性化関数の選択 確率的勾配降下法の効率向上(パラメータ(𝑤)の推定の効率向上)
Adam
• 今回の更新で使われる勾配(𝛻𝐸𝑛 𝑤(𝑡) )だけでなく、
前の更新で使われた勾配(𝛻𝐸𝑛 𝑤(𝑡−1) 等)も(平均と
分散として)考慮にいれて次のパラメータ(𝑤(𝑡+1))を更新
ReLU 関数
𝑧 = max(0, 𝑥)
• 微分計算が容易(0 or 1)• 0の場合、パラメータは更新されない
• 深いネットワークにも強い
𝑧
𝑥
CNNにおけるハイパーパラメータ
22
モデル• 隠れ層の数• ユニット数• 活性化関数• フィルタ数、サイズ• プーリング関数• Pooling Windowサイズ
訓練(最適化計算)• 学習率/Learning Ratio• バッチサイズ• 訓練回数、epoch数• パラメータ初期値
ランダム探索やグリッド探索を行い、最適なハイパーパラメータの組み合わせを推測する
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
特徴マップ特徴マップ
参考文献
24