パターン認識第9章 学習ベクトル量子化
TRANSCRIPT
学習ベクトルの量子化
東京大学 三好雄也
1
はじめに
かなり参考にさせて頂きました http://www.slideshare.net/sleipnir002/08-09-k-lvq
問題があれば削除します
2
量子化とは
量子化(Quantization)
ある連続量を、データ量削減のために、最も近い不連続値(代表ベクトル、セントロイド)に置き換える(近似、情報圧縮)すること。(精度は落ちます。)
画像圧縮に用いられたりするようです。
3
学習ベクトルの量子化のイメージ 1
入力データを代表ベクトルによって分割近似するという点ではk-meansと目的を同じくする。
入力データに近い代表ベクトルによって判別を行う点ではk-近傍法と関連がある。
何はともあれ、代表ベクトルをいかに配置するかが鍵
入力データとラベル 代表ベクトルによる
入力空間の分割
4
学習ベクトルの量子化のイメージ 2
入力データに近い代表ベクトルによって判別を行う点ではk-
近傍法と関連がある。
入力データとラベル
代表ベクトルによる
入力空間の分割
5
学習ベクトルの量子化の学習プロセス
代表データの初期値の決定プロセス
1. 学習データをk-近傍法によって判別
2. 判別の誤りのないデータからランダムで選ぶ
学習プロセス
1. 時刻tにおいて1つのデータ(テスト点)を選択
2. 代表ベクトルの更新
時刻tで選ばれたデータ (x(t),y(t)) x:特徴量、y:ラベル
時刻tにおける代表データ 𝑚1(t) 代表データのラベル 𝑙𝑖(t), i=1,2,…k
6
学習アルゴリズム
学習アルゴリズムとしては以下のものがある
1. LVQ1
2. LVQ2.1
3. LVQ3
4. OLVQ1(Optimized-learning rate LVQ1)
7
LVQ1 -1
テスト点(x(t),y(t))が入力される
テスト点から最も近い代表ベクトルを c とする
c = 𝑎𝑟𝑔𝑚𝑖𝑛𝑖 𝑥 − 𝑚𝑖
このとき
y(t)= 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t) + α(t)(x(t)- 𝑚𝑐(t))
y(t)≠ 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t)-α(t)(x(t)- 𝑚𝑐(t))
ただし、 0 < α(t) < 1
i ≠ c → 𝑚𝑖(t+1) = 𝑚𝑖(t)
8
LVQ1 -2
y(t)= 𝑙𝑐(t) → 𝑚𝑖(t)をx(t)に近づける
y(t)≠ 𝑙𝑐(t) → 𝑚𝑖(t)をx(t)から遠ざける
9
LVQ2.1 -1
LVQ1は1つの代表ベクトルしか更新しなかったが、2つの代表ベクトルに対して更新を行うアルゴリズムがLVQ2.1
更新の対象
ラベルが違うがテスト点から最も近い代表ベクトル 𝑚𝑖(t)
ラベルが同じでテスト点から最も近い代表ベクトル 𝑚𝑗(t)
10
LVQ2.1 -2
𝑑𝑖 𝑑𝑗
𝑚𝑗 𝑚𝑖
s = 1−𝑤
1+𝑤 とし、min(
𝑑𝑖
𝑑𝑗 ,
𝑑𝑗
𝑑𝑖 ) > s なら、以下の更新を行う
𝑚𝑖(t+1) = 𝑚𝑖(t)-α(t)(x(t)- 𝑚𝑖(t)) → 遠ざける
𝑚𝑗(t+1) = 𝑚𝑗(t) + α(t)(x(t)- 𝑚𝑗(t)) → 近づける
左図の場合、𝑑𝑗
𝑑𝑖 > s =
1−𝑤
1+𝑤 となる
min( 𝑑𝑖
𝑑𝑗 ,
𝑑𝑗
𝑑𝑖 )≦1であり、 𝑑𝑗と𝑑𝑗が近
いほど、更新が行われやすくなる。
11
LVQ3
LVQ1とLVQ2.1を融合したようなもの
テスト点から近い2つ代表ベクトルを順に𝑚𝑖(t), 𝑚𝑗(t)とし、以
下のどちらかの条件を満たした場合に更新を行う。
1. li(t) , lj(t)がともにy(t)と同じ
𝑚ℎ(t+1)= 𝑚ℎ(t)+εα(t)(x(t)-𝑚ℎ(t)) ,h=i,j →近づける
2. li(t)≠y(t), lj(t)=y(t)、かつLVQ2.1と同じ条件(テスト点が窓
に入る)の場合
𝑚𝑖(t+1) = 𝑚𝑖(t)-α(t)(x(t)- 𝑚𝑖(t)) → 遠ざける
𝑚𝑗(t+1) = 𝑚𝑗(t) + α(t)(x(t)- 𝑚𝑗(t)) → 近づける
12
OLVQ1 -1
LVQ1における α(t) の最適化 → 学習の収束特性の改善
y(t)とli(t)との関係を示す変数を導入する
y(t)= 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t) + α(t)(x(t)- 𝑚𝑐(t))
y(t)≠ 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t)-α(t)(x(t)- 𝑚𝑐(t))
i ≠ c → 𝑚𝑖(t+1) = 𝑚𝑖(t)
⇔ mi(t+1) = mi(t) + 𝑠i(t)αi(t)(x(t)- 𝑚𝑖(t))
+1, i=c かつ y(t) = li(t) 𝑠i(t) = -1, i=c かつ y(t) ≠ li(t) 0, i ≠ c
13
OLVQ1 -2
mi(t+1) = mi(t) + 𝑠i(t)αi(t)(x(t)- 𝑚𝑖(t))
= (1-𝑠i(t)αi(t)) 𝑚𝑖(t) + 𝑠i(t)αi(t)x(t)
さらに展開していくと、
mi(t+1) = (1-𝑠i(t)αi(t))(1-𝑠𝑖(t-1)αi(t-1))𝑚𝑖(t)
+ (1-𝑠i(t)αi(t))𝑠𝑖(t-1)αi(t-1)x(t-1)
+ 𝑠i(t)αi(t) x(t)
𝑠i(t)𝑠i(t-1)=0のとき、 x(t-1) と x(t) の係数の絶対値が等しいとし、さらに、 𝑠i =1, 0< α <1 を考慮すると、最終的に
αi(𝑡) = αi(𝑡−1)
1+si(𝑡)αi(𝑡−1)
14
問題点
1. 初期値依存
2. 学習データによる学習の順番にも結果が依存する
15
学習ベクトル -入力データ in R library(class) ; library(mlbench)
dim <- 2 # 入力空間の次元 ; n <- 300 # 学習データ数
smpl <- mlbench.corners(n, d=dim, sd=0.25)
x <- smpl$x ; y <- smpl$classes
size <- 8 # 代表ベクトルの数 ; k <- 1 # 初期化
cd <- lvqinit(x,y, size=size, k=k) ; cd3 <- lvq3(x,y,cd)
# 学習前後の判別境界
gsize <- 100 # グリッドのサイズ
x1 <- seq(min(x[,1]), max(x[,1]), length=gsize)
x2 <- seq(min(x[,2]), max(x[,2]), length=gsize)
xtest <- as.matrix(expand.grid(x1,x2))
yest <- lvqtest(cd, xtest)
yest3 <- lvqtest(cd3, xtest)
cntr <- matrix(match(yest, levels(factor(yest))), gsize, gsize)
cntr3 <- matrix(match(yest3, levels(factor(yest3))), gsize, gsize)
plot(x, col=y, pch=20+as.numeric(y), xlab="x1", ylab="x2",
main="Initial Codebook")
# 代表ベクトル
points(cd3$x, col=cd3$cl, bg=cd$cl,
pch=20+as.numeric(cd$cl),cex=2) 16
学習ベクトル -学習前と学習後
# 学習前の境界を表示
for(i in 1:max(cntr)) contour(x1, x2, cntr==i,
levels=0.5, lwd=2, lty=1, drawlabels=F, add=TRUE)
# 学習後
plot(x, col=y, pch=20+as.numeric(y), xlab="x1",
ylab="x2", main="LVQ3")
points(cd3$x, col=cd3$cl, bg=cd$cl,
pch=20+as.numeric(cd$cl),cex=2)
for(i in
1:max(cntr3))contour(x1,x2,cntr==i,levels=0.5,l
wd=2,lty=1, drawlabels=F, add=TRUE) 17