Blog

岡野原です。Deep Learningが各分野のコンペティションで優勝し話題になっています。Deep Learningは7、8段と深いニューラルネットを使う学習手法です。すでに、画像認識、音声認識、最も最近では化合物の活性予測で優勝したり、既存データ・セットでの最高精度を達成しています。以下に幾つか例をあげます。

画像認識

  • LSVRC 2012 [html]  優勝チームスライド [pdf], まとめスライド[pdf]
  • Googleによる巨大なNeuralNetを利用した画像認識(猫認識として有名)[paper][slide][日本語解説]
音声認識
  • マイクロソフトによるプロジェクト [pdf] [html]
  • 言語モデルへの利用 [pdf]
  • ニューラルネット言語モデルの高速な学習[pdf]
化合物の活性予測
  • Merck Molecular Activity Challenge [html]

また、各分野のトップカンファレンスでDeep Learningのチュートリアルが行われ、サーベイ論文もいくつか出ました。おそらく来年以降こうした話が増えてくることが考えられます。

  • ICML 2012 [pdf]
  • ACL 2012 [pdf]
  • CVPR 2012 [html]
  • DeepLearning サーベイ論文 [pdf]
  • DeepLearning 実装テクニック論文 [pdf]

ニューラルネットは人工知能の初期から存在し、非常に歴史のある手法です。脳のニューロン・シナプスを模倣して考えられたモデルは、複数の入力を受け取って、出力を行う単純な関数(多くは非線型のシグモイド関数など)が複雑につながりあった形をとっています。脳が単純なニューロンの組み合わせによって高度な認識・知識活動を実現しているのと同様に、ニューラルネットも複雑な現象を学習できるのではないのかと期待されていました。しかし、一度盛り上がった機運は70年頃には一度下火となり、人工知能や機械学習の中心はもっと現実的な手法(線形識別器、カーネル法など)に置き換わっていました。そうした中でもトロント大のHintonらなどを中心にニューラルネットの研究は地道に進んでいました。
その中でも2000年代後半にいくつかのブレークスルーがおき、状況は大きく代わりました。以下にそれらを順に紹介します。

Greedy Layer-wise Training

[pdf][pdf]
最初の大きなブレークスルーは2006年に起きました。

はじめにこれまでのニューラルネットとその問題点を説明します。一般的なニューラルネットワークは複数の層からなり、前の層の出力結果を次の層の入力として受け取り、次々と深い層に情報が渡っていきます。例えば5段から10段ぐらいの層が使われる場合が多いようです。ある入力と出力を紐付けるような学習を行う場合は、back propagationと呼ばれる方法を利用して出力側の誤差を逆向きに伝搬させ、内部パラメータを調整する方法がとられていました。しかし、その層の数が多くなるほど、更新部分が拡散してしまってうまく更新できない問題が知られていました。

Greedy Layer-wise Trainingでは最初に教師無しデータを利用して、各レイヤーのパラメータを一層ずつ調整していきます。最初に一番はじめの層を学習する場合は入力を変換し、さらに逆変換をかけ元の入力と比較し、一致するようにパラメータを更新します。式で書くとxを入力1層目の変換関数をf、その逆変換の関数をgとした時、g(f(x))を計算します。そして、xとg(f(x))が一致するようなパラメータを学習します。

この時、パラメータが十分な数があれば元の入力をそのまま返すような関数が学習されてしまうのですが、パラメータに何らかの正則化をかけて学習することにより、少ない表現力でなんとか入力の情報を表現するようにパラメータは調整され、結果として入力情報をもっともうまく表現できるような関数が抽出されます。例えば画像であればエッジやパターンなどの基本的な特徴情報が取得されます。このように変換をかけて元に戻した上でうまく戻せるように学習する方法をautoencoderと呼びます。

