びぼーろぐ

備忘録としての勉強のログです。淡々と学んだことをログって行くので、雑な記事が多いです。

Model Compression

https://www.cs.cornell.edu/~caruana/compression.kdd06.pdf
2006/8

正直よくわからなかった(汗) 参考にならないかも...

一言でいうと

モデル圧縮を行って、複雑なアンサンブルモデルを少ない性能劣化で小さく、高速なモデルにする。

この論文のすごいところ

偽のサンプルを生成するMUNGEなる手法を使うと、ensemble selectionよりも数千倍小さくかつ高速になる。 MUNGEは、訓練データのラベルなし疑似データを生成する手法で、あとで教師モデルでラベル付して生徒モデルの学習に利用する。

感想

古い論文だからか、結果を見ると「ほう、疑似データを作って小さいモデルでも過学習とか起こりにくくしつつ、精度高くするのか」と思っただけで、割と普通じゃね?って思ってしまった...
英語の勉強になった。

ざっく理論

モデル圧縮の大本の考え方は、遅くて巨大なものによって学習された関数を高速でコンパクトなモデルで近似すること。ただし、性能は良くなることを目指している。
高速かつコンパクトなモデルは十分な疑似データで学習され、過学習をおこさず、高い性能のまま近似することができる。

  • どうやって疑似データを得る?
    --> 3つの手法(RANDOM, NBE, MUNGE)で作成する。
    疑似データを本物のデータの分布とマッチさせることが重要。最小のサンプル数が適切なターゲット関数をサンプリングするようにする必要がある。

疑似データを作る方法

RANDOM

最も単純な方法。
周辺分布からそれぞれの属性を独立にサンプリングする。

いわゆる特徴が学習データから推測されるパラメータを持つ多項分布から生成される。これは、訓練セットに含まれるすべての属性分布から値を取り出すため、重要ではない領域の属性を取り出してきてしまう可能性がある。

NBE(naive Bayes Estimation)

訓練セットの属性の同時分布を推測し、そこから擬似データを生成する。 うまく同時分布が推測されてれば、条件付き構造は保たれ、重要な属性をカバーすることができる。

同時分布を推測する方法の一つは、混合モデル(混合ガウス分布)を使うこと。 連続値と離散値を両方扱う混合モデルがナイーブベイズ。 ナイーブベイズを使おうと思ったのは、

  • 連続値と離散値両方使えるってこと
  • 使いやすい
  • 同じデータで学習したベイジアンネットワークと同等の性能を持つ
  • 読みやすい

からだそう。

MUNGE

今回考えた手法。 ノンパラメトリックな同時分布の推測値から直接サンプリング。

f:id:taku-buntu:20181229005023p:plain
MUNGEのアルゴリズム
オリジナルの訓練セットから始まって、一旦全部のサンプルを見て、それぞれの近傍データを決定。連続値に対してはユークリッド距離、離散値に対してはハミング距離で近傍かを判断。離散的なe'と最近傍のサンプルeがあったとき、pの確率で、交換される(つまり1-pの確率で変わらない)。
連続値e_aだったら、e_aは平均e _ { a } ^ { \prime }標準偏差sd=|e_a-e _ { a} ^ { \prime }|/s正規分布からランダムに抽出。e _ { a } ^ { \prime }は、平均e_a、分散sd正規分布から抽出。 それぞれの手法で、疑似データを作った結果が下図。
f:id:taku-buntu:20181229013214p:plain
疑似データ

結果

2値分類で有効性をみる f:id:taku-buntu:20181229020414p:plain

MUNGEを使ってデータを増やすと

覚えた単語

synthetic・・・総合的な、偽の
unlike・・・と異なり
attribute・・・属性、特性
adequately・・・的確に
marginal distribution・・・周辺分布
predominately・・・主に
nominal・・・という名目の、名ばかりの(ここでは、"離散的な"的な!意味っぽい) multinominal distribution・・・多項分布
joint distribution・・・同時分布
conditional・・・条件的な、条件付き
preserve・・・保つ
inherent・・・固有の

nomianlがわからなかった...下図のような感じらしい。

https://i.stack.imgur.com/D08t9.jpg

lapis-zero09.hatenablog.com

Distilling the Knowledge in a Neural Network

arxiv.org
2015/3

今回は初のモデル圧縮論文読みということで、詳しめに書きます。

一言で言うと

Knowledge Distillationという蒸留を利用したモデル圧縮

この論文のすごいところ

アンサンブルモデルを(一つの)蒸留モデルに転移させたら、同等のネットワーク構造のもとに比べて、高い精度を達成することができる。

感想

やばい、全然わからんかった(汗)

そもそも蒸留のことそんなに知らなかったので、"3"のデータなくてもソフトターゲットを使うと学習されてく的なのは面白いと思いました。
また、スペシャリストモデルなるものを作って、混同しやすいクラスを見分けるモデルでアンサンブルするのも面白いと思いました。確かに、並列学習させることができる場合、そっちのほうが精度良く、効率よくアンサンブルモデルの素を作ることができると思いました。
混同しやすいクラスはクラスタリングで求めてくんですか、参考になります。

ざっく理論

転移セットとソフトターゲットのlogit(Softmax前の値)でクロスエントロピー $$\frac { \partial C } { \partial z _ { i } } = \frac { 1 } { T } \left( q _ { i } - p _ { i } \right) = \frac { 1 } { T } \left( \frac { e ^ { z _ { i } / T } } { \sum _ { j } e ^ { z _ { j } / T } } - \frac { e ^ { v _ { i } / T } } { \sum _ { j } e ^ { v _ { j } / T } } \right)$$

