めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

論文メモ: Dataset Distillation について

個人用のメモ。

概要

  • 画像分類モデルの訓練にて、学習に効果の高い画像と学習率を得る手法を提案
  • モデルの初期パラメータが生成される分布と学習エポック数に基づいて画像と学習率を得る
  • CIFAR-10にて100の生成画像からAccuracy 50%越え
  • 現実的な応用の中でこの手法を用いて得られた画像・学習率が有用になるシチュエーションとしてどのようなものがあるかは未検討

元論文

Wang, Tongzhou, et al. "Dataset Distillation." arXiv preprint arXiv:1811.10959 (2018).


モデルの蒸留(distillation)が複雑なモデルで学習した知識をよりシンプルなモデルに転移させることを指している。この論文では、モデルではなくデータセットの蒸留を行う。巨大な訓練データをより小さなセットの訓練データに抽出して同時に最適な学習率を求める。その後、固定されたモデルを蒸留したデータと求めた学習率で数エポックだけモデルを訓練し、目的関数が減少することを確かめる。

実際に、実験では 60,000 枚のMNISTの画像に付いて、各クラスごとに一枚の合成画像を作成して訓練させれば高い性能が得られた。このような合成画像を作成する方法を Dataset Distillation, 作成された訓練データを distilled images と呼ぶ。

関連研究

モデル(の学習した知識)の蒸留

モデルの蒸留:[1503.02531] Distilling the Knowledge in a Neural Network

github.com

他、データセットの枝刈りと選択・勾配ベースのハイパーパラメータ探索・データセットの可視化など。

問題設定・記法

  • 入力:固定されたネットワーク構造、モデルのハイパーパラメータの初期値、モデルの訓練に用いるデータセット
  • 目的関数: argmin ℓ(x; θ) となるようなθを求める
  • 出力:合成された(入力として与えた訓練データよりも少ない数の)データセット+学習率

  • θ:moderunoparame-ta

  • x:={x}_{i=1}^N が訓練データセット全体
  • ℓ(x; θ):訓練データセットxに対する損失
  • μ:学習率

手法

モデルの初期値が固定されている場合

モデルの初期パラメータが固定ならば、蒸留されたデータ=「勾配が蒸留前のデータで訓練した時に得られたパラメータに向かう方向の勾配が得られるデータ」なので求めることができる。このようにして得られた画像はモデルの初期パラメータの情報も含んでいるため実用上役に立たない(初期パラメータも全てあらかじめ知っておく必要があるため)。

モデルの初期値がランダムに決定される場合

モデルの初期パラメータが特定の分布から生成されると仮定すれば、合成画像x+と学習率μ+を求める問題は以下のような最適化問題として定式化される。

f:id:misos:20190127132139p:plain
本論文(4)式

この時、モデルの初期のパラメータθ0は分布 p(θ0) からランダムサンプリングで選ばれる。Algorithm1を使って蒸留された画像と学習率を求める。このアルゴリズムでは一エポックしかモデルを訓練しない場合のケースだが複数エポックへの拡張もできる。

f:id:misos:20190127131817p:plain
Dataset Distillationアルゴリズム

実験で比較に用いるもの

  • ネットワークのパラメータ初期化方法の比較

    • 固定(fixed initialization):
    • ランダム初期化(random initialization):
    • 学習済みモデルからのランダムなパラメタ:
    • 学習済みモデルからの固定されたパラメタ:
  • 異なる目的関数での比較

実験

ベースラインとして以下を用意。

  • Random: カテゴリごとにランダムに選ばれた画像
  • Optimized: ランダムな画像のうち、訓練に有効だった画像上位20%
  • k-means: 各カテゴリで k-means によるクラスタリングを行いそのセントロイドとなった画像を選択(比較のため選択する画像の数は提案手法で蒸留した後の画像枚数と同数だけ選ぶとする)
  • Average: 各カテゴリで画像の平均をとりその画像を各勾配計算の際に用いる

学習率は {0.001, 0.003, 0.01, 0.03, 0.1, 0.3} の値でそれぞれ実験を行い、エポック数は {1, 3, 5} とした場合でそれぞれ実験。この値の組み合わせの中から最も性能が高かった場合の結果を実験結果に示している。

ランダム初期化をする場合について、初期化の方法は Xavier initialization (tf.contrib.layers.xavier_initializer  |  TensorFlow)。事前学習なしでのMNIST、事前学習ありでの画像分類(Alex-netでのImage-Net画像の分類)について実験を行い、蒸留したデータを用いれば数エポックでモデルの性能が(蒸留していないデータを用いて同じ数のエポックだけ訓練した場合と比較して)向上することが確認できた。

以下のページにて実験結果の簡単な概要を確認できます。

ssnl.github.io

実装

著者らによる実装が公開されています。

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。