蒸留とは
中学生の時に化学で学んだ蒸留について、
蒸留(じょうりゅう、Distillation)とは、混合物を一度蒸発させ、後で再び凝縮させることで、沸点の異なる成分を分離・濃縮する操作をいう。
引用元:Wikipedia
深く、大きいモデルが優秀であることは想像に難くありません。しかし、実際にはそのような大きいモデルが使用できないが機械学習モデルを使用したい場面があります(ラズパイとかでやる時など)。そのような時に、深く大きいニューラルネットワークの知識を蒸留し、より浅く小さいニューラルネットワークへ学習させるために使われるものです。特に大きいモデルを教師モデル、小さいモデルを生徒モデルと言います。つまり性能をできるだけそのままに教師モデルから生徒モデルへ知識の継承を行うことを目的としています。これについての元論文は以下です。
Distilling the Knowledge in a Neural Network,Geoffrey Hinton, Oriol Vinyals, Jeff Dean,2015,https://arxiv.org/abs/1503.02531
日本語でまとめられた文献もあります。
Deep Learningにおける知識の蒸留 | Code Craft House
論文紹介
- タイトル:Dataset Distillation
- 著者:Tongzhou Wang, Jun-Yan Zhu, Antonio Torralba, Alexei A. Efros
- URL:https://arxiv.org/abs/1811.10959
- 発行年:2018
今後、本記事での画像等の引用は全てこの論文からです。
引用数は9でタイトルはそのまま「データセットの蒸留」です。
概要
先ではモデルの蒸留を行っていましたが本論文ではデータセットの蒸留をします。具体的には膨大なデータセットをサンプリングすることなく、各クラスごとに新たな画像を生成することでデータセットを圧縮している。
引用元:Dataset Distillation
イメージとしては上のような感じ。このように新たに画像を生成することで数万枚のデータセットが10~300枚へと蒸留することができている。
アルゴリズム
引用元:Dataset Distillation
<!--以下自己解釈
蒸留後データセットを初期化する。
元データを取得する。
ある重みにおいて勾配を求め、より良い重みを決定
元データとを使ってロス関数を計算する。
ロス関数の勾配から蒸留後データセットを更新する。
-->
実験結果
まず、上記のアルゴリズムを繰り返し行う2パターンの実験を行う。
上のアルゴリズムを拡張して2つの方法を用意する。
(a)重みの更新を複数回行う
(b)の更新を複数回行う
引用元:Dataset Distillation
実験対象としてMNISTとCIFAR10が用いられたが、(a),(b)どちらの場合にも複数回行った方が正確となっている。
次に、ベースライン条件として以下の4つの条件を用意し、それとデータセットを蒸留した時の結果を比較する。
ベースライン条件
- ランダム
- 学習効果の高かった上位20%
- k-means法
- 各画像の平均
結果が以下です。ベースライン条件よりも良い結果になっていることがわかります。
引用元:Dataset Distillation
さいごに
今回は蒸留という手法の新しいアプローチを行った論文でした。どのようなクラスからどのような画像が生成されたかは参考文献の公式リンクから観てみてください。carクラスだったりが1つの画像になっているのは結構面白いです。
英語キチィ~
参考文献
- Dataset Distillation Project Page
-
Dataset Distillation · Issue #1019 · arXivTimes/arXivTimes · GitHub
おわり。
もしよければ↓ぽちっと↓お願いします。