Tはsoftmaxの温度(強度?)で、この値がlogitよりも大きかったら

$$\frac { \partial C } { \partial z _ { i } } \approx \frac { 1 } { T } \left( \frac { 1 + z _ { i } / T } { N + \sum _ { j } z _ { j } / T } - \frac { 1 + v _ { i } / T } { N + \sum _ { j } v _ { j } / T } \right)$$

が成り立つ。
それぞれのlogitがゼロ平均化(平均が0になるようにベクトルを変換)されると

\sum _ { j } z _ { j } / T \sum _ { j } v _ { j } / T が0になるので

$$\frac { \partial C } { \partial z _ { i } } \approx \frac { 1 } { N T ^ { 2 } } \left( z _ { i } - v _ { i } \right)$$

とできる。 つまりは、
・高い温度Tで設定しておくと 蒸留は個々の転移サンプルがゼロ平均化されてるとき、$$1 / 2 \left( z _ { i } - v _ { i } \right) ^ { 2 }$$を最小化することを目指すことと等価になる。
・低い温度のときは、 平均よりもかなり低いマッチングロジットに対しては注意を払わなくなる。
これらのロジットはcumbersomeモデル(もともとの大きめのモデル)の学習に使われたコスト関数に全く制約を受けないので、とてもノイジー?(いろいろな情報が入ってるってこと?)になりうるとのこと。 どうやら温度Tを高温にすると、出力確率を緩やかにすることができるらしい。 確かに、指数関数は根本付近に近づくと、緩やかになることが想像できる。 一方、負のロジットはcumbersomeモデルから取得された知識について有益な情報を伝える可能性がある

結果

  • MNISTでは教えてもない"3"を他のデータからのsoft targetラベルで学習させると、"3"をまあまあ認識できるようになった。"3"のクラスのバイアスが小さかった。
  • 音響認識では、蒸留モデルが同等のサイズの学習モデルよりも性能が良いことを目指している。
    • それぞれの観測値の状態グランドトゥルースシーケンスを強制的にアライメントすることで得られるネットとラベルで作られる推論値とのクロスエントロピーを局所的に最小化することで、フレームごとの分類ができる。 $$\theta = \arg \max _ { \boldsymbol { \theta } ^ { \prime } } P \left( h _ { t } | \mathbf { s } _ { t } ; \boldsymbol { \theta } ^ { \prime } \right)$$ \theta=時刻tの観測値をs_tマッピングする音響モデルPのパラメータ。h_tが正解のHMMの状態。
    • 10のモデルからアンサンブルしたモデルを作る。アンサンブル方法はそれぞれの推論結果の平均。それぞれのモデルは別々の学習セットで学習させて、多様性をもたせた。アンサンブルモデルは個々のモデルよりめっちゃ性能よくなる。[1, 2, 5, 10]の温度で試し、ハードターゲットの相対重みは0.5とした。
      f:id:taku-buntu:20181228012605p:plain
      フレーム分類精度とWER(単語エラー率)
  • 大きなデータセットスペシャリストモデルをアンサンブルする
    • アンサンブルモデルは学習時間が過剰にかかる
    • ソフトターゲットでスペシャリストモデルの過学習を抑える
    • 混同しやすいクラス("3"と"8"とか)で作ったサブセットで作ったスペシャリストモデルと全てのデータで学習したジェネラリストモデルでアンサンブル
    • スペシャリストモデルのソフトマックスは、考慮しないすべてのクラスをゴミ箱クラスとしてまとめることで非常に小さく抑えることができる
    • 過学習を抑えることと低レベルな特徴検出能力を共有するためにそれぞれのスペシャリストモデルのパラはジェネラリストモデルで初期化
    • 混同しやすいクラスをどうやって決めるのか?-->クラスタリングアルゴリズム。 それをジェネラリストモデルの予測の共分散行列に適用するので、一緒に出力されるクラス[tex:Sm]のセットはスペシャリストモデルmのためのターゲットとして使われる。
    • 2ステップでトップ1のクラス分類を行う。
      • Step 1: それぞれのテストケースで、ジェネラリストモデルに基づいてトップ1のクラスを出力
      • Step 2: 混同しやすいクラスのサブセット(から出ないkのインターセクションとスペシャリストのアクティベートセットA_k)を持つスペシャリストモデルを使う。この式:$$K L \left( \mathbf { p } ^ { g } , \mathbf { q } \right) + \sum _ { m \in A _ { k } } K L \left( \mathbf { p } ^ { m } , \mathbf { q } \right)$$ を最小化する確率分布qを見つける
        f:id:taku-buntu:20181228031718p:plain
        スペシャリストモデルがカバーする正解クラス数が増えると性能が上がっていく
  • 正則化としてのソフトターゲット。
    f:id:taku-buntu:20181228031649p:plain
    ソフトターゲットを使うと少ないデータセットでも過学習を抑えることができる
    スペシャリストモデルの過学習抑制にも使える。

覚えた英語

cumbersome・・・厄介な、めんどうな、扱いにくい
advantageous・・・有利
discrete・・・離散的
take A into account・・・Aを考慮して
alignment・・・位置合わせ
outperform・・・めちゃ性能いい
vary・・・多様にする
indeed・・・たしかに、実際に
asynchronous・・・非同期の
replica・・・レプリカ、複製品
shade・・・次第に変化する
dustbin・・・ゴミ箱
undersampling・・・少数派のデータ件数に合うように多数派データからランダムに抽出する方法
oversampling・・・少数派のデータをもとに不足分のデータを補完すること
derive・・・得る、導出する
derive from・・・由来する