同氏は、小さいデータでディープラーニングモデルを構築するノウハウとして以下のような7つの方法を提案します。
小さいデータでディープラーニングモデルを構築する7つのノウハウ
データ収集 | まずは可能な限りデータを収集する |
---|---|
ファインチューニング | 解決すべき問題が属するドメインに関する大規模なモデルを流用する |
データ拡張 | 既存の学習データを加工して、学習データを増やす |
損失関数の変更 | 損失関数にコサイン類似度を使うと、パフォーマンスが向上することがある |
モデルの分解 | ディープラーニングモデルを多数のニューラルネットワークに分解すると、学習データも小規模化できる |
オートエンコーダ | オートエンコーダを使って、重みを最適化する |
事前知識の組み込み | 学習データが関連するドメイン知識を学習プロセスに組み込むと、学習データを小規模できる |
以上のように解説したうえで、少ない学習データでディープラーニングモデルを構築するノウハウは今後もっと研究されるべきもの、と同氏は指摘します。
なお、以下の記事本文では解説する各ノウハウをさらに詳しく知りたいヒトのために、他の記事や論文へのリンクが多数あります。興味のある方はリンク先記事も読むことをおすすめします。
小規模な学習データでも実用的なパフォーマンスを発揮できる構築法が整備されれば、ディープラーニングモデルは現在よりさらに社会の至るところで実装されるようになるでしょう。
なお、以下の記事本文はTyler Folkman氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。
そして小さいデータを使うのが重要な理由
あなたはこんなニュースを聞いたことがあるだろう。ディープラーニングはスライスパン以来のホットなモノだ。それは、ほとんどの複雑な問題を莫大な量のデータを使いながらも低価格で解決することを約束する。唯一の問題はあなたがGoogleやFacebookで働いていないのでデータが不足していることだ。こうした状況であなたがやるべきことは何か。あなたはディープラーニングのちからを利用することができるのか、それともそんなちからはないのか。以下では限られたデータにもとづいてディープラーニングを活用できるかも知れない方法と、わたしが小さいデータでディープラーニングを使うことを未来のもっともエキサイティングな研究分野のひとつと考える理由を見せていきたい。
シンプルなスタート
限られたデータにもとづいてディープラーニングを活用する方法を議論する前に、ニューラルネットワークに立ち返ってシンプルなベースラインモデルを構築しよう。ランダムフォレスト(※訳註1)のようないくつかの伝統的なモデルを使って実験すれば、構築にもそんなに時間がかからないだろう。こうしたことはディープラーニングを採用した場合に見込める潜在的な諸々の上昇を測定することに役立ち、ディープラーニングを採用する場合の(コストに関する)トレードオフ、取り組む問題、さらにはディープラーニングをほかの解決方法と比較するにあたっての洞察をも与えてくれる。
この技法は、安定して良い精度が出る、アルゴリズムの構造が直観的に理解しやすいといった理由から多用される。AINOW記事「機械学習をどこよりもわかりやすく解説! 教師ありなし学習・強化学習だけでなく5つのアルゴリズムも完全理解!」の「分類」でも解説されている。
さらなるデータの取得
馬鹿馬鹿しく聞こえるかも知れないが、もっとデータを集められるかどうかについてあなたは本当に考えただろうか。わたしはしばしば顧客企業にデータをもっと集めるように提案して来たのだが、その度にわたしがクレイジーであるかのように見られたことに驚いている。だがしかし、もっとデータを集めることに時間とカネを投資することはまったく問題ないのだ。実際のところ、この解決策がしばしばあなたが選べるベストな選択肢となり得る。例えば、あなたは珍しい鳥の種を分類しようとしていたら、その鳥に関するデータが非常に限られているだろう。この問題をより簡単に解決する方法は、おそらくはもっとデータをラベリングすることだ。あとどのくらいデータを集める必要があるのかわからない?そんな時は追加したデータに関する学習曲線をプロットして、モデルのパフォーマンスの変化を見てみよう。
ファインチューニング
あなたがすでにベースラインモデルを持っており、もっとデータを集めようにも出来ないかカネがかかりすぎると想定しよう。この時点でもっとも試すべき真の方法は、事前学習したモデルを使って、あなたの問題のためにファインチューニングすることだ。
ファインチューニングの基本的な考え方とは、まずあなたの問題が属するドメインに望みうる限り関係するデータを大量に集め、そのデータを使って任意のモデルを訓練する。そして、あなたがもともと持っていたより小さいデータセットを使って事前学習したニューラルネットワークを微調整(ファインチューニング)するのだ。この方法については、この記事でさらに学べる。
画像分類問題に関しては、ImageNetが事前学習に使うのに適切なデータセットである。このデータセットには多数の種類のオブジェクトに関する何百万もの画像が含まれており、それゆえ多くのタイプの画像に関する問題に役立てることができる。動物さえも含んでおり、珍しい鳥の分類にも役立つことだろう。
ファインチューニングをいくつかのコードで始めるためには、Pytorchのこの素晴らしいチュートリアルをチェックしよう。
データ拡張
もしもっとデータを集めることができず、大きなデータを使ったファインチューニングにも失敗したならば、たいていはデータ拡張が次の一手となる。この一手はファインチューニングといっしょに使われることもある。
データ拡張に背後にあるアイデアはシンプルである。ラベル値を変えずに新しいデータを供給できるように入力データを変えるのだ。
例えば、もしネコの画像を持っていたとしてこの画像を回転させても、それは依然としてネコの画像だ。この場合は、データ拡張がうまくいくだろう。その一方でもし道路の画像を持っていて(自律自動車の)適切なハンドルの角度を予測しようとするならば、画像の回転は適切なハンドルの角度を変えてしまう。もし(道路の画像の回転に合わせて)ハンドルの角度を適切に調整しなければ、この場合のデータ拡張はうまく行かないだろう。
データ拡張は画像分類問題にもっとも多用され、その活用テクニックについてはこちらで見つけることができる。
自然言語処理のような(画像分類とは)別のドメインにおいてデータ拡張をクリエイティブに使う方法が考えられることもしばしばあり(そうした事例はこちらから見れる)、新しいデータを生成するためにGANを使った実験をしているヒトもいる。もしGANを使ったアプローチに興味があるのなら、DADA(Deep Adversarial Data Augmentation:深層敵対的データ拡張)を調べることをおすすめする。
コサインロス
最近発表された論文によれば、事前学習を使わずにコサインロスを使って小さいデータセットにもとづいてディープラーニングモデルを構築したところ、予測精度が30%上昇したことがわかった。つまり、分類問題のために損失関数(※訳註2)をカテゴリカル・クロスエントロピー関数からコサイン関数に変えたのだ。コサインロスとは、コサイン類似度を活用したシンプルな損失関数のことだ。
上のグラフを見ると、サンプルデータ数に応じてモデルのパフォーマンスが損失関数の種類ごとにどのように変化するかがわかる。そして、ある小さいデータセットの場合にはファインチューニングが非常に有効であるが(左のグラフ「CUB」)、ほかのデータセットでは有効ではないこともわかる。
さらに深く
昨年のNIPsに提出された論文「現代のニューラルネットワークは小さなデータセットに一般化される」では、著者たちはディープラーニングニューラルネットワークを多数の小さなニューラルネットワークが合わさったものとして捉えている。「特徴を抽出するのに増えていく階層をもつ各層に注目するよりは、最終層が提供する集合的メカニズムに着目するほうが賢明だ」と論文では述べている(※訳註3)。
わたしも小さいデータを活用するためにこの論文のアイデアを使ったのだが、論文にあるような集合的効果の利点をうまく活用するためにぜひニューラルネットワークを構築してほしい。
オートエンコーダ
最初からパラメータの重みを最適化して始められるように、ネットワークを事前学習する際にオートエンコーダを使って成功したいくつかの事例がある。この方法を使えば、局所的な最適化と悪い初期化のようなそのほかの落とし穴を避けることができる。しかし、(テスラのAI技術部門でシニアディレクターを務めている)Andrej Karpathy氏は教師なし学習における事前学習について、オートエンコーダをあまり期待しないことをすすめている。
もしオートエンコーダを使う手法に磨きをかける必要があるのならば、スタンフォード大学が作ったディープラーニングに関するこのチュートリアルを参考にすることができる。オートエンコーダに関する基本的なアイデアは、入力値を予測するニューラルネットワークだということだ。
事前知識
最後に、もっともこの方法だけというわけではないのだが、学習プロセスを方向付けるためにドメインに固有な知識を合わせて使う方法を試してみよう。例えば「確率的プログラムからの導出を使ったヒューマンレベルの概念学習」においては、著者たちは学習プロセスにおいて部分的に事前知識を使って概念を構築するモデルを解説している。このモデルはヒトのレベルのパフォーマンスを発揮し、同時にディープラーニング的アプローチをも凌駕した(※訳註4)。
ネットワークの次元を削減したり、ネットワークアーキテクチャをより小さくするためにネットワークへの入力データを制限する際にもドメイン知識を使うことができる。
以上の方法は、最後の選択肢だと考えられる。というのも事前知識を統合するのは挑戦的な試みであり、たいていはもっとも時間のかかる選択肢だからだ。
人工知能は分類問題に関してヒトを上回る正解率を実現したものも、大量の学習データを必要とする。対してヒトは、たったひとつの例を見ただけで分類問題を解決できる。また、ひとつの例から類似例を生成したり、例をさらに分解することもできる。同論文では、人工知能モデルにヒトのような画像の分類・生成能力を実装するために以下のような実験を立案・実行した。
手順1.書記体系のデータセットOmniglotから525字を選定してテストデータを作成する(下の画像1参照)。
画像出典:SCIENCE “Human-level concept learning through probabilistic program induction“[/caption]手順2.人工知能モデルに、テストデータを認識させる。モデルは、各文字を基本的なパーツの組み合わせとして認識する(下の画像2参照)。この認識方法は、ベイジアンプログラム学習(Bayesian Program Learning:略してBPL)と名付けれた。
画像出典:SCIENCE “Human-level concept learning through probabilistic program induction“[/caption]手順3.以上のBPLモデルとヒトに以下のような5つのタスクを実行してもらう。
- 任意の文字を与えて、その文字に似たテストデータの文字を特定する(ワンショット学習)
- テストデータから任意の一文字を与えて、その文字と同じように分類される文字を生成する。なお、ヒトとBPLモデルには異なった文字を与える。
- 上記タスク2において、ヒトとBPLモデルに同じ文字を与える。
- テストデータにある文字を組み合わせて、新しい文字を生成する。
- 一切の制約なしに、全く新しい文字を生成する。
手順4.タスク1に関しては、ヒトとBPLモデルの分類エラー率を測定する。タスク2~5に関しては、ヒトが生成した文字とBPLモデルが生成したそれを区別する多数のヒトを用意して「視覚的チューリングテスト」を実施する。このテストでは識別成功率50%が、もっとも優れた測定値となる(50%以上はヒトとBPLモデルの区別がつき易いことを意味し、50%以下はヒトの判断を反対にすれば区別がつき易いことを意味する)。
実験を実行した結果、BPLモデルがもっともヒトに近いパフォーマンスを発揮した(下の画像3参照)。
画像出典:SCIENCE “Human-level concept learning through probabilistic program induction“[/caption]以上における手順1と手順2が本記事で言及する「事前知識」に該当する。文字を「基本的なパーツに分解する」という方法で認識することによって、小規模のテストデータを用いてヒトと同じような性能を実現できたのだ。
BPLを文字認識以外のドメインに応用する場合、テストデータを用意したうえでそのデータを認識する方法論を考案する必要がある。
やはり小さく作ることはクール
限られたデータにもとづいてディープラーニングを活用する技法に関する考え方を、この記事が提供することを願っている。私が個人的に思うのは、少ないデータでディープラーニングを活用する問題は本来はもっと議論されるべきだが現状はそうではない、ということだ。しかし、この問題には非常に興味深い含蓄がある。
非常に限られたデータしか用意できない問題は大量にあり、そんな問題においてはより多くのデータを取得することが非常にカネがかかったり不可能だったりする。例えば珍しい疾病の検知や教育がもたらす結果の予測といった問題がそうである。こうした問題に対して、ディープラーニングをはじめとするベストな技法の応用を見つけるのは非常に興奮する。この興奮については、アンドリュー・エン教授も同意してくれているのだ。
Deep Learning is getting really good on Big Data/millions of images. But Small Data is important too. Am seeing many exciting applications at Landing AI where you can get good results w/100 images. Hope more researchers work on Small Data–ML needs more innovations there.
— Andrew Ng (@AndrewYNg) September 27, 2018
ディープラーニングは、ビックデータや何百万枚の画像にもとづいて実にうまく行きます。しかし、小さいデータを使う時も重要なのです。(エン教授が設立したAIスタートアップである)Landing AIには100枚の画像でもうまく行く興味深いアプリをたくさん見ることができます。より多くの研究者が小さいデータに関して研究してくれることを望んでおり、このテーマに関しては機械学習でもより多くのイノベーションが必要とされています。
原文
『How To Use Deep Learning Even with Small Data』
著者
Tyler Folkman
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん