keimoriyama / archive-paper_management

0 stars 0 forks source link

Self-supervised Knowledge Distillation Using Singular Value Decomposition #12

Open keimoriyama opened 2 years ago

keimoriyama commented 2 years ago

Self-supervised Knowledge Distillation Using Singular Value Decomposition

Self-supervised Knowledge Distillation Using Singular Value Decomposition

背景:なぜその問題を解決したいのか

既存の教師-生徒の蒸留手法は教師モデルの知識を十分に蒸留できていないという課題がある

目的:どういう問題を解決したのか

既存の知識蒸留は以下のような課題を抱えている

  1. 教師モデルから十分に情報を上流できていない
  2. ネットワークの構造に制限がある
  3. 生徒モデルの重みの初期化に使っても,学習が進むと効果がなくなっていってしまう

なので,新しい蒸留の手法を提案した

提案:解決に向けたキーアイデアは何か

手法の肝は以下

  1. 少ないメモリ,計算コスト
  2. 自己蒸留を加えることで,教師から伝えられる知識を消さないようにする

提案手法

蒸留する時に,FFM(front-end feature map)と(back-end feture map)の2つの特徴マップを計算する手法を元にしている

この手法は特徴マップの計算をする時に,計算コストが高くなるという課題がある

なので,特異値分解(SVD)を用いて計算コストを下げる手法を提案している

Screen Shot 2022-05-26 at 11 18 29

前処理(trancated SVD)

特徴マップを作るために特異値分解をして,行列の特徴を抽出する

行列$M$を特異値分解すると,$M = U\Sigma V^T$になる,この時の行列$\Sigma$と$V$を使って中間表現を前処理する

これは勾配の更新式

Screen Shot 2022-05-26 at 11 30 02

特異値分解についてメモ

大きさが$H\times W \times D$の行列$M$を特異値分解すると,$M = U\Sigma V^T$という風になる.

ここで,$U$は行列$M$の局所的なパターン(特徴),$V$は全体的な特徴を表す行列になる.

後処理

SVDを適用したものをそのまま用いると,以下のような課題が生じる

  1. 同じような特異値を持ったベクトルが生じる
  2. 同じような情報を持っているが,全然違う方向をもつベクトルが混じる

なので,教師モデルの出力を基準にした後処理を追加する

最初に特異値$\Sigma$を正規化する.(正規化した$\Sigma$を$\Sigma_T$とする)

式4に従って,行列$V$の各ベクトル$v_{T,i}$を正規化して,教師の出力とする(式3)

Screen Shot 2022-05-26 at 11 38 18

生徒側の後処理も同じような感じにやるが,行列$V$の要素を教師の特異値の値に従いソートしてから上の処理を適用する

後処理の全体像は以下

Screen Shot 2022-05-26 at 11 40 15

処理した後の行列の相関関係を計算する

$f{m,l}^{FFM}$はある畳み込み層に入れる前の行列に対して,上の前処理と後処理を適用した行列の要素ベクトル(Front-end Feature Map),$f{n,l}^{BFM}$は畳み込みを適用した後の行列に対して,処理を適用した行列の要素ベクトル(Back-end Feature Map)

Screen Shot 2022-05-26 at 11 43 05

蒸留スキーム

教師と生徒のレイヤーに対してDFVを計算して,それらを近づけるように学習する

Screen Shot 2022-05-26 at 11 46 12

これに加えて,自己蒸留も追加して生徒モデルに対する全体の損失とする

自己蒸留を追加することで,出力レイヤーに対する蒸留結果をきちんと浅い層に届ける狙いがある

Screen Shot 2022-05-26 at 11 47 11

学習テクニック

勾配のバランスを取るために,DFVの蒸留の部分に対して勾配クリッピングを行う

結果:結局問題は解決されたのか.新しくわかったことは?

実験は3つ,仕様データセットはCIFAR-100

  1. 提案手法(自己蒸留なしver)の有効性の検証
  2. 提案手法(自己蒸留あり)の有効性の検証
  3. 蒸留する中間層(DFVの計算をするレイヤー)の数を変えた時のパフォーマンスの比較

提案手法(自己蒸留なしver)の有効性の検証

[10]は#11 の手法

どのモデルでも,既存手法よりもいい精度を達成している

Screen Shot 2022-05-26 at 11 51 33

提案手法(自己蒸留あり)の有効性の検証

自己蒸留は有効でした.学習に必要な時間(エポック数)も削減できた

Screen Shot 2022-05-26 at 11 53 08

蒸留する中間層(DFVの計算をするレイヤー)の数を変えた時のパフォーマンスの比較

層を増やしすぎるとパフォーマンスは悪くなるから,適切に設定する必要がある

Screen Shot 2022-05-26 at 11 56 37