読者です 読者をやめる 読者になる 読者になる

何らかのブログ

日記とか備忘録

最近の半教師付き学習(semi-supervised learning)について

(この記事はDeep Learning Advent Calendar 2016 22日目の記事ですが、ほとんどDeep learning関係ありません)

 

最近分類問題におけるsemi-supervised learningの論文を読んだりとか手法を学んでいて聞いたり思ったりした話をまとめました。

半教師付き学習とは何かについては、

yamaguchiyuto.hatenablog.com上の記事に比較的わかりやすいと思うので、上の記事を読んで思ったことでも書きます。並べながら書いてるので並べながら読んでいって下さい。できればDeep Learning的なのにも触れたい。

Self-training

古典的なsemi-supervised learningの手法だと思います。強くはないが何にでも使えるんじゃないかなあ。

Generative Model

データが何らかのパラメトリックなモデルから生成されるという仮定を置く手法です。古典的にはGMM(混合ガウス分布)などがありますが、分布に対する仮定が強く、一生toy dataで遊んでろみたいな気持ちがあります。最近では半教師付き学習のauto-encoderの論文(Kingma, Diederik P., et al. "Semi-supervised learning with deep generative models." Advances in Neural Information Processing Systems. 2014.)がめっちゃ有名だと思います。実験が面白いですし、DC-GANの流行のきっかけにもなった気がするすごい論文です。次のスライドで分かりやすく解説されています。

www.slideshare.net

Co-training

GANにおけるGeneratorとDescriminatorみたいなものなんですかね(よく知らない)

Ladder NetworkもEncoderとDecoderを用いてるらしいのですが、こういう双方向のtraining methodの呼び名を知りません。

Graph-based SSL (Label propagation)

データにグラフを用いた強い仮定を使って半教師あり学習を行います。two-moonの結果とかが有名。各クラスタ間が十分に離れていれば上手く分類することができます。

Manifold Assumption

データがある多様体上にほぼ存在していると仮定し半教師あり学習を行います。顔認識等で上手くいっているようですが、あまりよく知りません。

Low Density Separation (Purturbation?)

S3VMの発展形としてS4VMがあるらしいが、実装と学習が面倒らしいです。Deep Learning的な手法としては最近はVAT (Miyato, Takeru, et al. "Distributional smoothing by virtual adversarial examples." arXiv preprint arXiv:1507.00677 (2015).)っていうのがあるらしいです。この手法では、各データ点を分類結果がなるべく間違う方向にちょっとずつ動かして学習を繰り返すらしいです。entropy regularizationに近い気がします。ただ、データ点のpurturbation自体はcruster assumptionに基づいたものなので、結果としてlow dentiry separationとしての働きをすると考えるのがよさそうです。

 

今年のNIPS(すごい国際会議)のPurtabation系の論文としてはDropout正則化とでもいうべき手法(Sajjadi, Mehdi, Mehran Javanmardi, and Tolga Tasdizen. "Regularization With Stochastic Transformations and Perturbations for Deep Semi-Supervised Learning." Advances in Neural Information Processing Systems. 2016.)があります。MNIST100サンプルの半教師付き学習で誤分類率0.55%とかいうすごい性能が出ています。しかし、論文中での実験設定が一部不明瞭な点があったり、fractional-poolingの性質や複数回Dropoutさせる必要があるため学習のコストが大きいことから、再現するのは大変そうです。

One-shot Learning

人間は1つのサンプルを見たら他の無数のサンプルに対して良い分類性能を得ることができるし、機械学習でも同じことができるんじゃね?っていう考え方。かなり強い仮定を必要とし、まだまだ上手くいっているわけではないですが、考え方自体はとても面白いと思います。文字に関するOne-shot learningは次のスライドに載ってます。

www.slideshare.net

Zero-shot Learning

人間は実物を見なくても話に聞いた特徴から推定することができるから、機械学習でも同じことができるんじゃね?っていう考え方。もっと強い仮定を必要とします。word embeddingやattributeと呼ばれる人手で作った特徴量を知識として用いて、そのベクトル表現への回帰問題を考えるイメージだと理解しています。word embeddingの場合、露骨に性能がword embeddingの良さに影響し、attributeの場合既知のクラスと未知のクラスが混ざっていると動かなくなるようです。

 

おわりに

とっちらかった上に、結局一部ニューラルネットワークの手法が登場しただけでDeep learningではなかった感じがありますが、最近の半教師付き学習としてはこんなところでしょうか。実世界ではデータのラベル付けというのはとてもコストが高く、ラベル付きデータが少なくても上手く動く機械学習アルゴリズムは今後も重要なトピックになると思うので許してください。

 本当はpixivのいい感じの画像を自動でスクレイピングするためのミニバッチ学習とかやりたかった....