cedro-blog

SONY Neural Network Console で半教師あり学習をやってみる

今回は、VAT ( Virtual Adversarial Training ) による半教師あり学習をやってみます。

ディープラーニングは大量のラベル付きデータ(正解付きデータ)があると学習が上手く行くわけですが、大量のラベル付きデータを作成するには、かなりのコストが掛ります。

ビッグデータから大量のデータを収集することは比較的容易な訳ですが、それにいちいちラベル付けする作業が大変なのです。

そうした中で、少量のラベル付きデータと、残りは大量のラベル無しデータで学習する方法を「半教師あり学習」と言い、サンプルプロジェクトにある VAT ( Virtual Adversarial Training ) は、その中の1つです。

考えてみれば、我々も赤ちゃんの時に、「これは犬だよ」、「これは猫だよ」と教えられるわけですが、教えられるラベル付きデータはほんの少しで、後は大量のラベル無しデータを見ているうちに、犬や猫を正確に識別できるようになります。これと同じですね。

具体的な学習方法ですが、まず少量のラベル付きデータで、ラベル毎に大体の境界線を把握します。その上で、ラベル無しデータをそこにプロットし境界線の方向(一番間違えやすい方向)に少し動かすノイズを加えます。

そして、「ラベル無しデータ」と「ラベル無しデータ+ノイズ」の予測確率分布の差が最小になる様な重みwバイアスbを学習するというものです。

 

サンプルプロジェクトを見てみましょう

まずは、サンプルプロジェクト semi_supervised_learning_VAT を見てみましょう。

 

全部で6画面ありますが、これは NoiseEstimati 画面です。「ラベル無しデータ」と「ラベル無しデータ+ノイズ」2系統の差が小さくなるように学習する雰囲気が分かると思います。

データセットは3つあり、ラベル付きデータが100個ラベル無しデータが60,000個評価用データが10,000個です

但し、このままサンプルプロジェクトの学習を開始しただけでは、VATのありがたみは分かりません。

 

まず、ベンチマークをやってみます

まずは、ベンチマークとしてラベル付きデータ60,000個評価用データ10,000個で学習・評価をやってみます。

 

使うネットワークは、VATの中で使われているこのネットワーク(実際はこれが2系統使われますです。

全結合層(Affine3層だけですが、なにげにBatch Normalization を2つ噛ませて、能力UPを図っています。

 

バッチ64エポック50で学習を開始します。1時間1分で学習が完了です。

 

Confusion Matrix です。精度は97.83%です。

さて、今度はラベル付きデータ60,000個から100個に減らしたら、どうなるかを見てみましょう。

 

バッチ64エポック100で学習を開始します。1分16秒で学習完了です。

Confusion Matrix です。さすがに、学習データがたった100個では、識別精度70%くらいが限界の様です。

 

いよいよ、VATの登場です

さあ、ここで、ラベル付きデータ100個しかないけれど、ラベル無しデータなら60,000個あるけど、何か上手い方法がないの? という場面で登場するのが、VATというわけです。

では、いよいよ、VATを動かしてみます。今度は、ラベル付きデータが100個ラベル無しデータが60,000個評価用データが10,000個 と3つのデータを使います。

 

バッチ64エポック20で学習を開始します。1時間44分で学習完了です。

 

Confusion Matrix です。認識精度 98.38% です!

驚きました、ベンチマークラベル付きデータ60,000個と評価用データ10,000個で学習した場合よりも、識別精度が良くなってしまいました。

恐るべし、VAT

エポック数の設定で多少識別精度がばらついたとしても、VATを使うと、大量のラベル付きデータとほぼ同じ認識精度が実現できそうです。これは、素晴らしい!

 

半教師あり学習って実践的だと思う

サンプルプロジェクトに「半教師あり学習」が入っているのは知っていたのですが、今回初めて動かしてみて、その威力に驚いています。

世の中には、ラベル無しデータなら大量にあるというのは、結構あるシチュエーションだと思います。

ビッグデータに限らず、例えば、医療現場では、白内障を予測するための眼底画像とその予測結果ペア(ラベル付きデータ)は中々揃わないが、眼底画像のみ(ラベル無しデータ)なら沢山蓄積されているらしいです。

こういった場合、「半教師あり学習」を使うと、白内障を予測するニューラルネットワークが作れそうですよね。

「半教師あり学習」、かなりの潜在能力を感じます。また、別の機会でも使ってみたくなりました。

では、また。