SPARSE CODINGをなるべく数式を使わず理解する
(PCAやICAとの関係)
Teppei Kurita
背景
• 10年前に画像処理界隈で流行っていたSparse Codingを改めて振り返ってみる
• 結局なんだったんだっけ?
• 数式をなるべく使わない
• 何か気づきがあるかも
https://towardsdatascience.com/cyber-security-sparse-coding-and-anomaly-detection-1b0508d041c8
https://www.sciencedirect.com/topics/engineering/sparse-coding
Sparse Codingのイメージ(ノイズ除去等によく使われていた)
SPARSE CODINGの目的
• 可能な限り少ない基底の線形和で信号を復元すること
• 教師なし学習(教師ありも可能)
• 応用例
• ノイズ除去
• 圧縮センシング
=
基底(Dictionary)
×
観測された信号
係数
少しの要素しか値を持たない
他の要素は0
(これを係数がスパースであると言う)
SPARSE CODINGのご利益
• データを効率的に再現できる
• 効率的な表現を活用して、ノイズ等の外れ値を除去することができる(ノイズ除去)
• 主成分分析(PCA)を使うよりも、色々な確率分布に対応できる
ENCODINGとDECODINGからなり、それぞれ問題設定がある
• Encoding
• 観測データ群の中にある統計的な独立性(=スパース性)を最大化する近似的に無相関な過完備基底(=
オーバーコンプリート辞書)の作成を目指す(独立成分分析の特殊なケース)
• Decoding
• 作成された過完備基底を用いて、ある観測データを再構成する
Auto Encoder型のNNと非常に似ている!
…けど基底のところがよくわからない
…
Encoding Decoding
Overcomplete Dictionary
Input output
(inputの再構成)
データを表現する基底について数式を使わずに考える
• 2次元の超シンプルなデータの確率分布を考える
データの確率分布
データの基底を探すときはまずは主成分分析 (PCA)
• PCAはデータが無相関となる直交基底を探す
• 結果としてデータのばらつきをうまく表現する基底(=主成分)が得られる
直交基底(第1主成分)
直交基底(第2主成分)
PCAの問題点:データがこんな分布だったらどうか?
• 異なる分布を重ねて少しデータの確率分布を複雑化してみる
• 2つの異なるオブジェクトの画像とかは超雑に言うとこんな感じ
PCAで算出した主成分
• PCAはあくまでデータ全体に対して主成分を求める
• 各基底が、うまくデータの特性を表わしているとは言えない
直交基底(第1主成分)
直交基底(第2主成分)
このように、PCAでは分布をうまく表現できない場合がある
これはPCAはデータ全体を正規分布だと仮定しているから
この場合正規分布を仮定しないICAを使うことで対応できる
PCA (主成分分析)とICA (独立成分分析)
詳解 独立成分分析
アーポ ビバリネン (著)
詳しいことはこの本に
(高いけどとても良書)
PCAそれぞれ
N次元
観測データ
N
それぞれ
N次元
観測データ
N
ICA
N次元直交基底
N次元基底
それぞれ直交
発生確率
それぞれ独立
PCA(主成分分析)は観測データの無相関性を保証する直交基底を作成する
ICA(独立成分分析)は観測データの無相関性を保証し統計的に独立である基底を作成する
再度、PCAで算出した主成分
• 各基底が、うまくデータの特性を表わしているとは言えない
直交基底(第1主成分)
直交基底(第2主成分)
独立成分分析 (ICA)
• ICAは統計的に独立な成分に分解する基底を探す
• これがEncoding Phase
第1独立基底
第2独立基底
統計的に独立な成分に分解する基底?日本語で
• つまり、データを表現する時の各基底の使用程度が最も少ないように(効率的になるように)基底を決める
• 例えば下の図では、あるサンプルデータ1を基底で表現するとき、第1独立基底を使えば(第2独立基底を使わなくて
も)ほぼデータを表現していると言っていい
あるサンプルデータ1
第1独立基底
第2独立基底
統計的に独立な成分に分解する基底?日本語で
• サンプルデータ2は第2独立基底を使えばほぼデータを表現している
サンプルデータ2
第1独立基底
第2独立基底
統計的に独立な成分に分解する基底?日本語で
• サンプルデータ3は確率的に低くしか発生しないデータ、このようなデータでは両方の基底が使われることがある
• だがコストが高くなる(再構成時に正しく復元されないことがある=ノイズの場合は除去されることがある)
第1独立基底
第2独立基底 サンプルデータ3
独立な成分がデータの次元よりも多かったら?
• 独立な成分がデータの次元(2次元)よりも多かったら?
データの確率分布
過完備な基底を仮定すれば良い
• これがSparse Coding (OvercompleteなICA)
第1独立基底
第2独立基底
第3独立基底
第4独立基底
第1独立基底
第2独立基底
第3独立基底
第4独立基底
過完備な基底を使い、あるデータを表現するには?
サンプルデータ
第1独立基底
第2独立基底
第3独立基底
第4独立基底
相関の高い基底から選択して表現していけばよい
• これをMatching Pursuit法と呼ぶ
• Encoding/Decoding Phaseで使用される
内積最大
第1独立基底
第2独立基底
第3独立基底
第4独立基底
相関の高い基底から選択して表現していけばよい
• これをMatching Pursuit法と呼ぶ
• Encoding/Decoding Phaseで使用される
内積最大
その成分だけ減算する
第1独立基底
第2独立基底
第3独立基底
第4独立基底
相関の高い基底から選択して表現していけばよい
• これをMatching Pursuit法と呼ぶ
• Encoding/Decoding Phaseで使用される
内積最大
学習された辞書の例
https://xcorr.net/2011/06/15/the-far-reaching-influence-of-sparse-coding-in-v1/ http://charles.cadieu.us/?p=184
まとめ
• Sparse Codingの考え方について、なるべく数式を使わず説明した
• 対象のデータを表現する統計的な独立した成分を、過完備な基底として算出する
• その基底を用いて新しい観測を再現することで、ノイズなどの統計的な外れ値の成分が除外されたデータが生成できる
• 次ページ以降は少し数式を使っておさらい
SPARSE CODING(ノイズ除去タスク、数式あり)
min
𝐃𝐃∈𝐶𝐶,𝐀𝐀
�
𝑖𝑖=1
𝑛𝑛
𝛂𝛂𝑖𝑖 𝑝𝑝 𝑠𝑠. 𝑡𝑡. 𝐲𝐲𝑖𝑖 − 𝐃𝐃𝛂𝛂𝑖𝑖 2
2
≤ 𝜀𝜀
1α 2α nα
min
𝛂𝛂𝑖𝑖∈ℜ𝑘𝑘
𝛂𝛂𝑖𝑖 𝑝𝑝 𝑠𝑠. 𝑡𝑡. 𝐲𝐲𝑖𝑖 − 𝐃𝐃𝛂𝛂𝑖𝑖 2
2
≤ 𝜀𝜀
基底k
最適化式
最適化式
学習(ノイズ)
パッチ𝐲𝐲𝑖𝑖
再構成パッチ𝐃𝐃𝛂𝛂𝑖𝑖
𝐶𝐶:ℜ 𝑚𝑚×𝑘𝑘
𝑛𝑛:画像全体のパッチ数(通常画素数と同じ)
𝑘𝑘:基底の数(通常400程度)
𝑚𝑚:パッチ(基底)内の画素数(通常8×8=64程度)
𝐃𝐃:基底の集合(基底数𝑘𝑘×基底の画素数𝑚𝑚)
𝐀𝐀=[𝛂𝛂1, … , 𝛂𝛂𝑛𝑛]はℜ𝑘𝑘×𝑛𝑛の行列
𝐲𝐲𝑖𝑖:ノイズ画像𝐲𝐲の𝑖𝑖番目のパッチ
𝛂𝛂𝑖𝑖:𝐲𝐲𝑖𝑖に使用される基底𝐃𝐃の係数
𝐑𝐑𝑖𝑖:画像中のパッチ𝑖𝑖の正しい場所を示す2値行列(ℜ𝑛𝑛×𝑚𝑚
)
𝜒𝜒𝑚𝑚
2
分布の累積分布関数𝐹𝐹𝑚𝑚を用いて、𝜀𝜀を𝜎𝜎2 𝐹𝐹𝑚𝑚
−1
(𝜏𝜏)として選択する(通常𝜏𝜏=0.9)
(𝜎𝜎:ノイズの標準偏差)
Encoding Phase
Decoding Phase
目的:基底の集合Dを学習パッチの集合𝐲𝐲から作成
目的:係数(基底の重み)𝛂𝛂𝑖𝑖をノイズパッチ𝐲𝐲𝑖𝑖から作成
𝛂𝛂𝑖𝑖のpノルムの合計を最小化
ノイズパッチ𝐲𝐲𝑖𝑖 再構成パッチ𝐃𝐃𝛂𝛂𝑖𝑖𝛂𝛂𝑖𝑖それぞれのpノルムを最小化
パッチ画素n
1. Dを固定し、Matching Pursuit等でαを求める
2. αを固定し、Lasso-LARS等で式を最小化するDを求める
収束するまで繰り返し
Matching Pursuit等でαを求める
※本来はこれに正則化項が入る
MATCHING PURSUIT
直交していない基底A,Bで信号Xを表現したい
x
y
0
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ベクトルA,Bは正規化済みですが、直感的にするために長さは正確に図示していません
MATCHING PURSUIT
信号Xと内積最大の基底を見つける
x
y
0
⃗𝐴𝐴, ⃗𝑋𝑋 =
11 2
2
≈ 7.78
𝐵𝐵, ⃗𝑋𝑋 =
17
5
≈ 7.6
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
MATCHING PURSUIT
内積と基底の積A・<A,X>だけ元の信号Xから減算
x
y
0
⃗𝐴𝐴 � ⃗𝐴𝐴, 𝑋𝑋 = (
11
2
,
11
2
)⃗𝑋𝑋2 = ⃗𝑋𝑋 − ⃗𝐴𝐴 � ⃗𝐴𝐴, ⃗𝑋𝑋 = (
−1
2
,
1
2
)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
MATCHING PURSUIT
減算された信号X2と内積最大の基底を見つける(1回使用された基底は使われない)
x
y
0
𝑋𝑋2 = (
−1
2
,
1
2
)
𝐵𝐵, 𝑋𝑋2 =
1
2 5
≈ 0.22
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
MATCHING PURSUIT
内積と基底の積B・<B,X2>だけ信号X2から減算
x
y
0
𝐵𝐵 � 𝐵𝐵, 𝑋𝑋2 = (
1
10
,
1
5
)𝑋𝑋3 = 𝑋𝑋2 − 𝐵𝐵 � 𝐵𝐵, 𝑋𝑋2 = (
−3
5
,
3
10
)
𝑋𝑋2 = (
−1
2
,
1
2
)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
MATCHING PURSUIT
全ての基底を使用するか、減算結果がある閾値以下になったら終了
x
y
0
𝑋𝑋3 = (
−3
5
,
3
10
)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
MATCHING PURSUIT
再構成のための係数は各ステップでの各基底で計算された内積
x
y
0
𝑠𝑠2 = 𝐵𝐵, 𝑋𝑋2 =
1
2 5
𝑠𝑠1 = ⃗𝐴𝐴, ⃗𝑋𝑋 =
11 2
2
𝑋𝑋𝑛𝑛𝑛𝑛𝑛𝑛 = ⃗𝐴𝐴𝑠𝑠1 + 𝐵𝐵𝑠𝑠2 =
28
5
,
57
10
= (5.6,5.7)
もし直交基底ならば他の直交成分を元の信号から減算しても内積は変化しない。
すなわち直交基底に対してMPを行うことは(打ち切りがなければ)、
直交変換における係数を算出しているのと等価(ただし減算の操作だけ冗長)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
Matching Pursuitの直交版
x
y
0
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
信号Xと内積最大の基底を見つける
x
y
0
⃗𝐴𝐴, ⃗𝑋𝑋 =
11 2
2
≈ 7.78
𝐵𝐵, ⃗𝑋𝑋 =
17
5
≈ 7.6
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
Xとの差が最小になる係数s1を最小二乗法で求める
x
y
0
𝑠𝑠1 = min
𝑠𝑠1
� 𝑋𝑋 − ⃗𝐴𝐴𝑠𝑠1 2
=
11 2
2
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
求めた係数と基底の積A・sだけ元の信号Xから減算
x
y
0
⃗𝐴𝐴 � 𝑠𝑠1 = (
11
2
,
11
2
)
𝑋𝑋2 = 𝑋𝑋 − ⃗𝐴𝐴 � 𝑠𝑠1 = (
−1
2
,
1
2
)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
減算された信号X2と内積最大の基底を見つける(1回使用された基底は使われない)
x
y
0
𝑋𝑋2 = (
−1
2
,
1
2
)
𝐵𝐵, 𝑋𝑋2 =
1
2 5
≈ 0.22
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
ORTHOGONAL MATCHING PURSUIT
原信号Xとの差が最小になる今まで見つかった基底の係数s1,s2を最小二乗法で求める
x
y
0
(𝑠𝑠1, 𝑠𝑠2) = min
𝑠𝑠1,𝑠𝑠2
� 𝑋𝑋 − ⃗𝐴𝐴𝑠𝑠1 + 𝐵𝐵𝑠𝑠2 2
= (5.66,2.23)
𝑠𝑠1 = 5.66
𝑠𝑠2 = 2.23
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
新たに求まった係数と基底の積As1+Bs2を元の信号Xから減算
x
y
0
⃗𝐴𝐴 � 𝑠𝑠1 + 𝐵𝐵 � 𝑠𝑠2 = (5.6)
𝑋𝑋3 = 𝑋𝑋 − ⃗𝐴𝐴 � 𝑠𝑠1 + 𝐵𝐵 � 𝑠𝑠2 = (0,0)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)
ORTHOGONAL MATCHING PURSUIT
全ての基底を使用するか、減算結果がある閾値以下になったら終了
x
y
0
𝑋𝑋3 = (0,0)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
ORTHOGONAL MATCHING PURSUIT
再構成のための係数は最後に最小二乗法で更新されたもの
x
y
0
𝑠𝑠2 = 2.23
𝑠𝑠1 = 5.56
𝑋𝑋𝑛𝑛𝑛𝑛𝑛𝑛 = ⃗𝐴𝐴𝑠𝑠1 + 𝐵𝐵𝑠𝑠2 = (5,6)
信号の次元数と同等以上の
基底数を使えば(打ち切りがなければ)必ず原信号に一致可能
(同次元数の更新において通常の連立方程式となるため)
𝐵𝐵 = (
1
5
,
2
5
) ⃗𝐴𝐴 = (
1
2
,
1
2
)
𝑋𝑋 = (5,6)

Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)