Blog人工知能であらゆる機械の自動化を目指すDeepXのメンバーが、最新の人工知能研究について発信します。2018-10-15Tweetこんにちは、エンジニアの中村です。今回は、ニューラルネットワークの蒸留に関する連載記事の第3回目の記事になります。第1回では、蒸留という手法の端緒であるモデル圧縮から始めて、蒸留の基本的な概念を説明し、その後の蒸留の発展を含めて、蒸留という分野の概観を紹介しました。第2回では、蒸留によるモデル圧縮について、分類タスクと回帰タスクそれぞれについて個別の研究を取り上げて、それらの詳細を紹介しました。分類タスクでは蒸留の基本的な効果と蒸留によって得られる正則化効果について、また,回帰タスクでは蒸留を応用するために必要な工夫を紹介しました。第3回目にあたる今回は、第1回で概要に触れた蒸留の発展について、個別の研究を取り上げて、詳細を紹介していきます。モデル圧縮のための手法として考案された蒸留ですが、「教師モデルの出力を生徒モデルの学習に使用する」という蒸留の基本コンセプトは、モデル圧縮以外の用途にも広く応用されています。蒸留を応用させた研究についてすべてを取り上げるわけではありませんが、蒸留の幅広い応用先について、以下で具体例を紹介していきます。蒸留の応用先の中でも、ディープラーニングモデル開発の中で最も関心が高いであろう精度向上に関する研究例を取り上げます。第1回の記事を合わせてご覧ください。それでは、蒸留によるディープラーニングモデルの精度向上について、個別の研究の紹介に入りましょう。この記事では2つの手法を紹介します。訓練方法を工夫して精度向上データを有効活用して精度向上モデルの精度向上のためには、大きく分けて、モデル、データ、訓練方法のいずれかの要素を改良すればよいと考えられます。第1回で説明したように、蒸留では、データと訓練方法の2つについて精度向上のための手法を提案します。以下でまずはじめに、データの利用可能性を工夫することによるモデル精度向上のための蒸留を紹介します。訓練データを増やすことで、ディープラーニングモデルの汎化性能を高めることができるということは、ディープラーニングにおいて一般的に知られています。各データに正解ラベルを付与するアノテーション作業のコストが高くつきます。このアノテーションコストを回避するために、追加の訓練データについては、何らかの形で機械的・自動的にアノテーションをする方法がほしいところです。教師モデルの出力を正解ラベルとして使うことで、正解ラベルのない訓練データの利用を可能にしています。教師モデルの出力を正解ラベルとして使うと述べましたが、当然のことながら、可能な限り正確な正解ラベルを得たいはずです。ディープラーニングによる教師あり学習は確かに十分に正確であることが多いため、教師モデルの出力をそのまま正解ラベルとして使うこともできそうです。するという方法を取っています。推論時に、例えば、元の画像データとそれを左右反転させた画像データの両方に対する出力を得て、それらの出力を平均化することでより正確な予測を得る、ということが行われます)。以下のステップにしたがって実現されます。(通常の教師あり学習)正解ラベルのない訓練データに対して変換を施して、教師モデルに入力、正解ラベルのない訓練データそれぞれに対して複数の出力を得る。教師モデルによるアノテーションを作成。訓練データに追加して、生徒モデルを訓練。半教師あり学習と類似した手法と捉えられます。関節点検出と物体検出の両方で有効であることが報告されています。以下では、関節点検出の実験について紹介します。モデル圧縮が目的ではないため、教師モデルと生徒モデルは同じモデルアーキテクチャを持ちます。訓練済み重みを使用しています。時に施される変換には、スケーリングと左右反転が採用されています。(例えば、左右反転の変換がされた画像に対する教師モデルの出力を再度左右反転して元に戻してから、無変換の画像に対する出力と平均して、正解ラベルとして使用しています)。実験はデータの性質別に大きく2つ実施されています。1つは、正解ラベルのある訓練データと正解ラベルのない訓練データが類似する実験で、もう1つは、それらが類似しない実験です。以下で、具体的に紹介してきます。正解ラベルありデータと正解ラベルなしデータが類似する場合。(別の言い方をすれば、両者は類似した分布を持ちます)。正解ラベルなしのデータも使用して訓練したモデルの精度を比較した表が以下になります。実施した方が高精度という結果となっています。特徴抽出のネットワークに使用したCNNアーキテクチャの種類。精度が向上しています。精度が向上しています。正解ラベルありデータと正解ラベルなしデータが類似しない場合。形で有効活用でき、精度向上につながったことを示しています。正解ラベルなしデータが類似しない場合でも、そのデータを有効活用することができることが報告されています。サンプルのデータセットを作成しています。データセットと比較すると趣きの異なったデータセットになっています。有効であったことが示されています。精度が向上しています。実際に使用することを考えた場合、例えば、追加で収集する正解ラベルなしデータは、既存の正解ラベルありデータと全く同じ条件で得られるとは限りません。有効である可能性が示されています。正解ラベルなしデータを活用して精度向上をする手法として実用的である、と言えるかもしれません。有効性以外に、いくつかの比較分析が報告されています。そのうちの1つは、正解ラベルなしデータの量に関するものです。ごとに精度が報告されています。正解ラベルなしデータを使用する場合、常に正解ラベルありデータのみで訓練したモデルの精度より高精度となっていますが、さらに、正解ラベルなしデータの比率が高いとより高精度になることが見て取れます。縦軸は精度、横軸は正解ラベルなしデータの比率。引用)さらに、教師モデルの精度と生徒モデルの精度の関係について報告されています。以下の図に見られるように、教師モデルの精度が向上すると生徒モデルの精度も向上することが示されています。想像に難くないですが、教師モデルの精度が向上すれば、そこから得られるアノテーションもより正確なものとなり、生徒モデルをより正確に訓練することが可能であると考えれます。縦軸は生徒モデルの精度、横軸は教師モデルの精度。以上で、正解ラベルなしデータを使ってデータの利用可能性を向上させることによる、精度向上のための蒸留の手法について説明しました。第2回でも詳細に取り上げたとおり、蒸留はモデルサイズを小さくするモデル圧縮を基本としていました。蒸留は、教師から生徒への知識の継承という形で、教師モデルと同程度の精度のより軽量なモデルの開発を可能とするわけでした。本研究では、知識の継承先を軽量なモデルとはせず、教師モデルと同一のモデルアーキテクチャのモデルに対して蒸留することで、教師モデルを超える精度の生徒モデルが得られることを検証しています。手法は非常にシンプルで、基本的な蒸留の流れとほとんど同じステップで構成されます。はじめに教師モデルを通常の教師あり学習の形で学習し、その後、その教師モデルの出力を使い、教師モデルと同一の生徒モデルを訓練します。本手法では、この蒸留の1ステップを複数回繰り返すこともしています。前のステップで蒸留された生徒モデルを新たな教師モデルとして、この新たな教師モデルからまた別の生徒モデルへの蒸留というステップを複数回繰り返します。このステップをk回実行した際、最終的に、k個の生徒モデルが得られますが、さらにこのk個の生徒モデルをアンサンブルするということも可能です。この一連の流れを概念的に図示すると、以下の通りに表せます。