Open keimoriyama opened 2 years ago
author
link
Self-supervised Knowledge Distillation Using Singular Value Decomposition
既存の教師-生徒の蒸留手法は教師モデルの知識を十分に蒸留できていないという課題がある
既存の知識蒸留は以下のような課題を抱えている
なので,新しい蒸留の手法を提案した
手法の肝は以下
蒸留する時に,FFM(front-end feature map)と(back-end feture map)の2つの特徴マップを計算する手法を元にしている
この手法は特徴マップの計算をする時に,計算コストが高くなるという課題がある
なので,特異値分解(SVD)を用いて計算コストを下げる手法を提案している
特徴マップを作るために特異値分解をして,行列の特徴を抽出する
行列$M$を特異値分解すると,$M = U\Sigma V^T$になる,この時の行列$\Sigma$と$V$を使って中間表現を前処理する
これは勾配の更新式
大きさが$H\times W \times D$の行列$M$を特異値分解すると,$M = U\Sigma V^T$という風になる.
ここで,$U$は行列$M$の局所的なパターン(特徴),$V$は全体的な特徴を表す行列になる.
SVDを適用したものをそのまま用いると,以下のような課題が生じる
なので,教師モデルの出力を基準にした後処理を追加する
最初に特異値$\Sigma$を正規化する.(正規化した$\Sigma$を$\Sigma_T$とする)
式4に従って,行列$V$の各ベクトル$v_{T,i}$を正規化して,教師の出力とする(式3)
生徒側の後処理も同じような感じにやるが,行列$V$の要素を教師の特異値の値に従いソートしてから上の処理を適用する
後処理の全体像は以下
$f{m,l}^{FFM}$はある畳み込み層に入れる前の行列に対して,上の前処理と後処理を適用した行列の要素ベクトル(Front-end Feature Map),$f{n,l}^{BFM}$は畳み込みを適用した後の行列に対して,処理を適用した行列の要素ベクトル(Back-end Feature Map)
教師と生徒のレイヤーに対してDFVを計算して,それらを近づけるように学習する
これに加えて,自己蒸留も追加して生徒モデルに対する全体の損失とする
自己蒸留を追加することで,出力レイヤーに対する蒸留結果をきちんと浅い層に届ける狙いがある
勾配のバランスを取るために,DFVの蒸留の部分に対して勾配クリッピングを行う
実験は3つ,仕様データセットはCIFAR-100
[10]は#11 の手法
どのモデルでも,既存手法よりもいい精度を達成している
自己蒸留は有効でした.学習に必要な時間(エポック数)も削減できた
層を増やしすぎるとパフォーマンスは悪くなるから,適切に設定する必要がある
Self-supervised Knowledge Distillation Using Singular Value Decomposition
author
link
Self-supervised Knowledge Distillation Using Singular Value Decomposition
背景:なぜその問題を解決したいのか
既存の教師-生徒の蒸留手法は教師モデルの知識を十分に蒸留できていないという課題がある
目的:どういう問題を解決したのか
既存の知識蒸留は以下のような課題を抱えている
なので,新しい蒸留の手法を提案した
提案:解決に向けたキーアイデアは何か
手法の肝は以下
提案手法
蒸留する時に,FFM(front-end feature map)と(back-end feture map)の2つの特徴マップを計算する手法を元にしている
この手法は特徴マップの計算をする時に,計算コストが高くなるという課題がある
なので,特異値分解(SVD)を用いて計算コストを下げる手法を提案している
前処理(trancated SVD)
特徴マップを作るために特異値分解をして,行列の特徴を抽出する
行列$M$を特異値分解すると,$M = U\Sigma V^T$になる,この時の行列$\Sigma$と$V$を使って中間表現を前処理する
これは勾配の更新式
特異値分解についてメモ
大きさが$H\times W \times D$の行列$M$を特異値分解すると,$M = U\Sigma V^T$という風になる.
ここで,$U$は行列$M$の局所的なパターン(特徴),$V$は全体的な特徴を表す行列になる.
後処理
SVDを適用したものをそのまま用いると,以下のような課題が生じる
なので,教師モデルの出力を基準にした後処理を追加する
最初に特異値$\Sigma$を正規化する.(正規化した$\Sigma$を$\Sigma_T$とする)
式4に従って,行列$V$の各ベクトル$v_{T,i}$を正規化して,教師の出力とする(式3)
生徒側の後処理も同じような感じにやるが,行列$V$の要素を教師の特異値の値に従いソートしてから上の処理を適用する
後処理の全体像は以下
処理した後の行列の相関関係を計算する
$f{m,l}^{FFM}$はある畳み込み層に入れる前の行列に対して,上の前処理と後処理を適用した行列の要素ベクトル(Front-end Feature Map),$f{n,l}^{BFM}$は畳み込みを適用した後の行列に対して,処理を適用した行列の要素ベクトル(Back-end Feature Map)
蒸留スキーム
教師と生徒のレイヤーに対してDFVを計算して,それらを近づけるように学習する
これに加えて,自己蒸留も追加して生徒モデルに対する全体の損失とする
自己蒸留を追加することで,出力レイヤーに対する蒸留結果をきちんと浅い層に届ける狙いがある
学習テクニック
勾配のバランスを取るために,DFVの蒸留の部分に対して勾配クリッピングを行う
結果:結局問題は解決されたのか.新しくわかったことは?
実験は3つ,仕様データセットはCIFAR-100
提案手法(自己蒸留なしver)の有効性の検証
[10]は#11 の手法
どのモデルでも,既存手法よりもいい精度を達成している
提案手法(自己蒸留あり)の有効性の検証
自己蒸留は有効でした.学習に必要な時間(エポック数)も削減できた
蒸留する中間層(DFVの計算をするレイヤー)の数を変えた時のパフォーマンスの比較
層を増やしすぎるとパフォーマンスは悪くなるから,適切に設定する必要がある