Skip to main content
学習ベクトルの量子化

        東京大学 三好雄也



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
           1−𝑤              𝑑𝑖 𝑑 𝑗
    s   =       とし、min(       ,     ) > s なら、以下の更新を行う
           1+𝑤              𝑑 𝑗 𝑑𝑖

            𝑚 𝑖 (t+1) = 𝑚 𝑖 (t)-α(t)(x(t)- 𝑚 𝑖 (t)) → 遠ざける
            𝑚 𝑗 (t+1) = 𝑚 𝑗 (t) + α(t)(x(t)- 𝑚 𝑗 (t)) → 近づける

                                                           𝑑𝑗         1−𝑤
                                     左図の場合、                     >s=         となる
                  𝑑𝑗                                       𝑑𝑖         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)との関係を示す変数を導入する

                           +1, i=c かつ y(t) = li (t)
                𝑠i (t) =   -1, i=c かつ y(t) ≠ li (t)
                            0, i ≠ c

         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))

    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(𝑡−1)
                       αi (𝑡) =
                                  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,      plot(x, col=y, pch=20+as.numeric(y), xlab="x1",
levels=0.5, lwd=2, lty=1, drawlabels=F, add=TRUE)   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
 17                                                 wd=2,lty=1, drawlabels=F, add=TRUE)