autoencoderの代表的な例はPCAです。PCAは元の入力を線形変換を利用して低次元に圧縮し、また逆変換をかけた時の誤差が最小になるような操作に対応します。ニューラルネットの場合は、非線型な変換を使うため、PCAよりも複雑な表現を捉えることができると主張されてます。また、PCAの問題点を改善した別の形のautoencoderもいくつか登場しています(例えば ICA with Reconstruction Cost

次に二段目のレイヤーを学習する時は、一段目の出力を入力として扱い、これを符号化した上で、復元できるようなパラメータを学習します。この時、一段目のパラメータは固定で二段目のパラメータだけを調整します。建造物を作る際の下の土台から順にかためていくようなイメージです。三段目のレイヤーは同様に二段目のレイヤーの出力を入力として扱い、これをうまく復元できるように学習を行います。これを各層毎に繰り返していきます。

こうしてできあがったニューラルネットは、入力データをよりよく表現できるような低次元のデータに変換する力を持っています。そして最後のレイヤーからでてきた出力をいろいろな用途に変換します。なのでこの場合のニューラルネットワークは生の特徴を変換するような装置だと考えることができます。このように変換されたデータを例えば分類を学習するのであれば、このデータを利用して分類を行います。(例えば pdf の 11枚目などは顔の認識での良い例だと思います)。この際、教師データを利用してback propagationを行い、各層のパラメータを微調整することも行われます。

こうした学習が最も大規模に適用された例が最初にも示したGoogleの例でYoutubeから取得された1000万枚の200 x 200 の画像を対象に学習を行いました。パラメータの数は10億であり(画像解析でよく使われる異なる位置のフィルターの重みを共有するConvolutional Neural Netではなく、各位置で違うパラメータを使う)、これを1000〜2000台のマシン(16000コア)で1週間かけて学習しています。この結果最後のレイヤーの出力のそれぞれが、例えば猫や人を認識できるようになっています。

Dropout

[paper]

ここ最近のコンペティションで優勝した主要因がこのDropoutと呼ばれる技術だと言われています。ニューラルネットは表現力が強すぎるので過学習してしまうという問題がありました。

Dropoutでは学習時にパラメータのいくつかを使わないようにします。例えば間の層(隠れ層)の50%のパラメータを入力データ毎にランダムに使わないようにし、それで学習します。そして推定時には各パラメーターからの出力結果を50%にして推定します。
Hintonらの解説によれば、各データ毎に違うモデルを利用して学習し、推定時にはあたかも全部の結果の 平均を使っていることに対応しているので過学習しない(random forestやbaggingににている)と説明しています。

まだ理論的な解析は進んでいないですが実用的にはこのDropoutのおかげでテスト時の精度がかなり向上しました。

Randomized Weight

[pdf]
画像解析分野でconvolutional neuralnetとL2プーリングと組み合わせた場合greedy layerwise trainingによって重みを設定されたニューラルネットではなく、ランダムに重みを設定したニューラルネットの出力を利用して学習してもstate-of-the-artより数%低いだけの高い分類精度を持つということが知られています。(しかし入力画像をそのまま入力ベクトルとして学習しても分類精度は出ません)

ランダムな重みを利用しても高精度が出てしまう謎を論文では解明しました。彼らはどんな重みを利用したとしてもその後にL2-pooling(隣接する出力値の二乗和を出力する)を適用した形で構成されるニューロンはどのような重みを利用しても単純なサイン波に強く反応することを示しました(これは以前時系列データを滑走窓で特徴抽出してクラスタリングすると中心が正弦波になる現象を説明した井手さんの研究に似ているのかなと思いました。)。なのでランダムな重みを利用しても、それによるニューロンもある形のサイン波に反応します。こうしたサイン波のフィルターはGabor filterなどで利用されているものと良く似ているので画像の特徴をうまく捉えることができているのだと考えられています。

このRandomized Weightは研究的にはベースラインとしてしか使われていませんが、実用的にはわざわざ面倒な学習しなくても精度が出てしまうので、もっと多く使われるのではないかと思います。また、ランダムな基底を用いても重要な情報を取得できるというのはcompressed sensingや行列のランダムサンプリング[pdf]でも多く利用されており,もっとdeep learningでも使われてもよいのではと思っています。

今後

Deep Learningが今のデータ解析、機械学習を全て置き換えてしまうことは無いとは思いますが、いくつかの分野、特に人の認識に関係するような画像、音声、言語といった分野では既存の技術を大きく超えている感があります。

しかし、Deep Learningは発展途上で何が本当に上手くいっているのか良くわかっていない状況です。例えば正則化においてsparse化は重要だという人達がいる一方、その効果に疑問を出している人たちもいます。

また、SVMにおけるlibsvmのようなdeep learningにおける標準的なライブラリが存在しないので一般の人が手を出すことができない状況ではあります(いずれどこかが出し一般的に使える様になるのだと思いますが。例えばNLPであればsennaがあります)。

こうした状況は初期のSVMやNonparametric Bayesが流行りはじめの頃の得体の知れないものがやってきた感に似ています。今後実際の理論的な解析や実用化への改良が進み同じようにメジャーになるのではないかと思います。

  • Twitter
  • Facebook